STM32H743单片机实现ADC+DMA多通道检测+事件组

在上个文章基础上改用事件组进行处理,以便实时任务。

stm32cubeMX自动生成代码

复制代码
osEventFlagsId_t adctestEventHandle;
const osEventFlagsAttr_t adctestEvent_attributes = {
  .name = "adctestEvent"
};


adctestEventHandle = osEventFlagsNew(&adctestEvent_attributes);

编写代码DMA回调函数触发事件

复制代码
#define ADC2_CONVERSION_COMPLETE_BIT	0x01
#define ADC3_CONVERSION_COMPLETE_BIT	0x02

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) {
	if (hadc->Instance == ADC2)  // 确认是ADC2的转换完成
	{
		osEventFlagsSet(adctestEventHandle, ADC2_CONVERSION_COMPLETE_BIT);
		HAL_ADC_Stop_DMA(&hadc2);
	} else if (hadc->Instance == ADC3)  // 确认是ADC3的转换完成
	{
		osEventFlagsSet(adctestEventHandle, ADC3_CONVERSION_COMPLETE_BIT);
		HAL_ADC_Stop_DMA(&hadc3);
	}
}

事件触发逻辑处理

复制代码
void AdcTask(void *argument)
{
	Start_ADC2_DMA();
	Start_ADC3_DMA();
	int i = 0;
	uint32_t ret = 0;
	float voltage;
	for (;;) {
		ret = osEventFlagsWait(adctestEventHandle, ADC2_CONVERSION_COMPLETE_BIT | ADC3_CONVERSION_COMPLETE_BIT, osFlagsWaitAny, osWaitForever);

		if ((ret & ADC2_CONVERSION_COMPLETE_BIT) != 0)
		{
			/* 打印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");
		}
		if ((ret & ADC3_CONVERSION_COMPLETE_BIT) != 0)
		{
			/* 打印ADC3数据 */
			for (i = 0; i <  hadc3.Init.NbrOfConversion; i++) {
				voltage = adc3_values[i] * VEF / VEFVALUE;
				printf("ADC3[%d] = %d.%dV\r\n", i, (uint32_t) voltage,
								(uint32_t) (voltage * 100) % 100);
			}
			printf("\n\n");
		}

		osDelay(1);
	}
}
相关推荐
茉莉玫瑰花茶15 小时前
Windows 平台下的 UDP 客户端
stm32·单片机·嵌入式硬件
磨十三17 小时前
U-Boot
arm开发·嵌入式硬件
笔夏17 小时前
【移芯平台CAT1模组】烧写固件
stm32·单片机·学习
十月的皮皮17 小时前
STM32从零到量产开发:四路继电器工业控制模块开发— 继电器模块bsp_di.h与 bsp_di.c文件
c语言·stm32·stm32cubemx·hal库
无垠的广袤17 小时前
【RA-Eco-RA4M2开发板】步进电机的串口控制和 LabVIEW 数据采集
单片机·嵌入式硬件·labview
茯苓gao19 小时前
嵌入式开发笔记:QSerialPort 完整使用指南——从基础 API 到工程实战
笔记·嵌入式硬件·qt·学习
wuyk55519 小时前
67.嵌入式C语言进阶:结构体指针实战指南——STM32外设、传感器数据访问的高效技巧
c语言·开发语言·stm32·单片机
Mr+范19 小时前
单片机 ADC 电压与电流检测及电阻选型指南
单片机·嵌入式硬件
西城微科方案开发20 小时前
LCD智能婴儿秤方案
单片机·嵌入式硬件
三佛科技-1341638421221 小时前
灭蚊灯MCU方案开发,FT60E112-RB作为灭蚊灯主控芯片优势
单片机·嵌入式硬件·物联网·智能家居·pcb工艺