这两天做个新产品用到了STM32H743ZIT6 采集6路ADC信号,通过DMA 方式方式读取ADC数组中的值,现在有个问题,单步执行的时候ADC数组中的值都是对的,系统全速运行时,会有数据变成0xff,而且不一定,什么时候出问题,看示波器上该信号是没有0xff这种可能性的,程序中用了cache, 采用了 正点原子例程里的cache 透传的方式。 void CPU_CACHE_Enable(void) { / Enable I-Cache / SCB_EnableICache(); / Enable D-Cache / SCB_EnableDCache(); SCB->CACR|=1<<2; } 看到有人讲要把cache清零 cache 无效化操作,但不知道这些操作应该在何时进行,譬如cache清零函数,应该何时清,是在dma中断来的时候清吗?还是在回调函数读出数据再清。 顺便说一下 我用的库是STM32CubeHV1.3.0 不知道新的库会不会兼容性更好 有链接吗 想用新的库 |
可以参考一下官方例程,都是在回调函数里做无效化操作。 因为通常代码逻辑要都是在这后面才开始使用这些数据的。这里注意,buffer 地址要对齐。