大鹏2365 发表于 2022-6-30 23:07

STM32L431获取复位源

在进行软件调试时,可能会碰到莫名其妙复位,这个时候就有必要看一下是什么原因导致的复位STM32L431的复位标志在RCC_CSR寄存器中,一共有8种。

大鹏2365 发表于 2022-6-30 23:10

获取复位源时可以用__HAL_RCC_GET_FLAG()函数实现,代码如下。
#define RCC_BORRST                        (1<<0)                        /*        欠压复位*/
#define RCC_OBLRST                        (1<<1)                        /*        选项字节加载器复位*/
#define RCC_PINRST                        (1<<2)                        /*        NRST 引脚复位*/
#define RCC_FWRST                        (1<<3)                        /*        防火墙复位*/
#define RCC_SFTRST                        (1<<4)                        /*        软件复位*/
#define RCC_IWDGRST                        (1<<5)                        /*        独立看门狗复位*/
#define RCC_WWDGRST                        (1<<6)                        /*        窗口看门狗复位*/
#define RCC_LPWRRST                        (1<<7)                        /*        低功耗复位*/

void Sys_GetResetWay(void)
{
        sysResetWay = 0x00;
       
        if(__HAL_RCC_GET_FLAG(RCC_FLAG_BORRST) != RESET ) // Brown-out reset 欠压复位(POR/PDR上电掉电复位)
        {
                sysResetWay |= RCC_BORRST;
        }
        if(__HAL_RCC_GET_FLAG(RCC_FLAG_OBLRST) != RESET ) // 选项字节加载器复位
        {
                sysResetWay |= RCC_OBLRST;
        }
        if(__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST) != RESET ) //         NRST 引脚复位
        {
                sysResetWay |= RCC_PINRST;
        }
        if(__HAL_RCC_GET_FLAG(RCC_FLAG_FWRST) != RESET ) //                防火墙复位
        {
                sysResetWay |= RCC_FWRST;
        }
        if(__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST) != RESET ) //软件复位
        {
                sysResetWay |= RCC_SFTRST;
        }
        if(__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET ) // 独立看门狗复位
        {
                sysResetWay |= RCC_IWDGRST;
        }
        if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) != RESET ) // 窗口看门狗复位
        {
                sysResetWay |= RCC_WWDGRST;
        }
        if(__HAL_RCC_GET_FLAG(RCC_FLAG_LPWRRST) != RESET ) // 低功耗复位
        {
                sysResetWay |= RCC_LPWRRST;
        }
       
        __HAL_RCC_CLEAR_RESET_FLAGS();                        //清除复位标志
}

天灵灵地灵灵 发表于 2022-7-25 18:46

谢谢分享

玛尼玛尼哄 发表于 2022-7-27 17:57

看看
页: [1]
查看完整版本: STM32L431获取复位源