在使用STM32的串口接收数据时,通常会使用接收中断的方式,其中常用的是RXNE
中断。但是在这里,我将分享另一种接收数据的方式——IDLE
中断(注意:本文的例子是在STM32F103ZET6上运行的)。
一、IDLE中断是在什么时候发生的?
IDLE
中断是在串口接收到一帧数据后发生的中断。什么是一帧数据呢?举个例子,假如我们一次给单片机发送了1个字节或者8个字节,这些在一次发送过程中到达的数据被称为一帧数据,也可以称为一包数据。
二、RXNE中断和IDLE中断的区别?
当串口接收到一个字节时,会触发RXNE
中断;而当接收到一帧数据时,会触发IDLE
中断。举个例子,如果我们一次性给单片机发送了8个字节,那么会触发8次RXNE
中断和1次IDLE
中断。
三、IDLE中断如何配置?
IDLE中断由USART_CR1
寄存器进行配置:
对于STM32F103ZET6
来说,配置USART_CR1
寄存器bit5为1则打开RXNE中断,配置USART_CR1
寄存器bit4为1则打开IDLE中断。
这是状态寄存器,当串口接收到一个字节数据时,bit5就会自动变成1,当接收完一帧数据后,bit4就会变成1.
需要注意的是,在中断函数里面,需要把对应的位清0,否则会影响下一次数据的接收。
对于RXNE中断,对USART_DR的读操作可以将该位清零:
对于IDLE中断,由软件序列清除该位(先读USART_SR,然后读USART_DR):
四、USART+DMA+IDLE接收不定长数据例程
1、USART初始化
2、中断服务函数
3、主函数
4、运行结果
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !