完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
申明下:我发的字符串格式是这样的: “F0AF”
两个‘F’是用来判断数据的正确性的 ‘A’这个数据就是我需要的。求人帮忙!!!谢谢!! void USART1_IRQHandler(void) //串口1中断服务程序 { int i=0; if(USART_GetiTStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是‘F’,'F'结尾) { USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志 USART_RX_BUF[Usart1_Rx_Num]=USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据 Usart1_Rx_Num++;} //判断数据的正确性 if((USART_RX_BUF[0]==0x46)&&(USART_RX_BUF[Usart1_Rx_Num-1]==0x46)) //数据时'F' 'F'开头与结尾 例如'F0AF' USART_RX_STA=1;//接收标志位 if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)//清除溢出错误标志位 { USART_ClearFlag(USART1,USART_FLAG_ORE);//清除 USART_ReceiveData(USART2);//读DR } if(USART_RX_STA) { switch (USART_RX_BUF[2]) { case 0x41:run();break; case 0x42:right();break; case 0x43:left();break; case 0x44:back();break; } for(;i |
|
相关推荐
12个回答
|
|
求路过的帮忙下,谢谢
|
|
|
|
你先在 USART_RX_STA=1;//接收标志位设一个断点看看,程序会不会进来,如果不进来,那就把后面的注释掉,然后把进来的数据直接放到数组里面看看,确保你的接收数据是没问题的。
|
|
|
|
Usart1_Rx_Num=1时就有问题了.
|
|
|
|
回复第 3 楼 于2014-04-05 10:52:01发表:
你先在 USART_RX_STA=1;//接收标志位设一个断点看看,程序会不会进来,如果不进来,那就把后面的注释掉,然后把进来的数据直接放到数组里面看看,确保你的接收数据是没问题的。 我不知道怎么断点调试T T |
|
|
|
|
|
|
|
(USART_RX_BUF[0]==0x46)&&(USART_RX_BUF[Usart1_Rx_Num-1]==0x46)指向同一个值.
|
|
|
|
不建议在中断里做处理,建议挪到外面去,中断里面只保留标记。
|
|
|
|
//判断数据的正确性
if ((USART_RX_BUF[0] == 0x46) && (USART_RX_BUF[Usart1_Rx_Num - 1] == 0x46)) //数据时'F' 'F'开头与结尾 例如'F0AF' { USART_RX_STA = 1; //接收标志位 } 修改为 //判断数据的正确性 if (Usart1_Rx_Num > 2) { if ((USART_RX_BUF[0] == 0x46) && (USART_RX_BUF[Usart1_Rx_Num - 1] == 0x46)) //数据时'F' 'F'开头与结尾 例如'F0AF' { USART_RX_STA = 1; //接收标志位 } } |
|
|
|
|
|
|
|
楼主的程序有个很大问题,
USART_RX_BUF[Usart1_Rx_Num]=USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据 这个语句是返回的16位数值,你得进行数据转换,要不然你接收的数据时错误的。 修改为: USART_RX_BUF[Usart1_Rx_Num]=(unsigned char)USART_ReceiveData(USART1); 你这个功能很容易实现,最好把字符判断的放在while()中进行。 |
|
|
|
USART_ClearFlag(USART1,USART_FLAG_ORE);//清除
USART_ReceiveData(USART2);//读DR 楼主你使用的USART1,读的怎么是USART2的数据 |
|
|
|
中断最好是只接收数据,对数据包的判断放到中断外,数据包结构最好改改,头尾两个字符不要是一样的,不然连发两个数据包就无法分辨包头包尾了。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
hal库中i2c卡死在HAL_I2C_Master_Transmit
515 浏览 0 评论
LL库F030进行3个串口收发,2个串口为232,一个为485,长时间后,会出现串口1停止运行,另外两个正常,只有重启复原
1188 浏览 1 评论
492 浏览 0 评论
960 浏览 0 评论
1069 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-1 03:48 , Processed in 0.809545 second(s), Total 94, Slave 77 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号