OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3100|回复: 1

stm32F429 串口采用DMA方式发送,数据流使能失败

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-11-12
在线时间
5 小时
发表于 2019-11-13 01:57:18 | 显示全部楼层 |阅读模式
1金钱
最近项目要使用F429的DMA进行串口发送数据,烧录之后程序无法正常运行,仿真发现在执行完DMA_Cmd(DMA2_Stream7, ENABLE)之后并没有被使能,反而多了两个错误中断标志,一个是传输错误中断标志
,一个是 FIFO 错误中断标志 ,这个是什么原因呢?搞了好久也没找出原因,求各位大佬指点。以下为DMA初始化函数内容: DMA_InitTypeDef DMA_InitStructure;  /*开启DMA时钟*/
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
  __nop();__nop();__nop();                    //等待 DMA1 时钟稳定
  DMA_DeInit(DMA2_Stream7);// 复位初始化DMA数据流
  while (DMA_GetCmdStatus(DMA2_Stream7) != DISABLE)  { }// 确保DMA数据流复位完成
  USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
       
  DMA_InitStructure.DMA_Channel = DMA_Channel_4; //usart1 tx对应dma2,通道4,数据流7  
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(USART1->DR);//设置DMA源:串口数据寄存器地址         
  DMA_InitStructure.DMA_Memory0BaseAddr = (u32)SendBuff; //内存地址(要传输的变量的指针)        
  DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;//方向:从内存到外设                
  DMA_InitStructure.DMA_BufferSize = 5;//传输大小   
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址不增  
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;        //内存地址自增
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//外设数据单位       
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;        //内存数据单位 8bit
        DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;        //DMA模式:不断循环
  DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //优先级:中       
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; //禁用FIFO      
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;   
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;  //存储器突发传输 单次传输   
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;//外设突发传输 单次传输                   
  DMA_Init(DMA2_Stream7, &DMA_InitStructure);//配置DMA2的数据流7

  DMA_Cmd(DMA2_Stream7, ENABLE);//使能DMA
  while(DMA_GetCmdStatus(DMA2_Stream7) != ENABLE);// 等待DMA数据流有效

使能 DMA2_Stream7

使能 DMA2_Stream7
可以看到数据流未被正常使能。

2.jpg 出现两个错误标志。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-11-12
在线时间
5 小时
 楼主| 发表于 2019-11-13 01:59:37 | 显示全部楼层
串口已经正常初始化,DMA初始化函数在串口初始化之后
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-15 20:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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