STM32_DMA_多通道采集ADC出现错位现象

STM32_DMA_多通道采集ADC出现错位现象

问题描述:
adcSensorValue[0],adcSensorValue[3],adcSensorValue[6]… //存储通道1数据
adcSensorValue[1],adcSensorValue[4],adcSensorValue[7]… //存储通道2数据
adcSensorValue[2],adcSensorValue[5],adcSensorValue[8]… //存储通道3数据
多次调用HAL_ADC_Start_DMA(&hadc3,(unsigned int *)adcSensorValue,ADC_SENSOR_LEN);后出现adcSensorValue[0],adcSensorValue[3],adcSensorValue[6]…采集的是通道3的值并非是通道1的值

#define ADC_SENSOR_LEN 			30					//缓存空间的大小
#define ADC_SENSOR_CHANNEL 	3	//采样通道数量
unsigned short adcSensorValue[ADC_SENSOR_LEN] = {0};	//设置采样缓存空间

MX_DMA_Init();
MX_ADC3_Init();

HAL_ADCEx_Calibration_Start(&hadc3);	//校准ADC,否则测出来的值偏小,或者是不准确
HAL_ADC_Start_DMA(&hadc3,(unsigned int *)adcSensorValue,ADC_SENSOR_LEN);	//开始DMA采集

解决办法:
在不要采集ADC的时候,或是临时想要暂停采集的地方停止MDA工作,这样下次再调用HAL_ADC_Start_DMA(&hadc3,(unsigned int *)adcSensorValue,ADC_SENSOR_LEN);开始采集的时候,数据就可以对齐了,不会错乱

HAL_ADC_Stop_DMA(&hadc3);

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