1. 상수 정의
#define VREFINT_MV_TYP 1200u
#define ADC_MAX 4095u

VREGINT_MV_TYP : 내부 기준 전압 VREFINT의 전형값(typ)을 mV로 둔 산수(약 1200mV)

ADC_MAX : 12비트 ADC의 최대 카운트 (0-4095)

⇒ VDDA(= ADC 기준 전원)를 계산 시 공식에 들어가는 고정 값이라 미리 상수로 빼 둠

  1. 계산
static uint32_t calc_vdda_mv(uint32_t vref_raw){
    if(vref_raw == 0) return 0;
    return (VREFINT_MV_TYP * ADC_MAX) / vref_raw;
}

vref_raw(= VREFINT 채널 ADC 원시값)를 이용, VDDA(mV) 역산

공식

ADC는 아래 관계를 가짐

이를 VDDA로 풀면

⇒ 1200 * 4095 / raw

if(vref_raw == 0) ⇒ raw가 0이면 오류, 대비

  1. 선언
uint32_t raw  = read_vref_raw();
uint32_t vdda = calc_vdda_mv(raw);

raw : ADC가 VREFINT를 측정한 원시 카운트 값(0-4095)