在這裡分享項目中我經常使用的一種串口收發方式:阻塞發送 + 接收中斷 +空閑中斷 + 環形隊列 項目代碼地址:https://gitee.com/Mokun_gitee/stm32_hal_study.git 一、簡介 串口發送使用最簡單的阻塞發送方式,一般來說都是接收的數據量比較大,發送數據用此方 ...
在這裡分享項目中我經常使用的一種串口收發方式:阻塞發送 + 接收中斷 +空閑中斷 + 環形隊列
項目代碼地址:https://gitee.com/Mokun_gitee/stm32_hal_study.git
一、簡介
串口發送使用最簡單的阻塞發送方式,一般來說都是接收的數據量比較大,發送數據用此方式即可。
串口接收使用接收中斷+空閑中斷+FIFO,數據量一般的使用沒有問題,若數據很大,考慮使用加上DMA來傳輸。
二、STM32CubeMX配置串口
串口參數預設配置
打開串口中斷
使用LL庫進行開發
三、添加FIFO緩衝區
編寫FIFO數據結構,環形隊列由數組實現,提供 入隊、出隊等介面給串口使用
四、重構串口接收中斷
編寫BSP串口代碼,自定義中斷函數,提供給庫中斷調用,中斷函數分別實現接收中斷與空閑中斷的相關操作
在官方庫的中斷函數下添加自定義的中斷處理函數
五、重構printf列印函數
使用可變參數,重構串口收發
串口自發自收測試
六、效果
如圖所示,2路串口同時自發自收,每500ms發送1024 byte 數據,無壓力,理論可以支持的串口取決於MCU的串口數