STM32H750 ADC DMA采集数据不能读取问题

在STM32H750芯片中,使用ADCDMA进行数据采集时遇到问题,当对采集的数据进行操作后,ADCDMA停止采集新数据。原因是数据存储在Cache中,直接操作会导致Cache失效。解决方案是调用SCB_InvalidateDCache_by_Addr函数来清除DCache中对应的数据,确保采集的新数据能被正确读取。在DMA传输结束时,添加该函数可以避免数据冲突。
摘要由CSDN通过智能技术生成

1、STM32H750 ADC DMA采集

2、debug可以看到采集数据的变化

3、如果对采集的数据进行操作后,ADC DMA就不采集新的数据

解决方法:

问题原因:DMA采集的数据在DCache中,不能被直接使用

解决方法:使用 SCB_InvalidateDCache_by_Addr()把DCache中数据取出来

DMA数据传送结束后,增加下面一句即可。

SCB_InvalidateDCache_by_Addr((uint32_t *) ADC1Data,ADC_SIZE);

其中


#define ADC_SIZE   ((uint32_t)  32)  

///ALIGN_32BYTES 把地址进行32字节对齐,避免使用dcache指令出错
ALIGN_32BYTES (static uint16_t   ADC1Data[ADC_SIZE]) __attribute__((section(".ARM.__at_0x24000000")));

if (HAL_ADC_Start_DMA(&hadc1,(uint32_t *)&ADC1Data,ADC_SIZE)!= HAL_OK)
    {
        Error_Handler();
    }

知识点

 函数SCB_InvalidateDCache

函数描述:

此函数用于将数据 D Cache无效化,无效化的意思是将Cache Line标记为无效,等同于删除操作。这样Cache空间就都腾出来了,可以加载新的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值