完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近项目要使用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数据流有效 可以看到数据流未被正常使能。 可以看到出现两个错误标志。 串口已经在初始化DMA之前初始化成功。 |
|
相关推荐
2个回答
|
|
DMA 空间 SendBuff 要提前分配啊
|
|
|
|
可能的原因是DMA的配置有误,导致数据流使能失败。以下是几个可能的原因和解决方法:
1. DMA传输长度设置错误: DMA_InitStructure.DMA_BufferSize 需要设置为要传输的数据长度,单位为字节(byte),而不是以字为单位。需要根据实际情况进行修改。 2. DMA数据传输方向错误: DMA的数据传输方向要设置为内存到外设,其中 DMA_InitStructure.DMA_DIR=DMA_DIR_MemoryToPeripheral。 3. DMA通道、流设置错误: DMA通道和流的选择要根据串口使用的DMA通道和流进行配置。需要确认使用的是正确的DMA2通道和流,并且没有被其他外设占用。 4. DMA传输模式设置错误: DMA传输模式需要设置为循环模式,以保证连续的数据传输。可以使用 DMA_InitStructure.DMA_Mode=DMA_Mode_Circular。 5. 中断使能错误: DMA传输完成时会触发中断,在使用DMA传输时需要对应中断进行使能。可以使用 DMA_IT_TC 表示传输完成中断和 DMA_IT_TE 表示传输错误中断的标志位。 如果以上方法都没有解决问题,建议检查一下硬件电路和引脚配置是否正确,以及其他相关配置是否与串口的使用方式相符。另外,在调试过程中可以输出调试信息,查看相关寄存器的值和中断的触发情况,以帮助定位具体的问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1935浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
728浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
567浏览 3评论
593浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
551浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 12:20 , Processed in 0.733983 second(s), Total 83, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号