快捷搜索:  汽车  科技

stm32串口发送完成中断(STM32串口发送用哪个中断)

stm32串口发送完成中断(STM32串口发送用哪个中断)具体流程可以看下图:所以结论是两个中断都可以用来发送数据,只是流程稍有不同。第一个TXE中断 完整名称叫做Transmit data register empty,中文翻译:发送数据寄存器为空中断。如果使能了该中断并且在串口的发送寄存器里面没有数据就会立马产生中断。第二个TC中断,完整名称叫做Transmission Complete,中文翻译:发送完成中断。如果使能该中断,那么在发送寄存器里面的数据被发送出去以后就会产生中断。乍一看两个是不是很像,好像都是和发送数据寄存器有关。实际上呢还是有略微的不同,最关键的就是TXE中断在没有发送数据的时候都可以产生。而TC呢是必须发送一个数据后才能产生。


stm32串口发送完成中断(STM32串口发送用哪个中断)(1)


一般在STM32开发时候,串口接收中断用的比较多,发送的用的少。如果仔细看手册你也会发现实际上针对发送的中断有两个,那我们到底该用哪个中断呢?

  • 一个是TXE
  • 一个是TC

那就分别来讲下这两个中断有什么区别,才好最终做选择。

第一个TXE中断 完整名称叫做Transmit data register empty,中文翻译:发送数据寄存器为空中断。如果使能了该中断并且在串口的发送寄存器里面没有数据就会立马产生中断。

第二个TC中断,完整名称叫做Transmission Complete,中文翻译:发送完成中断。如果使能该中断,那么在发送寄存器里面的数据被发送出去以后就会产生中断。

乍一看两个是不是很像,好像都是和发送数据寄存器有关。实际上呢还是有略微的不同,最关键的就是TXE中断在没有发送数据的时候都可以产生。而TC呢是必须发送一个数据后才能产生。

所以结论是两个中断都可以用来发送数据,只是流程稍有不同。

具体流程可以看下图:


stm32串口发送完成中断(STM32串口发送用哪个中断)(2)


stm32串口发送完成中断(STM32串口发送用哪个中断)(3)

可以看到使用TXE中断的时候流程会稍微简化一些,所以我使用发送中断的时候大部分都会用TXE。这样我只用把数据一股脑丢到缓冲区,然后再打开TXE中断(这时候发送寄存器是空的)就可以直接进中断挨个把数据发送出去。

但是使用TC一定需要先发送一个数据以后(这样才能有发送完成)才能进入中断。

猜您喜欢: