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

最近在调试stm32 DMA驱动,遇到一个问题,我让dma每个1s向终端发一次数据包,但是结果发现,发送一次之后,再也不发了,进不了中断了。

dma初始化是没问题的,因为dma第一次可以运行。

经查了一天时间,终于在reference manual P269页上看到这样一句话:

USART1采用DMA的DMA_Mode_Normal模式进行多次数据的传输
就是说,设置DMA执行一次之后,长度会被清零,要重新设置长度,但是设置长度之前要关闭DMA,设置才有效。
下面红色框起来的是修改后的:
USART1采用DMA的DMA_Mode_Normal模式进行多次数据的传输
经过改动之后,测试通过。
在中断里面添加了如下语句:

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);

相关文章:

  • 2021-07-27
  • 2021-10-29
  • 2022-12-23
  • 2021-12-29
  • 2021-09-14
  • 2022-01-21
  • 2021-08-18
  • 2021-08-20
猜你喜欢
  • 2021-12-26
  • 2021-12-08
  • 2021-07-30
  • 2021-07-29
  • 2021-08-20
  • 2021-12-18
相关资源
相似解决方案