【HAL库】STM32F427ZGTx多通道ADC+DMA方式的【STM32CubeMX】配置及代码实现

在void MX_ADC1_Init(void)函数中添加如下代码:

cpp 复制代码
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)ADC_Value, 3);//开启ADC_DMA//ADC_Value数据缓存buff

在DMA中断中添加如下代码 :

cpp 复制代码
if(__HAL_DMA_GET_FLAG(&hdma_adc1,DMA_FLAG_TCIF0_4 ))//传输完成
{
	g_adc_dma_sta = 1;//标志位置1
//	printf("g_adc_dma_sta = %d\r\n",g_adc_dma_sta);
	__HAL_DMA_CLEAR_FLAG(&hdma_adc1,DMA_FLAG_TCIF0_4 );//清除传输完成标志位
}

ADC数据处理

cpp 复制代码
/* Includes ------------------------------------------------------------------*/
#include "adc_driver.h"

uint16_t ADC_Value[4] = {0};
uint8_t g_adc_dma_sta = 0;

/********************************************************************************************************
*    功能说明: 获取ADC的数据
*    形    参: 无
*    返 回 值: 无
**********************************************************************************************************/
void ADC_GetAdcValues(void)
{

	uint16_t  sum = 0;
	float Vol = 0;
	uint16_t percent = 0;

	if (g_adc_dma_sta == 1)
	{
		for(int j = 0; j < 3; j++) // 遍历3个通道,轮流取值
		{
			sum = 0;
			for(int i = 0; i < 1; i++)
			{
//				printf("****************sum[x] = %d\r\n",ADC_Value[j]);
				sum += ADC_Value[(3 * i) + j]; // 每个通道采集i次数据,进行i次累加
			}
			Vol = (float)sum/4096 * 12.5;
			percent = (float)sum/4096 * 100;
			
//			sum = sum / 10; // 取平均值
			printf("sum[%d] = %d\r\n",j,sum);
			printf("Vol[%d] = %.2f\r\n",j,Vol);
			

		}
//		printf("sum[x] = %d\r\n",sum);
		g_adc_dma_sta = 0;                              // 清除DMA采集完成标志位
//		HAL_ADC_Start_DMA(&hadc1, (uint32_t *)ADC_Value, 4); // 开启下一次ADC和DMA采集
//		HAL_ADC_Start(&hadc1);//
	}
}
相关推荐
来自晴朗的明天10 分钟前
15、隔离 DC-DC 电源电路(18S12 模块)
单片机·嵌入式硬件·硬件工程
我送炭你添花16 分钟前
电子世界的奇妙冒险:从一个电阻开始(系列目录)
人工智能·单片机·嵌入式硬件·fpga开发
VekiSon29 分钟前
Linux内核驱动——设备树原理与应用
linux·c语言·arm开发·嵌入式硬件
国科安芯38 分钟前
火箭传感器控制单元的抗辐照MCU选型与环境适应性验证
单片机·嵌入式硬件·架构·risc-v·安全性测试
-Springer-1 小时前
STM32 学习 —— 个人学习笔记5(EXTI 外部中断 & 对射式红外传感器及旋转编码器计数)
笔记·stm32·学习
LS_learner2 小时前
树莓派(ARM64 架构)Ubuntu 24.04 (Noble) 系统 `apt update` 报错解决方案
嵌入式硬件
来自晴朗的明天2 小时前
16、电压跟随器(缓冲器)电路
单片机·嵌入式硬件·硬件工程
钰珠AIOT2 小时前
在同一块电路板上同时存在 0805 0603 不同的封装有什么利弊?
嵌入式硬件
代码游侠2 小时前
复习——Linux设备驱动开发笔记
linux·arm开发·驱动开发·笔记·嵌入式硬件·架构