STM32单片机的接收不定长度数据方法改进

2019-07-24 13:37发布

 原子哥的开发板例程《实验4 串口实验》中,是利用特殊数据(回车符)来确定结束的,所以必须在发送数据后再发送一个回车符(比如说有的项目中一帧数据中中间要是有回车符就没法用了),其实STM32单片机的接收不定长度字节的数据有种比较方便的方法,那就是利用STM32单片机的IDLE中断,可以接收不定长字节的数据。

大致介绍下IDLE中断
IDLE中断什么时候发生?

IDLE就是串口收到一帧数据后,发生的中断。其实就是接收一次发来的数据收完以后产生的中断。 
②如何配置好IDLE中断?
Ⅰ初始化中开启空闲中断USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);//开启空闲中断 Ⅱ中断函数中判断标志位if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)  //空闲总线中断
一旦传完一帧数据就可以在这里面处理了。 ③特别注意 清除标志位不是 直接往USART_SR寄存器的第四位写0,这位是只读的,清除他应该是软件序列清除该位(先读USART_SR,然后读USART_DR)。 Temp_Clear_IDLE=USART1->SR; Temp_Clear_IDLE=USART1->DR;//清除USART_IT_IDLE位   最后附上自己的工程,在原子哥的工程上改的,和原子哥的功能一样,只不过是可以不用加结束符0x0d 0x0a。  
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
sdwhupk
1楼-- · 2019-07-24 18:07
这个串口空闲中断不错,以前一直用接收中断的方式。
龙之谷
2楼-- · 2019-07-24 22:02
谢谢分享~~~~~

补充一下接收空闲中断的解释:
总线空闲中断是在检测到在接收数据后,数据总线上一个字节的时间内,没有再接到数据后发生。也就是RXNE位被置位之后,才开始检测,只被置位一次,除非再次检测到RXNE位被置位,然后才开始检测下一次的总线空闲。
链接:http://bbs.21ic.com/icview-728764-1-1.html
jermy_z
3楼-- · 2019-07-25 03:39
是一种好思路  以前是用定时器判断超时认为一帧结束的
烟酒不沾
4楼-- · 2019-07-25 03:57
好方法,以前这这个事痛苦过好一阵子啊!
STM32VBT6
5楼-- · 2019-07-25 09:33
 精彩回答 2  元偷偷看……
myxiaoniao
6楼-- · 2019-07-25 13:40
这个不是amo坛子上讨论过很多次嘛,各种思路都有
usart1->dr即可读,不需要赋值

一周热门 更多>