//用于统计复位次数
void get_reset(void)
{
/*
上电复位
RCC_FLAG_PINRST
RCC_FLAG_PORRST
RCC_FLAG_SFTRST
看门狗复位
RCC_FLAG_PINRST
RCC_FLAG_IWDGRST
软件复位
RCC_FLAG_PINRST
RCC_FLAG_SFTRST
*/
printf("RCC->CSR=0x%08X\r\n",RCC->CSR); //读出状态寄存器
unsigned short temp_iwdgrst_u16=0;
unsigned short temp_porrst_u16=0;
unsigned short temp_sftrst_u16=0;
eeprom_read(EEPROM_ADDR_IDWG_RESET_STAT, (uint8_t*)&temp_iwdgrst_u16, 2);
eeprom_read(EEPROM_ADDR_POR_RESET_STAT, (uint8_t*)&temp_porrst_u16, 2);
eeprom_read(EEPROM_ADDR_SFT_RESET_STAT, (uint8_t*)&temp_sftrst_u16, 2);
if(__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST)!= RESET){
printf("RCC_FLAG_PINRST\r\n");
if(__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST)== RESET && __HAL_RCC_GET_FLAG(RCC_FLAG_PORRST)== RESET){ //PIN复位后,只有PIN复位标志,软件复位后既有PINRST又有SFTRST
// temp_pin+=1;
// eeprom_write(EEPROM_ADDR_PINRESET_CNT, (uint8_t*)&temp_pin, 4);
}
}
if(__HAL_RCC_GET_FLAG(RCC_FLAG_PORRST)!= RESET){
printf("RCC_FLAG_PORRST\r\n");
printf("上电复位\r\n");
temp_porrst_u16+=1;
eeprom_write(EEPROM_ADDR_POR_RESET_STAT, (uint8_t*)&temp_porrst_u16, 2);
}
if(__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST)!= RESET){
printf("RCC_FLAG_SFTRST\r\n");
if(__HAL_RCC_GET_FLAG(RCC_FLAG_PORRST)== RESET){
printf("软件复位\r\n");
temp_sftrst_u16+=1;
eeprom_write(EEPROM_ADDR_SFT_RESET_STAT, (uint8_t*)&temp_sftrst_u16, 2);
}
}
if(__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST)!= RESET){
printf("RCC_FLAG_IWDGRST\r\n");
printf("看门狗复位\r\n");
temp_iwdgrst_u16+=1;
eeprom_write(EEPROM_ADDR_IDWG_RESET_STAT, (uint8_t*)&temp_iwdgrst_u16, 2);
}
if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST)!= RESET){
printf("RCC_FLAG_WWDGRST\r\n");
}
if(__HAL_RCC_GET_FLAG(RCC_FLAG_LPWRRST)!= RESET){
printf("RCC_FLAG_LPWRRST\r\n");
}
printf("电源复位次数=%d\r\n", temp_porrst_u16);
printf("软件复位次数=%d\r\n", temp_sftrst_u16);
printf("看门狗复位次数=%d\r\n", temp_iwdgrst_u16);
__HAL_RCC_CLEAR_RESET_FLAGS(); //清除复位标志
}
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_29874741/article/details/144560658
|