摘自: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);

posted on 2014-10-07 16:28  CT1104  阅读(4730)  评论(0编辑  收藏  举报