完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位大神问一下,串口通讯怎么把我发送的字符一个一个读出来,并且判断。我自己写的程序有个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("rn您发送的消息为:rn"); for(t=0;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("rnrn");//插入换行 USART_RX_STA=0; } } } |
|
相关推荐
6个回答
|
|
加入运算机制,比方说特征码计算等,具体做法位发送数据包时发一个,接数据等待是否需要接收第二数据包,或者结束跳出,等第二数据包接到后,与第一联合进行验证,如果是需要执行段,就执行,如果否,中断跳回主程序首段。
|
|
|
|
你已经有通讯协议,USART_RX_STA&0x8000 只要最后一位接收正确,就会把收到的数据都读出来,这个应该是例程上的程序吧,已OX0A,OX0B也就是回车结尾为判断符;
|
|
|
|
425551780 发表于 2017-2-20 15:57 if(Tx_Buf[0]=='a'&Tx_Buf[1]=='1') { LED1=!LED1; delay_ms(100); } 我用这个程序判断我收到的字符,当我收到 a1 这个字符的时候程序是可以执行的,但是我再发送 a 这个字符,程序也是会执行的,我要怎么才只能满足当我只收到 a1 这个字符才能执行程序? |
|
|
|
***lbin2008 发表于 2017-2-19 19:42 本人新手,水平不够,你能不能写段例程给我看看 |
|
|
|
这个要具体芯片和相关的数据手册。
|
|
|
|
越努力,越幸运!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1276 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1209 浏览 3 评论
2288 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1372 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1799 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 02:51 , Processed in 0.599056 second(s), Total 54, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号