У меня нет 50 очков репутации, и я не могу добавить комментарий, поэтому пишу здесь.Мой английский не очень хороший, поэтому, если я неправильно понял, поправьте меня.Как я понимаю, вы хотите обнаружить удаленный аккумулятор при запуске вашей программы.Вы можете использовать АЦП для этого.Вы можете определить уровень напряжения с помощью АЦП.Если этот уровень равен 0, это означает, что ваш аккумулятор был удален.Также вы можете определить состояние батареи с помощью АЦП.Например, максимальный уровень заряда аккумулятора составляет 1,5 В, а мертвый уровень - 1,0 В.А значение АЦП - 1,4 В, можно сказать, что состояние батареи хорошее, или значение 1,1 В, можно сказать, что состояние батареи плохое.Вы можете использовать следующие коды для вашего приложения.Первый код предназначен для стандартного периферийного устройства, а второй - для HAL.
Стандартное периферийное устройство
uint8_t Read_ADC(void)
{
//A0 Bacagindaki ADC verisini okur
ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_56Cycles);
ADC_SoftwareStartConv(ADC1);
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);
return ADC_GetConversionValue(ADC1);
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure;
uint8_t ADC_Data = 0;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA,&GPIO_InitStructure);
ADC_InitStructure.ADC_Resolution = ADC_Resolution_8b;
ADC_Init(ADC1,&ADC_InitStructure);
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div8;
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_CommonInit(&ADC_CommonInitStructure);
ADC_Cmd(ADC1,ENABLE);
ADC_Data = Read_ADC();
}
Github link
HAL
uint16_t readADC (void)
{
if(HAL_ADC_PollForConversion(&hadc1,100) == HAL_OK) //ADC okumasinda sikinti yoksa (100 timeout degeri)
return HAL_ADC_GetValue(&hadc1);
return 0;
}
в основной функции
HAL_ADC_Start(&hadc1);
Github link
если напряжение вашей батареи выше, чем ваш максимальный вход АЦП (для stm32 3,3 В), вы должны уменьшитьэто напряжение.Вы можете использовать схему делителя напряжения для этого.