最近调试 ADC 采样.
在 ADC1 规则序列采样设定 4 路, 由 DMA1 通道1 进行数据传输. 循环传输方式. 仅用软件触发规则序列
另外还使用了 注入采样, 由定时器触发.
现在发现, 在工作过程中, DMA1 的 通道1 的 CNDTR 由 4 莫名其妙地 变成了 2.
当然采样的数据也发生了错误. 我调试中发现, 前后两通道的数据(DMA 后的内存数据)对调了.
为此, 我设定 DMA 中断. 来捕捉这个 CNDTR 的变化,
却奇怪地发现数据发生错误了, 中断却并没有捕捉到这个变化. 当然此时在中断入口设定断点,
单步跟踪, 是能发现 CNDTR 的变化的.
根据数据手册, CNDTR 是不能更改的, 只要 EN 没有关闭, 我的软件就没有关闭过 DMA 这个通道,
所以, 软件导致的变化应该不大可能.
奇怪 + 奇怪! |