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);
	}
}
相关推荐
Aaron158816 小时前
无人机反制中AOA+TDOA联合定位技术与雷达探测定位技术的应用对比分析
arm开发·嵌入式硬件·fpga开发·硬件工程·无人机·信息与通信·信号处理
foundbug99916 小时前
STM32 睡眠模式测试程序
stm32·单片机·嵌入式硬件
wxmtwfx18 小时前
littlefs 源码分析
单片机·littlefs·嵌入式文件系统
嵌入式小站19 小时前
STM32 零基础可移植教程 18:I2C 入门,先用扫描器找一找总线上有没有设备
chrome·stm32·嵌入式硬件
天涯铭20 小时前
深入浅出:单片机I/O口串联电阻选型
单片机·嵌入式硬件·io口串联电阻
国科安芯21 小时前
ASP7A84AS——航天级低噪声高PSRR线性稳压器
网络·单片机·嵌入式硬件·架构·安全性测试
普中科技21 小时前
【普中STM32F1xx开发攻略--标准库版】-- 第 42 章 STM32 内部 FLASH 实验
stm32·单片机·嵌入式硬件·开发板·普中科技·内部flash
不做无法实现的梦~1 天前
CLion+pyocd配置教程
嵌入式硬件
破晓单片机1 天前
012、STM32项目分享:智能台灯系统
stm32·单片机·嵌入式硬件
悠哉悠哉愿意1 天前
【单片机复习笔记】十五届国赛复盘
笔记·单片机·嵌入式硬件·学习