STM32H743单片机实现ADC+DMA多通道检测
在stm32cubeMX上配置ADC+DMA实现多通道检测功能
DMA配置
生成代码,HAL_ADC_Start_DMA开始DMA读取ADC值,HAL_ADC_Stop_DMA关闭DMA读取
void Start_ADC2_DMA(void) {/* 初始化后校准ADC */HAL_ADCEx_Calibration_Start(&hadc2, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED); // 执行ADC校准/* 启动ADC连续转换(不间断轮询) */HAL_ADC_Start_DMA(&hadc2, (uint32_t*)adc2_values, ADC2_CHANNELS);
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) {if (hadc->Instance == ADC2) // 确认是ADC2的转换完成{adc_ready |= 0x01; // 标记ADC2数据就绪HAL_ADC_Stop_DMA(&hadc2);}
}
void AdcTask(void *argument)
{Start_ADC2_DMA();int i = 0;float voltage;for (;;) {if (adc_ready == 0x01) { // 等待两组ADC数据就绪/* 打印ADC2数据 */for (i = 0; i < hadc2.Init.NbrOfConversion; i++) {voltage = adc2_values[i] * VEF / VEFVALUE;printf("ADC2[%d] = %d.%dV\r\n", i, (uint32_t) voltage,(uint32_t) (voltage * 100) % 100);}printf("\n");adc_ready = 0; // 清除标志位}osDelay(100);}
}
共勉!!!STM32H743单片机实现ADC+DMA多通道检测+事件组-CSDN博客