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

}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值