串口一般有兩種方式:查詢和中斷;STM32還支持第三種DMA方式。
1、查詢:
串口程序不斷地循環查詢標志,看看當前有沒有數據要它傳送或接收。如果有的話進行相應的寫操作和讀操作進行傳送或接收數據。
特點:
- 查詢方式的效率是比較低的,並且由於STM32的UART硬件上沒有FIFO,如果程序功能比較多,查詢不及時的話很容易出現數據丟失的現象, 故實際項目中這種方式用的並不多。
2、中斷
平時串口只要打開中斷即可。如果發現有一個中斷來,則意味着有數據需要接收(接收中斷)或數據已經發送完成(發送中斷)。
特點:
- 中斷方式的話我們可以分別設置接收中斷和發送中斷,當串口有數據需要接收時才進入中斷程序進行讀讀操,這種方式占用CPU資源比較少,實際項目中比較常用,但需要注意中斷程序不要太復雜使執行時間太長,如果執行時間超過一個字符的時間的話也會出現數據丟失的現象,這個波特率比較高的串口編程中比較容易出現,可以考慮用循環BUF方法,在中斷程序中只負責實時地接收實數數和發送時的填數(寫發送寄存器),其它操作放在中斷外處理。
3、DMA方式
設置好DMA工作方式,由DMA來自動接收或發送數據。
特點:
- STM32還提供了第三種DMA方式用來支持高速地串口傳輸。這種方式只要設置好接收和發送緩沖位置,可以由DMA來自動接收和發送數據,這可以最小化占用CPU時間。