医院招聘网站建设和维护人员,抖音代运营培训,手机商城下载安装,wordpress吗STM32 HAL 复位源识别 STM32启动后可以识别本次启动是对应哪一种复位源#xff0c;从而可以根据复位源的状态#xff0c;做一些特殊处理。
HAL库的复位源识别 以下代码#xff0c;识别是那种方式进行复位的#xff0c;只需要将自己在那种方式复位运行的程序添加进去即刻从而可以根据复位源的状态做一些特殊处理。
HAL库的复位源识别 以下代码识别是那种方式进行复位的只需要将自己在那种方式复位运行的程序添加进去即刻在这里面尽量进行一些事件更改不要进行长时间任务运行。
void Check_Rst(void)
{my_printf( CSR %x\r\n, RCC-CSR);if(__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST) ! RESET ) // NRST 引脚复位{my_printf(PIN reset \r\n);}if(__HAL_RCC_GET_FLAG(RCC_FLAG_PORRST) ! RESET ) // 上电掉电复位{my_printf(POR/PDR reset \r\n);}if(__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST) ! RESET ) // 软件复位{my_printf(Software reset \r\n);}if(__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) ! RESET ) // 独立看门狗复位{my_printf(Independent watchdog reset \r\n);}if(__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST) ! RESET ) // 窗口看门狗复位{my_printf(Window watchdog reset \r\n);}if(__HAL_RCC_GET_FLAG(RCC_FLAG_LPWRRST) ! RESET ) // 低功耗复位{my_printf((Low-power reset \r\n);}__HAL_RCC_CLEAR_RESET_FLAGS(); //清除复位标志}
HAL库的复位源类型
HAL库的复位源类型主要有如下几种 #define RCC_FLAG_BORRST ((uint8_t)0x95) #define RCC_FLAG_PINRST ((uint8_t)0x96) #define RCC_FLAG_PORRST ((uint8_t)0x97) #define RCC_FLAG_SFTRST ((uint8_t)0x98) #define RCC_FLAG_IWDG1RST ((uint8_t)0x9A) #define RCC_FLAG_WWDG1RST ((uint8_t)0x9C) 其中 RCC_FLAG_BORRST是供电电压低于阀值产生的复位 RCC_FLAG_PINRST是RESET管脚产生的复位 RCC_FLAG_PORRST是上电复位冷启动 RCC_FLAG_SFTRST是软件重启产生的复位 RCC_FLAG_IWDG1RST是内置看门狗产生的复位 RCC_FLAG_WWDG1RST是外置看门狗产生的复位
另外基于芯片的功能还有其它的一些复位源如 RCC_FLAG_CPURST RCC_FLAG_D1RST RCC_FLAG_D2RST RCC_FLAG_OBLRST RCC_FLAG_FWRST RCC_FLAG_LPWRRST RCC_FLAG_LPWR1RST RCC_FLAG_LPWR2RST
标准库的复位源识别
void Check_Rst(void)
{printf( CSR %x\r\n, RCC-CSR);if(RCC_GetFlagStatus(RCC_FLAG_PINRST) ! RESET ) // NRST 引脚复位{printf(PIN reset \r\n);}if(RCC_GetFlagStatus(RCC_FLAG_PORRST) ! RESET ) // 上电掉电复位{printf(POR/PDR reset \r\n);}if(RCC_GetFlagStatus(RCC_FLAG_SFTRST) ! RESET ) // 软件复位{printf(Software reset \r\n);}if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) ! RESET ) // 独立看门狗复位{printf(Independent watchdog reset \r\n);}if(RCC_GetFlagStatus(RCC_FLAG_WWDGRST) ! RESET ) // 窗口看门狗复位{printf(Window watchdog reset \r\n);}if(RCC_GetFlagStatus(RCC_FLAG_LPWRRST) ! RESET ) // 低功耗复位{printf((Low-power reset \r\n);}RCC_ClearFlag(); //清除复位标志printf(\r\n);}//系统复位 所有电路都会复位
void mcuSysRestart(void)
{__set_FAULTMASK(1); //关闭所有中断NVIC_SystemReset(); //系统复位 源码见 core_cm3.h 文件 static __INLINE void NVIC_SystemReset(void) 函数}以上就是HAL库与标准库的复位源操作在这里放着以后也方便自己使用。在实际运用中还是比较可以的让系统少运行一些开机功能。