经验分享一:UART 可进入空闲中断,DMA却没数据

本文档详细描述了一个在嵌入式系统中遇到的UART DMA配置问题。开发者在确保UART和DMA配置无误、时钟使能后,仍然无法正常工作。解决方案是调整初始化顺序,先配置DMA再使能UART,并在空闲中断中读取接收寄存器。此外,检查GPIO复用功能和DMA通道映射也至关重要。遵循这些步骤和注意事项,有助于解决类似问题。

条件:UART、DMA配置没有问题、时钟也都使能了,对照寄存器表,发现该配置的寄存器都配置的没问题,调试发现每次接收到数据,可以顺利进入空闲中断、且读取 UART "数据接收寄存器" 是可以接收到数据的,似乎像DMA没有工作起来

解决办法:将UART、DMA 初始化函数里包含的所有 使能语句 全部注释掉,放到最后,程序初始化部分可参照以下时序:

DMA初始化、UART初始化、空闲中断开启、uart dma接收使能、uart dma 发送使能、uart接收使能、uart发送使能、uart 使能

思路:先配置UART 再配置 DMA,在所有配置都完成之后,再打开一系列使能,由于先使能uart会立马进入空闲中断,所以可以先使能DMA,再使能uart,凡是用到DMA 的场景都这样操作,将一系列使能放到最后!

另外:有的MCU需要在空闲中断里主动读取一次uart“数据接收寄存器”,再配合清除标志位语句,才能清掉空闲中断标志位。

如果参照以上步骤,仍没有解决问题,请查看手册,确定 GPIO 复用功能是否选对、DMA通道是否映射正确等。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值