#include "ADC.h" #include "main.h" uint16_t Get_ADC_Value() { HAL_ADC_Start(&hadc); HAL_ADC_PollForConversion(&hadc, 10); if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc), HAL_ADC_STATE_REG_EOC)) { return HAL_ADC_GetValue(&hadc); } } float bat_volt; uint8_t Get_Battary(void) {static float last_value = 100; static uint8_t first=1; HAL_GPIO_WritePin(GPIOB, BAT_MEAS_GND_Pin, GPIO_PIN_RESET); bat_volt = (float)Get_ADC_Value()/621; //(value/4096*3.3*2-3.5)/0.7 HAL_GPIO_WritePin(GPIOB, BAT_MEAS_GND_Pin, GPIO_PIN_SET); if(bat_volt>=3.5) { if(first) { first = 0; bat_volt = (float)Get_ADC_Value()/621; last_value =(bat_volt-3.5)*167;//(bat_volt-3.5)/0.6*100 } last_value = 0.9*last_value + (bat_volt-3.5)*16.7; if(last_value>100) last_value = 100; if(last_value<0) last_value = 0; }else{ last_value=0; } return last_value; } uint16_t verfint_cal,adc_val; uint8_t Get_VDDVlotage(void) { static float last_value = 100; static uint8_t first=1; static uint16_t bat_count = 0; if(bat_count++%600==0) { MX_ADC_Init(); HAL_Delay(30); adc_val = Get_ADC_Value(); MX_ADC_DeInit(); //temp_voltage = (float)Get_ADC_Value()/621; //(value/4096*3.3*2-3.5)/0.7 verfint_cal = *(__IO uint16_t *)(0X1FF80078); bat_volt = 3*(float)verfint_cal/adc_val+0.13; if(bat_volt>=3.0) { if(first) { first = 0; last_value =(bat_volt-3.0)*167;//(bat_volt-3.5)/0.6*100 } last_value = 0.9*last_value + (bat_volt-3.0)*16.7; if(last_value>100) last_value = 100; if(last_value<0) last_value = 0; }else{ last_value=0; } } return last_value; }