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博客

相关推荐
Forsete5 小时前
LINUX驱动开发#9——定时器
linux·驱动开发·单片机
Hello_Embed8 小时前
libmodbus 移植 STM32(USB 串口后端篇)
笔记·stm32·单片机·嵌入式·freertos·libmodbus
来自晴朗的明天10 小时前
14、光耦隔离电路(EL3H7)
单片机·嵌入式硬件·硬件工程
G***技10 小时前
杰和IB3-272:以低功耗高性能打造新一代工业智能交互核心
单片机·嵌入式硬件·物联网
czhaii11 小时前
STC AI8052U单片机特点
单片机
MAR-Sky11 小时前
keil5中数据的不同定义和单片机(以stc8为例)里的对应关系(idata,xdata,data,code)
单片机·嵌入式硬件
项目題供诗13 小时前
51单片机入门(八)
单片机·嵌入式硬件·51单片机
羽获飞13 小时前
从零开始学嵌入式之STM32——9.STM32的时钟系统
stm32·单片机·嵌入式硬件
来自晴朗的明天15 小时前
13、NMOS 电源防反接电路
单片机·嵌入式硬件·硬件工程
芯岭技术15 小时前
PY32MD310单片机:高性能、低功耗的32位电机控制微控制器
单片机·嵌入式硬件