[STM32F4] stm32F4为什么在用DMA时总是不能随意关闭或打开DMA?

[复制链接]
 楼主| probedog 发表于 2024-7-28 14:12 | 显示全部楼层 |阅读模式
不能随意关闭或打开DMA,比如在主函数中关闭或打开,在定时器中断中,更新中断,空闲中断之类的,用的时候写了关闭打开语句,但是调试时根本就没有关闭打开现象,有大佬知道吗?
cr315 发表于 2024-7-28 14:55 | 显示全部楼层
STM32F4在使用DMA时不能随意关闭或打开DMA的原因主要是由于DMA的工作原理、系统资源的合理分配以及程序设计的正确性等多方面的因素共同作用的结果。因此,在使用DMA时,需要仔细考虑这些因素,并采取适当的措施来确保DMA的正常工作。
一秒落纱 发表于 2024-8-23 22:04 | 显示全部楼层
在使用DMA(直接内存访问)时,确实需要谨慎处理其启用和禁用操作,因为DMA操作通常与外设的数据传输紧密相关,不当的操作可能会导致数据丢失或系统不稳定。
光辉梦境 发表于 2024-8-24 01:00 | 显示全部楼层
如果DMA操作发生在中断服务程序(ISR)中,而你尝试在另一个优先级较低的中断中关闭或打开DMA,可能会因为中断优先级的关系而无法立即执行。确保在中断服务程序中正确处理中断优先级。

光辉梦境 发表于 2024-8-24 01:00 | 显示全部楼层
如果DMA操作发生在中断服务程序(ISR)中,而你尝试在另一个优先级较低的中断中关闭或打开DMA,可能会因为中断优先级的关系而无法立即执行。确保在中断服务程序中正确处理中断优先级。

淡漠安然 发表于 2024-8-24 02:00 | 显示全部楼层
在尝试关闭或打开DMA之前,检查DMA当前的状态。如果DMA已经在进行传输,可能需要等待传输完成后再进行操作。

江河千里 发表于 2024-8-24 05:00 | 显示全部楼层
在修改DMA状态时,使用临界区保护(如关中断或使用互斥锁),以防止在操作过程中被其他中断打断

暖了夏天蓝了海 发表于 2024-8-24 06:00 | 显示全部楼层
在关闭或打开DMA的代码位置添加调试信息(如打印日志或使用调试器断点),以确认代码是否确实执行到了这些位置

别乱了阵脚 发表于 2024-8-24 07:00 | 显示全部楼层
确认一下,硬件连接正确,DMA通道和外设之间的连接没有问题。

冰春彩落下 发表于 2024-8-24 08:00 | 显示全部楼层
检查你的软件逻辑,确保在正确的时机调用DMA的关闭或打开函数。

三生万物 发表于 2024-8-24 10:00 | 显示全部楼层
如果使用了编译器优化,可能会导致某些代码被优化掉,从而影响DMA的关闭或打开操作。尝试调整编译器优化级别或使用volatile关键字声明相关变量。

远山寻你 发表于 2024-8-24 11:00 | 显示全部楼层
如果你使用的是第三方固件库或驱动,确保它们是最新版本,并且没有已知的bug

菜鸟的第一步 发表于 2024-8-26 13:19 | 显示全部楼层
打开DMA开关没用,得重新设置传输长度才能启动
呐咯密密 发表于 2024-8-26 13:49 | 显示全部楼层
不要在传输过程中关闭
您需要登录后才可以回帖 登录 | 注册

本版积分规则

486

主题

3268

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部