【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);//
	}
}
相关推荐
沐欣工作室_lvyiyi1 小时前
基于单片机的智能电表设计(论文+源码)
单片机·嵌入式硬件·电能表·数字电能表
半导体老登2 小时前
新能源汽车核心元件揭秘:二极管、三极管结构与工作原理解析(2/2)
人工智能·单片机·嵌入式硬件·汽车
【云轩】2 小时前
基于STM32与BD623x的电机控制实战——从零搭建无人机/机器人驱动系统
stm32·机器人·无人机
猿~~~4 小时前
STM32的HAL库开发---多通道ADC采集(DMA读取)实验
stm32·单片机·嵌入式硬件
Freak嵌入式5 小时前
开源一款I2C电机驱动扩展板-FreakStudio多米诺系列
嵌入式硬件·嵌入式·智能硬件·开源硬件·micropython·电机驱动·电子模块
kongba0076 小时前
Cursor提示词模板,开发GD32,C语言开发GD32 ARM单片机编程规范提示词 大厂风格代码规范
c语言·arm开发·单片机
LaoZhangGong1236 小时前
STM32的“Unique device ID“能否修改?
c语言·经验分享·stm32·单片机·嵌入式硬件
1101 11018 小时前
STM32-心知天气项目
stm32·单片机·嵌入式硬件
Ronin-Lotus8 小时前
嵌入式硬件篇---数字电子技术中的触发器
嵌入式硬件·fpga开发·触发器·数字电子技术·上位机知识
Ronin-Lotus8 小时前
嵌入式硬件篇---数字电子技术中的时序逻辑
单片机·嵌入式硬件·蓝桥杯·时序分析·数字电子技术