摘自:http://bbs.ednchina.com/BLOG_ARTICLE_3014819.HTM
最近在調試stm32 DMA驅動,遇到一個問題,我讓dma每個1s向終端發一次數據包,但是結果發現,發送一次之后,再也不發了,進不了中斷了。
dma初始化是沒問題的,因為dma第一次可以運行。
經查了一天時間,終於在reference manual P269頁上看到這樣一句話:
就是說,設置DMA執行一次之后,長度會被清零,要重新設置長度,但是設置長度之前要關閉DMA,設置才有效。
下面紅色框起來的是修改后的:
經過改動之后,測試通過。
在中斷里面添加了如下語句:
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);