static volatile uint32_t adc_aio_value = 0;
static volatile uint32_t adc_vcc_value = 0;
static volatile uint32_t adc_temp_value = 0;
//ADC引脚采集完成中断
void adc_aio_callback(uint32_t result)
{
adc_aio_value = result;
}
//模组供电电压采集完成中断
void adc_vcc_callback(uint32_t result)
{
adc_vcc_value = result;
}
//模组温度采集完成中断
void adc_temp_callback(uint32_t result)
{
adc_temp_value = result;
}
//初始化配置
void adc_init(void)
{
adc_config_t adcConfig;
ADC_GetDefaultConfig(&adcConfig);
adcConfig.channelConfig.aioResDiv = ADC_AioResDivRatio1;//设置分压比例
ADC_ChannelInit(ADC_ChannelAio2, ADC_UserAPP, &adcConfig, adc_aio_callback);
adcConfig.channelConfig.vbatResDiv = ADC_VbatResDivRatio3Over16;//设置分压比例
ADC_ChannelInit(ADC_ChannelVbat, ADC_UserAPP, &adcConfig, adc_vcc_callback);
adcConfig.channelConfig.thermalInput = ADC_ThermalInputVbat;
ADC_ChannelInit(ADC_ChannelThermal, ADC_UserAPP, &adcConfig, adc_temp_callback);
}
//启动采集并打印
void adc_collect_printf(void)
{
ADC_StartConversion(ADC_ChannelAio2, ADC_UserAPP);//启动采集,启动一次采集一次
ADC_StartConversion(ADC_ChannelVbat, ADC_UserAPP);//启动采集,启动一次采集一次
ADC_StartConversion(ADC_ChannelThermal, ADC_UserAPP);//启动采集,启动一次采集一次
printf("adc_aio_value:%d, Voltage:%dmv\r\n", (int)adc_aio_value, (int)HAL_ADC_CalibrateRawCode(adc_aio_value));
printf("adc_temp_value:%d, Temperature:%d\r\n", (int)adc_temp_value, (int)HAL_ADC_ConvertThermalRawCodeToTemperature(adc_temp_value));
printf("adc_vcc_value:%d, Voltage:%dmv\r\n", (int)adc_vcc_value, (int)HAL_ADC_CalibrateRawCode(adc_vcc_value) * 16 / 3);
}