STM32G431单片机,多通道采集ADC电压值(DMA方式)

我用的是ADC1,通道分别是CHANNEL 1  CHANNEL 2  CHANNEL 3

CUBEMX配置如图所示。

 

 

ADC_Common_Settings(ADC基础设置)
Mode(工作模式)Independent mode(独立模式)在同一引脚上仅有一个ADC在采集模拟信号
Data Alignment(数据对齐)Right alignment(数据右对齐)/Left alignment(数据左对齐)
Scan Conversion Mode(扫描模式)ENABLE(使能)/DISABLE(禁止)当有多个通道需要采集信号时必须开启扫描模式,此时ADC将会按设定的顺序轮流采集各通道信号
Continuous Comverion Mode(连续转换模式)ENABLE(使能)/DISABLE(禁止)连续转换模式将会在上一次ADC转换完成后立即开启下一次转换
Discontinuous Comverion Mode(单次转换模式)ENABLE(使能)/DISABLE(禁止)单次转换模式ADC只采集一次数据就停止采集,使用单次转换模式需要转换通道数大于1
Enable Regular Conversions(规则通道控制)ENABLE(使能)/DISABLE(禁止)需要使能规则通道控制才可以进一步对规则通道的使用进行配置
Number Of Conversion(ADC转换通道数)按照实际使用的通道数进行选择,会影响可供设置的通道数量
External Trigger Conversion Source(外部触发转换模式)Regular Conversion Launched by software(软件控制触发)ADC需要在接收到到触发信号后才开始模数转换,可以被定时器触发、外部中断触发、软件触发
RANK(模拟信号采集及转换的次序)
Channel(ADC转换通道)
Sampling Time(采样周期)ADC采样时间计算公式:TCONV=采样周期+12.5各周期
ADC_Injected_ConversionMode(注入通道模式)一般情况下不需要使用注入通道,可以将注入通道认为是ADC中断,即打断规则通道的采样进程执行注入通道的采样
Enable Regular Conversions(注入通道控制)ENABLE(使能)/DISABLE(禁止)需要使能注入通道控制才可以进一步对注入通道进行配置
Number Of Conversion(ADC注入转换通道数)按照实际使用的通道数进行选择,会影响可供设置的注入通道数量
External Tigger Source(外部触发模式)
Injected Conversion Mode(注入转换通道模式)
Rank(注入转换通道大于0时才可对其配置,后面的数字代表顺序)
Channel(转换通道)
Sampling Time(转换时间)
Injected Offset(注入通道偏移量)
WatchDog(看门狗)
Enable Analog WatchDog Mode(使能模拟量看门狗模式)需要选中本项才可对看门狗进行进一步的设置
Watchdog Mode(看门狗模式)(监测单一通道的规则通道)
(监测单一通道的注入通道)
(监测单一通道的规则及注入通道)
Analog WatchDog Channel(看门狗通道)
High Threshold(高阈值)
Low Threshold(低阈值)
Interrupt Mode(看门狗中断)

DMA配置如图所示。

 main.c代码

    uint32_t ADC_Value[2];//ADC采集存储
//  uint8_t i;
//  float ad1,ad2,ad3;

//	  for(i=0;i<3;i++)
//	        {
//	            HAL_ADC_Start(&hadc1);
//	            HAL_ADC_PollForConversion(&hadc1,0xffff);
//	            ADC_Value[i]=HAL_ADC_GetValue(&hadc1);
//	        }
//	        HAL_ADC_Stop(&hadc1);
//	        ad1 = (float)(ADC_Value[0]&0xFFF)*2.5/4096;
//	        debug_printf( "%lf\r\n" , ad1);
//
//	        ad2 = (float)(ADC_Value[1]&0xFFF)*2.5/4096;
//	        debug_printf( " %lf\r\n" , ad2);
//
//	        ad3 = (float)(ADC_Value[2]&0xFFF)*2.5/4096;
//	        debug_printf( " %lf\r\n" , ad3);
//
//	        HAL_Delay(1000);

串口输出结果图。

三个通道的数值,有点难看,凑合看,自己打的时候可以\r\n分一下行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值