野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10194|回复: 2

STM32F407 DMA与USART实验部分 有点疑问

[复制链接]
发表于 2017-12-28 17:07:20 | 显示全部楼层 |阅读模式
大家好,我是刚学习stm32不久,刚看到野火老师的中级篇--DMA那一部分
DMA—M TO P, SRAM 到外设这一节。  

我看main函数里,先初始化了USART,然后初始化了DMA,并且使能了DMA
然后才初始化DMA要用的数据源SendBuff,
最后才调用USART_DMACmd


有个疑问是,为什么不是SendBuff先初始化好,然后调用USART_DMACmd使能串口DMA发送
最后再调用USART_DMA_Config()???      


因为我的理解是调用了USART_DMA_Config()以后,
DMA就开始DMA数据传输 【DMA_Cmd(DMA_STREAM, ENABLE)】,
而“SendBuff,USART_DMACmd使能串口DMA发送”这两步还没有做,DMA数据应该会丢吧,


哈哈,但老师的实验结果,PC确实收到了5000个字节。


是不是我对这个流程还没有理解清楚,求助大家




int main(void)
{
  uint16_t i;
  /* 初始化USART */
  Debug_USART_Config();

  /* 配置使用DMA模式 */
  USART_DMA_Config();

  /* 配置RGB彩色灯 */
  LED_GPIO_Config();

  //printf("\r\n USART1 DMA TX 测试 \r\n");

  /*填充将要发送的数据*/
  for(i=0;i<SENDBUFF_SIZE;i++)
  {
    SendBuff         = 'A';

  }

  /*为演示DMA持续运行而CPU还能处理其它事情,持续使用DMA发送数据,量非常大,
  *长时间运行可能会导致电脑端串口调试助手会卡死,鼠标乱飞的情况,
  *或把DMA配置中的循环模式改为单次模式*/               

  /* USART1 向 DMA发出TX请求 */
  USART_DMACmd(DEBUG_USART, USART_DMAReq_Tx, ENABLE);

回复

使用道具 举报

发表于 2017-12-29 08:50:22 | 显示全部楼层
  USART_DMA_Config() 只是配置好了dma,还没开始传输,在调用USART_DMACmd使能后才触发传输
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-2 12:30:29 | 显示全部楼层
谢谢,明白了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 21:40 , Processed in 0.028629 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表