使用STM32H7B0刷4.3寸屏幕,不开启D-Cache的话,是会卡顿的
同时项目需要使用ADC dma采样,然而开启D-Cache之后,dma外设改变内部RAM后,并没有更改Cache内的数据吗,导致CPU无法正确得到RAM内的最新采样数据
解决这个问题的办法很简单,就是在处理采样数据 之前,调用SCB_InvalidateDCache_by_Addr函数。
需要注意的是
1、这个函数的形参addr和dsize:
addr : 操作的地址一定要是32字节对齐的。
dsize :一定要是32字节的整数倍
2、DMA外设指向的数组需要32字节对齐
以下是使用示例
//DMA外设指向的数组需要32字节对齐
static uint32_t ADC_Value[DEPTH_ADC][ADC_NUM] __attribute__ ((aligned (32))) = {0};
void Sample_Task()
{
HAL_ADC_Stop_DMA(&hadc1);
SCB_InvalidateDCache_by_Addr((uint32_t *)&ADC_Value,ADC_NUM * DEPTH_ADC * 4);
//这里对采样数据进行处理
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_Value, ADC_NUM * DEPTH_ADC);
}