列表 上一篇 下一篇

STM32:USART中断、非中断模式小结

  1. USART的接收通道与发送通道可以说是完全独立的,虽然它们共用了USART_DR这个数据寄存器和void USART1_IRQHandler(void)中断函数。但是要注意的是对USART_DR的读写是分别作用到收发数据寄存器的,在void USART1_IRQHandler(void)要分别检查发送的中断位和接收的中断位,在读写数据时、中断例程中是可以完全独立考虑收发部分的。
  2. 没有开启中断模式的时候,读写(收发)数据寄存器之前必须检查是否可用,若果开启了中断,中断例程中的第一次读写是不用检查数据寄存器是否可用(一定可用),但是接下来的收发都需要检查数据寄存器是否可用。为了编程统一的话,无论是否开启中断,读写数据寄存器之前都要检查是否可用,也是可以的。
  3. 关于中断位的清除,可以不显式的清除。为了编程统一的话,显式的清除中断位,也是可以的。
  4. 特别要注意的是开启了发送中断的影响,如果进入中断并清除了中断位,但是发送数据寄存器为空将导致再次进入中断,所以会导致系统一直中断,正确的做法是:没有数据发送就关闭发送中断。相反在不想接收数据的时候没有关闭接收中断并不会像发送中断没有关闭那么严重。