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;
}
