我想在STM32F4 MCU中使用备用电池SRAM。连接VDD电压(复位后)后,有什么方法可以检测电池的断开/取出吗?
是的,我可以将备份SRAM的CRC保存在RTC备份寄存器中,但是我想从某些MCU寄存器中获取信息。
谢谢您的回答
答案 0 :(得分:0)
答案 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();
}
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);
如果您的电池电压高于最大输入电压(对于stm32为3.3V),则必须降低此电压。您可以为此使用分压器电路。