TIM3中断和DMA冲突导致数据错乱
用STM32F407的TIM3触发DMA搬运ADC数据,发现中断服务函数偶尔被跳过。关闭DMA后中断正常,怀疑是优先级冲突,但NVIC优先级分组设为4也无效,是否需要调整DMA请求映射? 你说的中断服务函数被跳过是啥意思? 被谁跳过?系统里开启了哪些中断? DMA的工作往往独立于CPU的。 你是不是 TIM3 既用了中断又用了 DMA?我之前也遇到过类似冲突,最后干脆只保留 DMA。 DMA 和 TIM 中断一起用的话,NVIC 优先级确实容易踩坑,你有试过把 DMA 的中断优先级调高一点吗? 看起来更像是中断进来了,但中断标志没清掉或者被覆盖,导致下次触发失败。 建议你把 TIM3 的中断和 DMA 的 NVIC 设置贴出来看看,可能不只是优先级,还有触发顺序问题。 如果你 DMA 传输完成了再触发中断,那中断服务函数里访问的数据可能已经被覆盖。 我记得 TIM3 是支持多个 DMA 请求通道的,要不要换个通道或者切成 TIM2 试试? NVIC 分组设成 4 是不是用了 FreeRTOS?要注意系统中断和 DMA 中断的抢占优先级设置是否合理。 你有没有试试不开 TIM3 中断,仅用 DMA 的半传输和传输完成中断来判断处理逻辑? 如果 ADC 是连续采样的模式,可能会有数据覆盖问题,建议你 double buffer 配置试试看。 可以试着在中断服务函数开头打断点确认有没有进来,如果没进,可能真的是 DMA 占了资源。 确保 TIM3、ADC 以及 DMA 相关的引脚连接无误,没有短路或接触不良等问题 检查电源是否稳定,电源不稳定可能导致传输错误。 检查DMA配置是否正确。 缓冲区溢出引起的?
页:
[1]