要想查看复位情况可以使用: //****************************************************************************** // 函数名称: RCC_GetFlagStatus // 功能描述: 检查指定的RCC标志设置与否. // 输入参数: RCC_FLAG:要检查的标志. // 这个参数可以是下面的值之一: // - RCC_FLAG_HSIRDY: HIS振荡时钟就绪 // - RCC_FLAG_HSERDY: HSE振荡时钟就绪 // - RCC_FLAG_PLLRDY: PLL时钟就绪 // - RCC_FLAG_LSERDY: LSE振荡时钟就绪 // - RCC_FLAG_LSIRDY: LSI振荡时钟就绪 // - RCC_FLAG_PINRST: 引脚复位 // - RCC_FLAG_PORRST: POR/PDR复位 // - RCC_FLAG_SFTRST: 软件复位 // - RCC_FLAG_IWDGRST: 独立看门狗复位 // - RCC_FLAG_WWDGRST: 窗口看门狗复位 // - RCC_FLAG_LPWRRST: 低电量复位 // 输出参数: 无 // 返回参数: RCC_FLAG的新状态(SET或RESET). FlagStatus RCC_GetFlagStatus(u8 RCC_FLAG)来查看!
而要想软件产生一个复位如下: 在官方软件库的stm32f10x_nvic.c 文件里 直接提供了 系统复位的函数 //******************************************************************************* * 函数名称: NVIC_GenerateSystemReset * 功能描述: 生成一个系统复位. * 输入参数: 无 * 输出参数: 无 * 返回参数: 无 *******************************************************************************/ void NVIC_GenerateSystemReset(void) { SCB->AIRCR = AIRCR_VECTKEY_MASK | (u32)0x04; } 在Cortex-M3权威指南中有一个要注意的问题:从SYSRESETREQ 被置为有效,到复位发生器执行复位命令,往往会有一个延时。在此延时期间,处理器仍然可以响应中断请求。但我们的本意往往是要让此次执行到此为止,不要再做任何其它事情了。所以,最好在发出复位请求前,先把FAULTMASK 置位。stm32f10x_nvic.c 文件里也直接提供了该函数 /******************************************************************************* * 函数名称: NVIC_SETFAULTMASK * 功能描述: 使能FAULTMASK优先级:把执行的优先级提升为-1. * 输入参数: 无 * 输出参数: 无 * 返回参数: 无 *******************************************************************************/ void NVIC_SETFAULTMASK(void) { __SETFAULTMASK(); } 所以要系统复位 只要 调用这个函数就行了 void SystemReset(void ) { NVIC_SETFAULTMASK(); NVIC_GenerateSystemReset(); }
|