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空间就都腾出来了,可以加载新的数据。