原子哥的开发板例程《实验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。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>