USART1采用DMA的DMA_Mode_Normal模式進行多次數據的傳輸


摘自:http://bbs.ednchina.com/BLOG_ARTICLE_3014819.HTM

最近在調試stm32 DMA驅動,遇到一個問題,我讓dma每個1s向終端發一次數據包,但是結果發現,發送一次之后,再也不發了,進不了中斷了。

dma初始化是沒問題的,因為dma第一次可以運行。

經查了一天時間,終於在reference manual P269頁上看到這樣一句話:

dma.jpg
就是說,設置DMA執行一次之后,長度會被清零,要重新設置長度,但是設置長度之前要關閉DMA,設置才有效。
下面紅色框起來的是修改后的:
ok.jpg
經過改動之后,測試通過。
在中斷里面添加了如下語句:

DMA_Cmd (DMA1_Channel4,DISABLE); //關DMA
DMA_SetCurrDataCounter(DMA1_Channel4,SENDBUFF_SIZE);

在main函數里面重新使能DMA即可:

USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
//開始一次DMA傳輸!
DMA_Cmd(DMA1_Channel4, ENABLE);


免責聲明!

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



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