打印
[应用相关]

STM32复位状态获取判断

[复制链接]
32|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaoqizi|  楼主 | 2024-12-20 14:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//用于统计复位次数
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

使用特权

评论回复
沙发
suncat0504| | 2024-12-20 19:48 | 只看该作者
从来没想到,复位动作本身也可以被捕捉。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

95

主题

4129

帖子

3

粉丝