|
在嵌入式開發(fā)中,經(jīng)常會用到串口通訊。面對不同應(yīng)用場景,需要不同的方案。 今天我們來講一下高效,可靠,安全的方案,記得看到最后,會有收獲。 常見的有串口輪詢模式,串口中斷模式,串口DMA接收傳輸?shù)鹊龋?/p> 利用串口的空閑中斷配合DMA的環(huán)形緩沖區(qū)模式,可以高效接收不固定長度的消息報文 下圖中經(jīng)過黃色的高電平時間空閑之后,就會產(chǎn)生一個空閑事件,IDLE EVENT ![]() 因為DMA功能有
舉個例子; 如下圖所示,這里分配了一個DMA緩沖區(qū),大小是12字節(jié),如果從地址1開始接收,會出現(xiàn)以下這兩種情況;
![]() 這個思路其實我之前也有實踐過,但是沒有很好地利用HC和TC事件。 所以無法處理這種情況,即DMA緩沖區(qū)處于環(huán)形模式( 下面是 ![]() 再次簡單介紹一下縮略詞的含義;
這里簡單介紹一下情況E的解決方案,上面圖片最右邊小圖;
所以,不難發(fā)現(xiàn),如果只使用空閑中斷,如果需要接收的數(shù)據(jù)長度大于緩沖區(qū),就會出現(xiàn)數(shù)據(jù)覆蓋的情況,而加上DMA的HT和TC中斷,就完美解決了這樣的問題; 當然除了這些,還有很多優(yōu)秀的方案,這個項目提供大量的例子。 項目地址: ![]() 目前這個項目主要支持主流的STM32芯片平臺和一些開發(fā)板上的測試DEMO,具體如下所示; ![]() 相應(yīng)的例子程序如下所示,除了裸機程序,還有環(huán)形緩沖區(qū)接收,輪詢接收,DMA+空閑中斷基于RTOS的模式接收,挺豐富的,可以參考一下; ![]() 作者在 STM32F413-Nucleo 開發(fā)板進行程序的測試,發(fā)現(xiàn)優(yōu)化效果很不錯; 在
|
|
|
來自: 新用戶0118F7lQ > 《文件夾1》