STM32H7B0 同时启用D-Cache与ADC dma

使用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);

}

你可能感兴趣的:(技术经验,stm32,单片机,嵌入式硬件)