STM32 复位及时钟 应用总结(1)

参考资料:
1.《Cortex-M3 权威指南》
2.《STM32 数据手册》
3.《STM32 应用手册》
4.《STM32 函数库手册》

一、复位
STM32F10xxx 支持三种复位形式,分别为 系统复位、上电复位、备份复位。
1. 系统复位
除了时钟控制器的RCC_CSR 寄存器中的复位标志位和备份区域中的寄存器以外,系统复位将复位所有寄存器至他们的复位状态。
当发生以下任一事件时,产生一个系统复位:
1. NRST 引脚上的低电平(外部复位)
2. 窗口看门狗计数终止(WWDG复位)
3. 独立看门狗计数终止(IWDG复位)
4. 软件复位(SW复位)
5. 低功耗管理复位
RCC_CSR 控制状态寄存器重的复位状态标志位识别复位时间来源。
解释说明:
软件复位: 通过将Cortex-M3 中断应用和复位控制寄存器(AIRCR)的第2位为SYSRESETREQ(请求芯片控制逻辑产生一次复位)位置“1”。
在官方软件库的 core_cm3.h 文件中直接提供了系统复位的函数static __INLINE void NVIC_SystemReset(void)
{
SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |
(SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */
__DSB(); /* Ensure completion of memory access */
while(1); /* wait until reset */
}
Cortex-M3 权威指南中:从SYSRESETREQ 被置为有效,到复位发生器执行复位命令,往往会有一个延时。在此延时期间,处理器任然可以相应中断请求。但我们不想控制器做任何事情,所以最好在发出复位请求钱,先把FAULTMASK 置位。
官方 core_cm3.h 文件里也直接提供了该函数
static __INLINE void __set_FAULTMASK(uint32_t faultMask)
{
register uint32_t __regFaultMask __ASM(“faultmask”);
__regFaultMask = (faultMask & 1);
}
所以STM32 的软件复位可以写成如下函数:
void SoftReset(void)
{
__set_FAULTMASK(1); // 关闭所有中断
NVIC_SystemReset(); // 复位
}
低功耗管理复位
(1) 在进入待机模式时产生低功耗管理复位:
通过将用户选择字节中的nRST_STDBY 位置 “1” 将使能该复位。这时,即使执行了待机模式的过程,系统将被复位而不是进入待机模式。
(2) 在进入停止模式时产生低功耗管理复位:
通过将用户选择字节中的nRST_STOP 位置”1”将使能该复位。这时,即使执行了进入停机模式的过程,系统将被复位而不是进入停机模式。
RCC_CSR 寄存器 除复位标志外由系统复位清除,复位标志只能由电源复位清除。
位31:LPWRRSTF: 低功耗复位标志(Low-power reset flag) 在低功耗管理复位发生时由硬件置”1”;由软件通过写RMVF位清除。
0:无低功耗管理复位发生。
1:发生低功耗管理复位。
位30:WWDGRSTF: 窗口看门狗复位标志(Window watchdog reset flag) 在窗口看门狗复位发生时由硬件置”1”;由软件通过写RMVF位清除。
0:无窗户看门狗复位发生。
1:发生窗口看门狗复位。
位29:IWDGRSTF: 独立看门狗复位标志(Independent watchdog reset flag) 在独立看门狗复位发生在VDD区域时由硬件置”1”;由软件通过写RMVF位清除。
0:无独立看门狗复位发生。
1:发生独立看门狗复位。
位28:SFTRSTF: 软件复位标志(Software reset flag) 在软件复位发生时由硬件置”1”;由软件通过写RMVF位清除。
0:无软件复位发生。
1:发生软件复位。
位27:SFTRSTF: 软件复位标志(POR/PDR reset flag) 在软件复位发生时由硬件置”1”;由软件通过写RMVF位清除。
0:无软件复位发生。
1:发生软件复位。
位26:PINRSTF: NRST引脚复位标志(PIN reset flag) 在NRST引脚复位发生时由硬件置”1”;由软件通过写RMVF位清除。
0:无NRST引脚复位发生。
1:发生NRST引脚复位。
位24:RMVF: 清除复位标志(Remove reset flag) 由软件置 “1” 来清除复位标志。
0:无作用。
1:清除复位标志。
位1:LSIRDY: 内部低速振荡器就绪(Internal low-speed oscillator ready) 由硬件置 “1” 或 清 “0” 来指示内部40KHz RC 振荡器是否就绪。在LSION清零后,RC振荡器的周期后LSIRDY被清零 。
0:内部40KHz RC 振荡器时钟未就绪。
1:内部40KHz RC 振荡器时钟就绪。
位0:LSIRDY:内部低速振荡器使能(Internal low-speed oscillator enable) 由软件置 “1”或清 “0” 。
0:内部40KHz RC 振荡器关闭。
1:内部40KHz RC 振荡器开启。
电源复位 以下事件均可产生电源复位:
1. 上电/掉电复位(POR/PDR 复位)
2. 从待机模式中返回
说明:电源复位将复位除备份区域外的所有寄存器。
复位源将最终作用于RESET引脚,并在复位过程中保持低电平。芯片内部的复位信号会在NRST 引脚上输出,脉冲发生器保证每一个(外部或内部)复位源都能有至少20us的脉冲延时;当NRST引脚被拉低产生外部复位时,它将产生复位脉冲。
备份域复位 备份区域拥有两个专门的复位,他们只影响备份区域。
以下事件之一发生,将产生备份区域复位。
1. 软件复位, 备份区域复位可由设置备份域控制寄存器(RCC_BDCR)中的BDRST 位产生。
2. 在VDD和VBAT两者掉电的前提下,VDD或VBAT上将引发备份区域复位。
解释说明:
RCC_BDCR 备份域控制寄存器
特别注意:备份域控制器(RCC_BDCR)的LSEON、LSEBYP、RTCSEL和RTCEN 位处于备份域。因此,这些为在复位后处于写保护状态,只有在电源控制寄存器(PWR_CR)中的DBP位置 “1” 后才能对这些位进行改动。这些位智能由备份域复位清除。任何内部或外部复位都不会影响这些位。
位31:17: 保留,始终读为0;
位16:BDRST,备份域软件复位(Backup domain software reset)
由软件置 “1” 或 清 “0”
0:复位未激活;
1:复位整个备份域。
位15:RTCEN,RTC 时钟使能(RTC clock enable)
由软件置 “1” 或 清 “0”
0:RTC时钟关闭;
1:RTC时钟开启。
位 9:8:RTCSEL[1:0],RTC 时钟源选择(RTC clock source selection) 由软件设置来选择RTC时钟源。一旦RTC时钟源被选定,直到下次后备域被复位, 它不能再被改变。可通过BDRST位来清除。
00:无时钟;
01:LSE 振荡器作为RTC时钟;
10:LSI 振荡器作为RTC时钟;
11:HSE振荡器在128分频后作为RTC时钟。
位 2:LSEBYP 外部低速时钟振荡器旁路(External low-speed oscillator bypass) 在调试模式下由软件置 “1” 或清 “0”来旁路LSE。只有在外部32KHz 振荡器关闭时,才能写入该位。
0:LSE时钟未被旁路;
1:LSE时钟被旁路;
位 1:LSERDY 外部低速LSE 就绪(External low-speed oscillator ready) 由硬件置 “1” 或清 “0”来指示是否外部32KHz 振荡器就绪。在LSEON被清零后,该位需要6个我I阿布低速振荡器的周期才被清零。
0:外部32KHz 振荡器未就绪;
1:外部32KHz 振荡器就绪;
位 0:LSEON:外部低速振荡器使能(External low-speed oscillator enable) 由软件置 “1” 或清 “0”
0:外部32KHz 振荡器关闭;
1:外部32KHz 振荡器开启。

你可能感兴趣的:(单片机)