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

转载---点击打开链接


原子哥的开发板例程《实验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

实验串口(空闲中断)点击打开链接


实验4 串口实验(idle).rar

293.16 KB, 下载次数: 349


猜你喜欢

转载自blog.csdn.net/qq_38405680/article/details/80560304