STM32串口發送用哪個中斷?


STM32串口發送用哪個中斷?


一般在stm32開發時候,串口接收中斷用的比較多,發送的用的少。如果仔細看手冊你也會發現實際上針對發送的中斷有兩個,那我們到底該用哪個中斷呢?

  • 一個是TXE
  • 一個是TC

那就分別來講下這兩個中斷有什麼區別,才好最終做選擇。

第一個TXE中斷,完整名稱叫做Transmit data register empty,中文翻譯:發送數據寄存器為空中斷。如果使能了該中斷並且在串口的發送寄存器裡面沒有數據就會立馬產生中斷。

第二個TC中斷,完整名稱叫做Transmission Complete,中文翻譯:發送完成中斷。如果使能該中斷,那麼在發送寄存器裡面的數據被髮送出去以後就會產生中斷。

乍一看兩個是不是很像,好像都是和發送數據寄存器有關。實際上呢還是有略微的不同,最關鍵的就是TXE中斷在沒有發送數據的時候都可以產生。而TC呢是必須發送一個數據後才能產生。

所以結論是兩個中斷都可以用來發送數據,只是流程稍有不同。

具體流程可以看下圖:


STM32串口發送用哪個中斷?


STM32串口發送用哪個中斷?

可以看到使用TXE中斷的時候流程會稍微簡化一些,所以我使用發送中斷的時候大部分都會用TXE。這樣我只用把數據一股腦丟到緩衝區,然後再打開TXE中斷(這時候發送寄存器是空的)就可以直接進中斷挨個把數據發送出去。

但是使用TC一定需要先發送一個數據以後(這樣才能有發送完成)才能進入中斷。


分享到:


相關文章: