STM32多通道ADC采集(Timer触发、DMA方式)

STM32多通道ADC采集(Timer触发、DMA方式)

在CubeMx下进行ADC的设置。这里设置了四个采集通道,分别对应于:

    IN0 IN1 Temperature Sensor Vrefint 然后是DMA的设置。其中Mode: Circular控制重复的DMA自动传输,对ADC的动作有决定性影响。

回到main.c主程序,首先声明一个4 元素的数组用于保存ADC转换结果。

volatile uint16_t AdcValue[4] = {0};

在主程序里先后开启ADC和Timer。

HAL_ADCEx_Calibration_Start(&hadc1);	

	// Start ADC 
	HAL_ADC_Start_DMA(&hadc1, (uint32_t *)AdcValue, 4);
	
	// Start timer8 for adc trig
	HAL_TIM_Base_Start_IT(&htim3);

增加ADC转换完成的回调函数,这里主要是对AdcFlag进行置位操作,表转换完成,有新的数据。在主程序里可以据此判断,做必要的处理。

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){
  		/* This is called after the conversion is completed */
		AdcFlag = true;
	}
经验分享 程序员 微信小程序 职场和发展