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);
	}
}
相关推荐
zlinear数据采集卡4 小时前
从0到1硬核拆解:工业级数据采集卡的隔离设计与Modbus通信实战
arm开发·单片机·嵌入式硬件·fpga开发·开源
FreakStudio9 小时前
WIZnet 开源方案分享:W55MH32 开发板 + 小智 AI实现以太网版本的小智机器人
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
科芯创展9 小时前
XZ61N,N-channel open drain输出电压检测芯片
单片机·嵌入式硬件
省四收割者12 小时前
一文详解信号完整性(3)--规避SI问题的具体实现方法
嵌入式硬件·硬件架构·信号处理·智能硬件·pcb工艺·altium designer
巴巴媛66613 小时前
STM32学习笔记【32.BKP + RTC】
笔记·stm32·学习
KaifuZeng14 小时前
通信与接口协议面试十一、网口
嵌入式硬件·面试·通信与接口协议
ACP广源盛1392462567314 小时前
破局 PCIe 4.0 交换瓶颈@ACP#IX8024 / ASM58024参数及应用对比
大数据·人工智能·分布式·嵌入式硬件
迷茫、Peanut14 小时前
51调时钟(2)
单片机
吠品14 小时前
Python字典键获取的四种实用方法
stm32·单片机·嵌入式硬件