zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    Notepad++编写Markdown
    解决Unable to create new native thread
    Outlook2016 新装进阶操作指南
    卷积神经网络
    反向传播算法
    神经网络的基本组成
    cs231n课程索引
    快速入门特征工程
    快速入门Sklearn
    快速入门Matplotlib
  • 原文地址:https://www.cnblogs.com/ct1104/p/4009480.html
Copyright © 2011-2022 走看看