You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32L422使用内部参考电压测量ADC值结果异常排查求助

STM32L422内部参考电压ADC采样异常故障原因及解决

故障原因汇总

  • ADC参考源配置错误:你的ADC初始化代码未指定参考电压为内部VREFINT,STM32L4系列ADC默认参考源为Vdda引脚电压,你用1.2V作为基准做换算,但ADC实际以Vdda为基准,是结果偏离的核心原因。
  • VREF引脚测量逻辑错误:未开启VREFINT输出功能时,VREF+引脚为高阻态,此时测量得到的0.53V为无效值,不能代表内部参考电压的实际值。
  • 换算公式未使用出厂校准值:你直接用标称1.2V做换算,没有使用芯片OTP区存储的出厂校准的VREFINT值,会引入固定偏差。
  • 采样逻辑不完善:单次采样易受干扰,没有采集内部VREFINT通道做实时校准,精度无法保证。

修复步骤

  1. 修改ADC初始化配置,显式指定参考源为内部VREFINT:
    在MX_ADC1_Init函数中hadc1.Instance = ADC1;之后添加配置:
hadc1.Init.ReferenceVoltage = ADC_REFERENCE_INTERNAL;

同时在CubeMX的ADC配置界面将Reference Voltage选项改为Internal Reference,不要使用默认的Vdda。

  1. 开启VREFINT时钟并增加稳定等待时间:
    确认RCC配置中VREFINT外设时钟已经使能,在ADC初始化之后、校准之前增加10ms延时,保证内部参考电压稳定。

  2. 修正电压换算逻辑,使用出厂校准值:

// 先采集内部VREFINT通道的采样值,用于实时计算实际内部参考电压
ADC_ChannelConfTypeDef sConfigVref = {0};
sConfigVref.Channel = ADC_CHANNEL_VREFINT;
sConfigVref.Rank = ADC_REGULAR_RANK_1;
sConfigVref.SamplingTime = ADC_SAMPLETIME_92CYCLES_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfigVref);
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,100);
uint16_t vref_adc = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);

// 计算实际内部参考电压,*VREFINT为3.0V参考下的出厂校准值
float real_vref = (float)(*VREFINT) * 3.0f / vref_adc;

// 切换回输入通道采集,计算实际输入电压
sConfig.Channel = ADC_CHANNEL_12;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,100);
uint16_t input_adc = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);

float input_voltage = (float)input_adc * real_vref / 4095.0f;
  1. 硬件检查:确认分压电路输出电压实际为1V,VREF+引脚没有对地短路或接其他负载。

相关硬件截图

硬件截图1
硬件截图2


内容的提问来源于stack exchange,提问作者sujan_014

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:45:05