【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);//
	}
}
相关推荐
学习噢学个屁1 小时前
基于51单片机的超声波液位测量与控制系统
c语言·单片机·嵌入式硬件·51单片机
电鱼智能的电小鱼1 小时前
EFISH-SBC-RK3588无人机地面基准站项目
linux·网络·嵌入式硬件·机器人·无人机·边缘计算
电鱼智能的电小鱼1 小时前
基于 EFISH-SBC-RK3588 的无人机环境感知与数据采集方案
linux·网络·嵌入式硬件·数码相机·无人机·边缘计算
车载诊断技术3 小时前
不同ECU(MCU/ZCU/CCU)其部署(实现)的功能存在差异
单片机·嵌入式硬件·架构·汽车·电子电器架构·软件定义汽车的电子/电气
美好的事情总会发生3 小时前
32.768kHz晶振详解:作用、特性及与其他晶振的区别
嵌入式硬件·硬件工程·智能硬件
国科安芯5 小时前
面向高性能运动控制的MCU:架构创新、算法优化与应用分析
单片机·嵌入式硬件·安全·架构·机器人·汽车·risc-v
阿让啊5 小时前
C语言中操作字节的某一位
c语言·开发语言·数据结构·单片机·算法
电鱼智能的电小鱼8 小时前
基于 EFISH-SBC-RK3588 的无人机通信云端数据处理模块方案‌
linux·网络·人工智能·嵌入式硬件·无人机·边缘计算
Neil今天也要学习8 小时前
永磁同步电机控制算法-VF控制
单片机·嵌入式硬件
狄加山6759 小时前
STM32 I2C总线通信协议
stm32·单片机·嵌入式硬件