Bowclad 发表于 2025-4-21 13:05

TIM3中断和DMA冲突导致数据错乱

用STM32F407的TIM3触发DMA搬运ADC数据,发现中断服务函数偶尔被跳过。关闭DMA后中断正常,怀疑是优先级冲突,但NVIC优先级分组设为4也无效,是否需要调整DMA请求映射?

香水城 发表于 2025-4-21 14:51

你说的中断服务函数被跳过是啥意思? 被谁跳过?

系统里开启了哪些中断? DMA的工作往往独立于CPU的。

公羊子丹 发表于 2025-5-27 07:40

你是不是 TIM3 既用了中断又用了 DMA?我之前也遇到过类似冲突,最后干脆只保留 DMA。

周半梅 发表于 2025-5-27 07:41

DMA 和 TIM 中断一起用的话,NVIC 优先级确实容易踩坑,你有试过把 DMA 的中断优先级调高一点吗?

帛灿灿 发表于 2025-5-27 07:42

看起来更像是中断进来了,但中断标志没清掉或者被覆盖,导致下次触发失败。

童雨竹 发表于 2025-5-27 07:43

建议你把 TIM3 的中断和 DMA 的 NVIC 设置贴出来看看,可能不只是优先级,还有触发顺序问题。

万图 发表于 2025-5-27 07:43

如果你 DMA 传输完成了再触发中断,那中断服务函数里访问的数据可能已经被覆盖。

Wordsworth 发表于 2025-5-27 07:44

我记得 TIM3 是支持多个 DMA 请求通道的,要不要换个通道或者切成 TIM2 试试?

Bblythe 发表于 2025-5-27 07:45

NVIC 分组设成 4 是不是用了 FreeRTOS?要注意系统中断和 DMA 中断的抢占优先级设置是否合理。

Pulitzer 发表于 2025-5-27 07:45

你有没有试试不开 TIM3 中断,仅用 DMA 的半传输和传输完成中断来判断处理逻辑?

Uriah 发表于 2025-5-27 07:46

如果 ADC 是连续采样的模式,可能会有数据覆盖问题,建议你 double buffer 配置试试看。

Clyde011 发表于 2025-5-27 07:47

可以试着在中断服务函数开头打断点确认有没有进来,如果没进,可能真的是 DMA 占了资源。

tpgf 发表于 2025-5-27 13:42

确保 TIM3、ADC 以及 DMA 相关的引脚连接无误,没有短路或接触不良等问题

elephant00 发表于 2025-5-28 16:36

检查电源是否稳定,电源不稳定可能导致传输错误。

cr315 发表于 2025-5-28 18:00

检查DMA配置是否正确。

jcky001 发表于 2025-5-28 18:00

缓冲区溢出引起的?
页: [1]
查看完整版本: TIM3中断和DMA冲突导致数据错乱