各位大神问一下,串口通讯怎么把我发送的字符一个一个读出来,并且判断。我自己写的程序有个bug,就是单独发送第一个字符,也是可以执行程序,而不是一定要验证两个字符才能执行程序。比如下面的程序,我发送a1,程序可以执行,但我发送a,程序也是可以执行的,这个怎么解决?
int main(void)
{
u8 Tx_Buf[8]; //要发送的数据
u8 t;
u16 len;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //延时初始化
uart_init(115200); //串口初始化波特率为115200
LED_Init(); //初始化与LED连接的硬件接口
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
printf("
您发送的消息为:
");
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART_RX_BUF[t]); //向串口1发送数据
Tx_Buf[t]=USART_RX_BUF[t];
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
if(Tx_Buf[0]=='a'&&Tx_Buf[1]=='1')
{
LED1=!LED1;
delay_ms(100);
}
printf("
");//插入换行
USART_RX_STA=0;
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
首先你的if内条件少个&,其次你这样做并没有清空数组,按你的程序假设先发的a1,执行完for循环后,进入if,你的Tx_Buf[t]的值并不是Tx_Buf[1],而且你仅将数组中的一个单元清零了,其他的都没管,一旦你输入的多于两个了,你又会出现新的BUG。最后我上次说的在if语句下指的是if这个花括号外,也就是在你的那个“printf(" ");//插入换行”这句上边写。你可以再来个for循环,循环8次,清空数组。
a=USART_RX_BUF[0];
a1=a-48;
b=USART_RX_BUF[1];
b1=b-48;
d=a1*10+b1;
if(d==21)
{
LED0=!LED0;
}
if(Tx_Buf[0]=='a'&Tx_Buf[1]=='1')
{
LED1=!LED1;
delay_ms(100);
Tx_Buf[t]=0;
}
为什么我清空数组,程序还是跟原来一样?
一周热门 更多>