【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 小时前
MQTT从入门到精通之MQTT Dashboard
spring boot·stm32·物联网·iot
YuCaiH2 小时前
【STM32】USART串口数据包
笔记·stm32·单片机·嵌入式硬件
Kasen's experience4 小时前
STM32 GPIO 配置
stm32·单片机·嵌入式硬件
知行电子-4 小时前
Proteus中数码管动态扫描显示不全(已解决)
单片机·proteus·嵌入式
学习路上_write5 小时前
FPGA/Verilog,Quartus环境下if-else语句和case语句RT视图对比/学习记录
单片机·嵌入式硬件·qt·学习·fpga开发·github·硬件工程
非概念5 小时前
stm32学习笔记----51单片机和stm32单片机的区别
笔记·stm32·单片机·学习·51单片机
jjjxxxhhh1236 小时前
FPGA,使用场景,相比于单片机的优势
单片机·嵌入式硬件·fpga开发
无敌最俊朗@6 小时前
stm32学习之路——八种GPIO口工作模式
c语言·stm32·单片机·学习
EterNity_TiMe_7 小时前
【论文复现】STM32设计的物联网智能鱼缸
stm32·单片机·嵌入式硬件·物联网·学习·性能优化
changingshow8 小时前
Arduino IDE Windows 系统 离线安装 esp32 开发板 亲测好用。
单片机·嵌入式硬件