最近的项目用了STM32F427,在调试数据采集时遇到问题,如下: 配置:三重ADC方式,采集14路信号,每ADC采集5路,最后用一个重复通道补齐。 ADC采用TIM3的TRGO触发,每347uS触发一次,数据用DMA传输。DMA传输 完成后中断处理,处理程序运行时间少于20uS。 问题:程序启动时一切正常。但当运行一段时间后发现DMA存储区的第11和13word(32位) 易位。如此时复位,则又能正常运行,然后问题重复。出现问题的时长没发现规律。如果 不理会上述数据错位而继续运行的话,则错位越来越严重。 说明:开发环境Keil5,调试器J-Link,SW模式。发生异常时,通过调试器检查各外设的寄存器,包括 ADC的几个寄存器段,DMA等等,都没有发现问题。 我用的是HAL库,Stm32Cube生产的原始代码。找了很久都没能发现问题,在网上倒是查到类似帖子, 但没有结果。恳请达人赐教,不胜感激! |
我的程序很简单,调试过程中已经屏蔽了其他代码段。如果缓存被侵占的话不太会有这样的规律。
因为出错时不复位是不会恢复的,而数据在反复写入。
我尝试改为2ADC同步规则模式,DMA方式2,目前已经跑了较长时间,倒是还没有发现问题。
本人比较爱好新鲜事物,算不上是STM32的新手。以前用103的也做过上万行代码,那时候没
有遇见到这个问题。
原本软件防错也可以,但我还没有办法找到出错的特征,也就无法实施。