[应用相关] STM32 关于复位类型的判断及软件复位

[复制链接]
2789|4
 楼主| 598330983 发表于 2018-9-5 19:36 | 显示全部楼层 |阅读模式
要想查看复位情况可以使用:
  1. //******************************************************************************
  2. // 函数名称: RCC_GetFlagStatus
  3. // 功能描述: 检查指定的RCC标志设置与否.
  4. // 输入参数: RCC_FLAG:要检查的标志.
  5. //                    这个参数可以是下面的值之一:
  6. //                       - RCC_FLAG_HSIRDY: HIS振荡时钟就绪
  7. //                       - RCC_FLAG_HSERDY: HSE振荡时钟就绪
  8. //                       - RCC_FLAG_PLLRDY: PLL时钟就绪
  9. //                       - RCC_FLAG_LSERDY: LSE振荡时钟就绪
  10. //                       - RCC_FLAG_LSIRDY: LSI振荡时钟就绪
  11. //                       - RCC_FLAG_PINRST: 引脚复位
  12. //                       - RCC_FLAG_PORRST: POR/PDR复位
  13. //                       - RCC_FLAG_SFTRST: 软件复位
  14. //                       - RCC_FLAG_IWDGRST: 独立看门狗复位
  15. //                       - RCC_FLAG_WWDGRST: 窗口看门狗复位
  16. //                      - RCC_FLAG_LPWRRST: 低电量复位
  17. // 输出参数: 无
  18. // 返回参数: RCC_FLAG的新状态(SET或RESET).
FlagStatus RCC_GetFlagStatus(u8 RCC_FLAG)来查看!
而要想软件产生一个复位如下:
在官方软件库的stm32f10x_nvic.c 文件里 直接提供了 系统复位的函数
  1. //*******************************************************************************
  2. * 函数名称: NVIC_GenerateSystemReset
  3. * 功能描述: 生成一个系统复位.
  4. * 输入参数: 无
  5. * 输出参数: 无
  6. * 返回参数: 无
  7. *******************************************************************************/
  8. void NVIC_GenerateSystemReset(void)
  9. {
  10.   SCB->AIRCR = AIRCR_VECTKEY_MASK | (u32)0x04;
  11. }


 楼主| 598330983 发表于 2018-9-5 19:37 | 显示全部楼层
在Cortex-M3权威指南中有一个要注意的问题:从SYSRESETREQ 被置为有效,到复位发生器执行复位命令,往往会有一个延时。在此延时期间,处理器仍然可以响应中断请求。但我们的本意往往是要让此次执行到此为止,不要再做任何其它事情了。所以,最好在发出复位请求前,先把FAULTMASK 置位。stm32f10x_nvic.c 文件里也直接提供了该函数
  1. /*******************************************************************************
  2. * 函数名称: NVIC_SETFAULTMASK
  3. * 功能描述: 使能FAULTMASK优先级:把执行的优先级提升为-1.
  4. * 输入参数: 无
  5. * 输出参数: 无
  6. * 返回参数: 无
  7. *******************************************************************************/
  8. void NVIC_SETFAULTMASK(void)
  9. {
  10.   __SETFAULTMASK();
  11. }

  12. 所以要系统复位 只要 调用这个函数就行了
  13. void SystemReset(void )
  14. {
  15.   NVIC_SETFAULTMASK();
  16.   NVIC_GenerateSystemReset();
  17. }


dongnanxibei 发表于 2018-9-5 20:37 | 显示全部楼层
好像很多单片机都有这个复位后的一个标志。
捉虫天师 发表于 2018-9-6 20:42 | 显示全部楼层
是的,好多单片机都有这个功能,用于判断是什么引起的复位。
小灵通2018 发表于 2018-9-6 21:31 | 显示全部楼层
在哪个头文件里?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

267

主题

5575

帖子

22

粉丝
快速回复 在线客服 返回列表 返回顶部