#define VREFINT_MV_TYP 1200u
#define ADC_MAX 4095u
VREGINT_MV_TYP : 내부 기준 전압 VREFINT의 전형값(typ)을 mV로 둔 산수(약 1200mV)
ADC_MAX : 12비트 ADC의 최대 카운트 (0-4095)
⇒ VDDA(= ADC 기준 전원)를 계산 시 공식에 들어가는 고정 값이라 미리 상수로 빼 둠
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이면 오류, 대비
uint32_t raw = read_vref_raw();
uint32_t vdda = calc_vdda_mv(raw);
raw : ADC가 VREFINT를 측정한 원시 카운트 값(0-4095)