使用 stm32f4 調試uart 接收, 使用 空閑中斷,dma 雙緩沖模式,有以下幾點需要注意的。
-
調試的時候斷點不要打在 if (USART_GetITStatus(USART6, USART_IT_IDLE) != RESET) 這種語句上面,要打在 if 的代碼塊里面。mdk 調試的時候,會出現一些 bug,當在 if (USART_GetITStatus(USART6, USART_IT_IDLE) != RESET) 斷點的時候,能夠看到 idle 信號出現,但是只要向下執行,不管是單步還是怎樣,下一步的時候 idle 標志位就會消失。導致進不了空閑中斷處理語句。但是如果斷點打在代碼塊里面,就能夠正常進入了。
-
使用雙緩沖的時候, DMA_DoubleBufferModeConfig, DMA_DoubleBufferModeCmd 需要放在 DMA_Cmd 前面,還有別忘了 開啟 circular 模式。
-
接收的時候,已經接收的字節數,等於 buffersize - ndtr 的結果。
-
開啟雙緩沖的時候,可以不用 disable dma,只需要在 空閑中斷里面,識別出 ndtr 和 ct,然后經過計算得出本次傳送的數據個數,並把本次開始的地址和數據個數記錄下來,就可以由非中斷部分程序來讀取這一幀接收的數據。