想要实现在pc上用串口传递信息给stm32板子,不想用串口调试助手,想直接在dev c++或者vc,vs上运行程序,然后
直接把想要传递的字符串串口传递给板子。希望大神可以帮忙指导,不胜感激,如果能很快解决的话悬赏增加,学生党,求大神指导。也可以发邮箱a4507408789@163.com
可参考:http://bbs.kechuang.org/t/57139
基本功能描述:
上位机发送指令控制STM32
情况一:命令为3个字符
起始符 命令符 结束符 功能
0x2f 0x34 0xcc 温度数据返回
0x2f 0x32 0xcc led亮
0x2f 0x33 0xcc led灭
我是通过串口中断来实现串口数据的接收的。
中断程序如下:如果接收到的指令正确,改变全局变量USART_RX_STA 的值,让它等于0x80。
if(USART_RX_STA != 0x80)
{
if(data == 0x2f) //起始符
{
memset(RecvBuf, 0, sizeof(RecvBuf));
RecvBuf[0] = data;
USART_RX_STA = 0;
USART_SendData(USART1, data);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
else if(data == 0x39) //结束符
{
if(RecvBuf[0] != 0x2f)
{
memset(RecvBuf, 0, sizeof(RecvBuf));
return;
}
RecvBuf[2] = data;
USART_RX_STA = 0x80;
USART_SendData(USART1, data);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
else
{
RecvBuf[1] = data;
USART_SendData(USART1, data);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
}
主函数程序:
while(1)
{
if(USART_RX_STA == 0x80)
{
switch(RecvBuf[1])
{
case 0x30:
break;
case 0x31:
break;
case 0x32:
GPIO_SetBits(GPIOD, GPIO_Pin_2);
break;
case 0x33:
GPIO_ResetBits(GPIOD, GPIO_Pin_2);
break;
case 0x34:
temp=DS18B20_Get_Temp();
memset(SendBuf, 0, sizeof(SendBuf));
SendBuf[0] = 0x2f;
SendBuf[1] = 0x34;
if(temp<0)
{
temp=-temp;
SendBuf[2] = Number[11];
}
else
{
SendBuf[2] = Number[10];
}
SendBuf[3] = Number[temp/100%10];
SendBuf[4] = Number[temp/10%10];
SendBuf[5] = '.';
SendBuf[6] = Number[temp%10];
SendBuf[7] = 0x04;
SendBuf[8] = 0xcc;
for(i = 0; i < 9; ++i)
{
USART_SendData(USART1, SendBuf);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
break;
default:
break;
}
USART_RX_STA = 0;
}
else
{
delay_ms(200);
}
}
}
以前写的串口程序,可以直接运行,http://download.csdn.net/detail/yunda333/6864449
static char status = 0x00;
switch(status)
{
case 0x00:
if(0x2F == data)
{
recvBuf[0] = 0x2F;
status = 0x01;
}
break;
case 0x01:
if(0xCC == data)
{
status = 0x00;
} else
{
recvBuf[1] = data;
status = 0x02;
}
break;
case 0x02:
if(0xCC == data)
{
recvBuf[2] = 0xCC;
USART_RX_STA = 0x80;
//data parse
status = 0x00;
}
break;
default:
break;
}