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空间就都腾出来了,可以加载新的数据。
在STM32H750芯片中,使用ADCDMA进行数据采集时遇到问题,当对采集的数据进行操作后,ADCDMA停止采集新数据。原因是数据存储在Cache中,直接操作会导致Cache失效。解决方案是调用SCB_InvalidateDCache_by_Addr函数来清除DCache中对应的数据,确保采集的新数据能被正确读取。在DMA传输结束时,添加该函数可以避免数据冲突。
3555

被折叠的 条评论
为什么被折叠?



