[STM32F3] DMA传输中偶发停止,似乎卡在半传输中断

[复制链接]
175|15
周半梅 发表于 2025-10-9 07:27 | 显示全部楼层 |阅读模式
项目里用DMA采集ADC数据,一直挺稳定的,最近换了采样率后偶尔卡在半传输中断不动。调试发现DMA状态还是busy,但中断不再触发。尝试清标志位、重启DMA也没反应,像是卡死在某个状态。
Clyde011 发表于 2025-10-9 07:32 | 显示全部楼层
你能复现的话,试着用裸机配置DMA,看是不是HAL的问题。
公羊子丹 发表于 2025-10-9 07:33 | 显示全部楼层
我遇过类似的,最后是因为缓存没清干净导致DMA数据错乱。
 楼主| 周半梅 发表于 2025-10-9 07:34 | 显示全部楼层
半传输中断别在回调里搞太多操作,会阻塞DMA。
帛灿灿 发表于 2025-10-9 07:35 | 显示全部楼层
可能是中断优先级的问题,你检查一下NVIC设置。
童雨竹 发表于 2025-10-9 07:36 | 显示全部楼层
我以前发现DMA有时候会因为总线仲裁被卡,要看看ADC触发方式。
万图 发表于 2025-10-9 07:36 | 显示全部楼层
如果用HAL库,HAL_DMA_IRQHandler有时候处理不完全,可以加断点看看。
Wordsworth 发表于 2025-10-9 07:37 | 显示全部楼层
我试过关掉缓存再测试,现象就消失了。
Bblythe 发表于 2025-10-9 07:38 | 显示全部楼层
你换个通道试试,看看是不是特定通道硬件问题。
Pulitzer 发表于 2025-10-9 07:39 | 显示全部楼层
是不是有地方写到了DMA缓冲区?内存被破坏也会出现类似现象。
Uriah 发表于 2025-10-9 07:40 | 显示全部楼层
我怀疑可能是某次配置寄存器时还没完成前就启动DMA。
duo点 发表于 2025-10-9 11:31 | 显示全部楼层
通常和DMA状态标志位没正确清除有关吧
elephant00 发表于 2025-10-9 11:34 | 显示全部楼层
强制清除所有DMA相关标志位。
jcky001 发表于 2025-10-9 11:36 | 显示全部楼层
提升DMA中断优先级。
classroom 发表于 2025-10-9 12:33 | 显示全部楼层
中断优先级冲突?
cr315 发表于 2025-10-9 13:33 | 显示全部楼层
硬件时序可能不匹配
flycamelaaa 发表于 2025-10-9 14:34 | 显示全部楼层
在重启DMA前,需同时清除半传输中断标志和传输完成中断标志,否则DMA可能卡在中间状态。
jcky001 发表于 2025-10-9 15:37 | 显示全部楼层
清除所有DMA标志位后再重启。
onlycook 发表于 2025-10-9 16:38 | 显示全部楼层
建议启用ADC连续转换和DMA循环模式,避免时序不匹配。
powerantone 发表于 2025-10-9 16:39 | 显示全部楼层
检查中断优先级,DMA中断是否被抢占。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

171

主题

6172

帖子

1

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