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);
	}
}
相关推荐
逼子格17 分钟前
十五种光电器件综合对比——《器件手册--光电器件》
单片机·嵌入式硬件·硬件工程师·led·硬件工程师学习·电路图·光电器件
电鱼智能的电小鱼27 分钟前
eFish-SBC-RK3576工控板外部RTC测试操作指南
linux·嵌入式硬件·实时音视频
电鱼智能的电小鱼1 小时前
AGV导航控制器技术方案——基于EFISH-SBC-RK3576/SAIL-RK3576的国产化革新‌(新一代工业级自主可控解决方案)‌
linux·嵌入式硬件·安全·web安全·边缘计算
许有杨3 小时前
STM32的看门狗
stm32·单片机·嵌入式硬件
Johnson Sheng11 小时前
STM32H743单片机实现ADC+DMA多通道检测
stm32·单片机
吃货界的硬件攻城狮13 小时前
【STM32 学习笔记】EXTI外部中断
笔记·stm32·学习
吃货界的硬件攻城狮13 小时前
【STM32 学习笔记 】OLED显示屏及Keil调试
笔记·stm32·学习
狄加山67513 小时前
STM32的智慧农业系统开发(uC/OS-II)
stm32·单片机·嵌入式硬件
xyd陈宇阳14 小时前
嵌入式开发面试题详解:STM32 与嵌入式开发核心知识全面解析
stm32·单片机·嵌入式硬件·面试