stm32f4 dma + uart idle + double 調試小記


使用 stm32f4 調試uart 接收, 使用 空閑中斷,dma 雙緩沖模式,有以下幾點需要注意的。

  1. 調試的時候斷點不要打在 if (USART_GetITStatus(USART6, USART_IT_IDLE) != RESET) 這種語句上面,要打在 if 的代碼塊里面。mdk 調試的時候,會出現一些 bug,當在 if (USART_GetITStatus(USART6, USART_IT_IDLE) != RESET) 斷點的時候,能夠看到 idle 信號出現,但是只要向下執行,不管是單步還是怎樣,下一步的時候 idle 標志位就會消失。導致進不了空閑中斷處理語句。但是如果斷點打在代碼塊里面,就能夠正常進入了。

  2. 使用雙緩沖的時候, DMA_DoubleBufferModeConfig, DMA_DoubleBufferModeCmd 需要放在 DMA_Cmd 前面,還有別忘了 開啟 circular 模式。

  3. 接收的時候,已經接收的字節數,等於 buffersize - ndtr 的結果。

  4. 開啟雙緩沖的時候,可以不用 disable dma,只需要在 空閑中斷里面,識別出 ndtr 和 ct,然后經過計算得出本次傳送的數據個數,並把本次開始的地址和數據個數記錄下來,就可以由非中斷部分程序來讀取這一幀接收的數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM