44 lines
912 B
C
44 lines
912 B
C
//
|
|
// Created by hu123456 on 2024/3/8.
|
|
//
|
|
|
|
#include "vcc_adc.h"
|
|
|
|
void adc_init(void)
|
|
{
|
|
HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED);
|
|
}
|
|
|
|
uint32_t adc_get_result(void)
|
|
{
|
|
ADC_ChannelConfTypeDef adc_ch_conf = {0};
|
|
|
|
adc_ch_conf.Channel = ADC_CHANNEL_8;
|
|
adc_ch_conf.Rank = ADC_REGULAR_RANK_1;
|
|
adc_ch_conf.SamplingTime = ADC_SAMPLETIME_810CYCLES_5;
|
|
adc_ch_conf.SingleDiff = ADC_SINGLE_ENDED;
|
|
adc_ch_conf.OffsetNumber = ADC_OFFSET_NONE;
|
|
adc_ch_conf.Offset = 0;
|
|
HAL_ADC_ConfigChannel(&hadc1, &adc_ch_conf);
|
|
|
|
HAL_ADC_Start(&hadc1);
|
|
HAL_ADC_PollForConversion(&hadc1, 10);
|
|
return HAL_ADC_GetValue(&hadc1);
|
|
}
|
|
|
|
float get_VCC(void)
|
|
{
|
|
uint32_t temp_val = 0;
|
|
float vcc;
|
|
for (uint8_t t = 0; t < 10; t++)
|
|
{
|
|
temp_val += adc_get_result();
|
|
HAL_Delay(5);
|
|
}
|
|
vcc = temp_val/10.f/65535.f * 3.3 * 11.f;
|
|
return vcc;
|
|
}
|
|
|
|
|
|
|