STM32F4-如何检测已取出的电池

时间:2019-01-31 18:01:57

标签: stm32f4

我想在STM32F4 MCU中使用备用电池SRAM。连接VDD电压(复位后)后,有什么方法可以检测电池的断开/取出吗?

是的,我可以将备份SRAM的CRC保存在RTC备份寄存器中,但是我想从某些MCU寄存器中获取信息。

谢谢您的回答

2 个答案:

答案 0 :(得分:0)

Vbat内部连接到ADC的通道18。您只需要启用CCR ADC寄存器中的VBATE位并进行转换。该通道具有内部分频器,读取值为实际值的1/4。

答案 1 :(得分:-1)

我没有50个声誉点,也无法添加评论,所以我在这里写下。我的英语不好,所以如果我误会了,请纠正我。据我了解,您想在程序启动时检测电池是否已卸下。您可以为此使用ADC。您可以使用ADC检测电压电平。如果此级别为0,则表示已卸下电池。您也可以使用ADC检测电池状态。例如,您的电池最大电量为1.5V,停电电量为1.0V。 ADC值为1.4V,可以说电池状态良好,或者ADC值为1.1V,可以说电池状态不好。您可以为您的应用程序使用以下代码。第一个代码用于标准外设,第二个代码用于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.3V),则必须降低此电压。您可以为此使用分压器电路。

Voltage divider