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);
	}
}
相关推荐
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
Lester_11015 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元5 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133975 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315205 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
古译汉书5 天前
【IoT死磕系列】Day 7:只传8字节怎么控机械臂?学习工业控制 CANopen 的“对象字典”(附企业级源码)
数据结构·stm32·物联网·http
Alaso_shuang5 天前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
脚后跟5 天前
AI助力嵌入式物联网项目全栈开发
嵌入式硬件·物联网·ai编程
2501_918126915 天前
stm32死锁是怎么实现的
stm32·单片机·嵌入式硬件·学习·个人开发
z20348315205 天前
STM32F103系列单片机定时器介绍(一)
stm32·单片机