时钟与复位系统

时钟与复位系统
Kayer1. 时钟
1.1 时钟树
在STM32中有3种不同的时钟源用来驱动系统时钟(SYSCLK):
HSI振荡器时钟(High Speed Internal oscillator,高速内部时钟)
HSE振荡器时钟(High Speed External(Oscillator / Clock),高速外部时钟)
PLL时钟(Phase Locked Loop 锁相环/倍频器)
还有2种2级时钟:
LSI时钟(Low Speed Internal,低速内部时钟)
LSE时钟(Low Speed External oscillator,低速外部时钟)。
1.2 HSE时钟
高速外部时钟信号(HSE)可以由两种可能的时钟源生成:
- HSE外部晶体/陶瓷谐振器
- HSE用户外部时钟
外部源(HSE旁路)
在这种模式下,必须提供一个外部时钟源。其频率可高达50 MHz。通过在时钟控制寄存器(RCC_CR)中设置HSEBYP和HSEON位来选择此模式。外部时钟信号(方波、正弦波或三角波)具有约50%的占空比,必须驱动OSC_IN引脚,而OSC_OUT引脚应保持高阻态。
外部晶体/陶瓷谐振器(HSE晶体)
3至25 MHz的外部振荡器具有在主时钟上产生非常精确频率的优势。
时钟控制寄存器(RCC_CR)中的HSERDY标志指示高速外部振荡器是否稳定。在启动时,直到硬件设置此位之前,时钟不会释放。如果在时钟中断寄存器(RCC_CIR)中启用,可以生成中断。
使用时钟控制寄存器(RCC_CR)中的HSEON位可以打开和关闭HSE晶体。
1.3 HSI时钟
HSI时钟信号是由内部的8 MHz RC振荡器产生的,可以直接用作系统时钟,或者除以2(2分频)后用作PLL输入。
校准:
由于制造过程中的变化,RC振荡器的频率在不同的芯片之间可能会有所不同,这就是为什么ST为每个设备在TA=25°C时进行工厂校准以确保1%的精度。
复位后,工厂校准值会被加载到时钟控制寄存器(RCC_CR)的HSICAL[7:0]位中。
如果应用程序受到电压或温度变化的影响,这可能会影响RC振荡器的速度。可以在应用程序中使用时钟控制寄存器(RCC_CR)中的HSITRIM[4:0]位来微调HSI频率。
时钟控制寄存器(RCC_CR)中的HSIRDY标志指示HSI RC是否稳定。在启动时,直到硬件设置此位之前,HSI RC输出时钟不会被释放。
可以使用时钟控制寄存器(RCC_CR)中的HSION位来开启和关闭HSI RC。
如果HSE晶体振荡器失败,HSI信号也可以用作备份源(辅助时钟)。
1.4 PLL时钟
主PLL提供一个频率倍增器,起始于以下时钟源之一:
- HSI时钟除以2
- HSE或PLL2时钟通过一个可配置的分频器
PLL2和PLL3通过一个特定的可配置分频器由HSE时钟驱动。请参见图11和时钟配置寄存器2(RCC_CFGR2)。
如果在时钟中断寄存器(RCC_CIR)中启用,当PLL准备就绪时可以生成一个中断。
1.5 LSE时钟
LSE晶体是一个32.768 kHz的低速外部晶体或陶瓷谐振器。它的优势在于为实时时钟外设(RTC)提供一个低功耗但高精度的时钟源,用于时钟/日历或其他定时功能。
通过备份域控制寄存器(RCC_BDCR)中的LSEON位来开启和关闭LSE晶体。
备份域控制寄存器(RCC_BDCR)中的LSERDY标志指示LSE晶体是否稳定。在启动时,LSE晶体的输出时钟信号不会被释放,直到硬件设置此位。如果在时钟中断寄存器(RCC_CIR)中启用,可以生成一个中断。
外部源(LSE旁路):
在这种模式下,必须提供一个外部时钟源。其频率可高达1 MHz。通过在备份域控制寄存器(RCC_BDCR)中设置LSEBYP和LSEON位来选择此模式。外部时钟信号(方波、正弦波或三角波)具有约50%的占空比,必须驱动OSC32_IN引脚,而OSC32_OUT引脚应保持高阻态。参见图12。
LSE是不能驱动系统时钟的。
1.6 LSI时钟
LSI RC作为低功耗时钟源,可以在停止和待机模式下为独立看门狗(IWDG)和自动唤醒单元(AWU)保持运行。时钟频率大约为40 kHz(在30 kHz到60 kHz之间)。
通过控制/状态寄存器(RCC_CSR)中的LSION位,可以开启和关闭LSI RC。
控制/状态寄存器(RCC_CSR)中的LSIRDY标志指示低速内部振荡器是否稳定。在启动时,直到硬件设置此位之前,时钟不会被释放。如果在时钟中断寄存器(RCC_CIR)中启用,可以生成中断。
LSI校准:
低速内部RC(LSI)振荡器的频率偏差可以校准,以获得准确的实时时钟(RTC)时间基准和/或IWDG超时(当使用LSI作为这些外设的时钟源时),并具有可接受的准确性。
这种校准是通过测量LSI时钟频率相对于TIM5输入时钟(TIM5CLK)来进行的。根据HSE振荡器的精度进行此测量后,软件可以调整RTC的可编程20位预分频器以获得准确的时间基准,或者可以计算准确的IWDG超时。
使用以下步骤校准LSI:
- 启用TIM5定时器,并将通道4配置为输入捕获模式。
- 在AFIO_MAPR寄存器中设置TIM5CH4_IREMAP位,以将LSI时钟内部连接到TIM5通道4输入捕获,用于校准目的。
- 使用TIM5捕获/比较4事件或中断测量LSI时钟的频率。
- 根据所需的时间基准和/或计算IWDG超时,使用测量的LSI频率更新RTC的20位预分频器。
LSI是不能驱动系统时钟的。
1.7 系统时钟(SYSCLK)选择
在系统复位后,HSI振荡器被选为系统时钟。
当直接使用一个时钟源或通过PLL作为系统时钟时,无法停止它。
只有在目标时钟源准备就绪(启动延迟后时钟稳定或PLL锁定)的情况下,才会发生从一个时钟源切换到另一个时钟源。如果选择了尚未准备就绪的时钟源,那么切换将在时钟源准备就绪时发生。时钟控制寄存器(RCC_CR)中的状态位指示哪些时钟(s)已就绪,以及当前使用哪个时钟作为系统时钟。
1.8 时钟安全系统(CSS)
时钟安全系统可以通过软件激活。在这种情况下,时钟检测器在HSE振荡器启动延迟后启用,并在该振荡器停止时禁用。
1.9 RTC时钟
RTCCLK时钟源可以是HSE/128、LSE或LSI时钟中的任意一个。这是通过编程备份域控制寄存器(RCC_BDCR)中的RTCSEL[1:0]位来选择的。
LSE时钟位于备份域中,而HSE和LSI时钟则不在。因此:
- 如果选择了LSE作为RTC时钟:
- 即使VDD供电被关闭,只要VBAT供电保持,RTC仍可继续工作。
- 如果选择了LSI作为自动唤醒单元(AWU)时钟:
- 如果VDD供电被关闭,AWU的状态是无法保证的。
- 如果使用HSE时钟除以128作为RTC时钟:
- 如果VDD供电被关闭或内部电压调节器被关闭(从1.8V域移除电源),RTC的状态是无法保证的。
- 功率控制器寄存器中的DPB位(禁用备份域写保护)必须设置为1
1.10 看门狗时钟
如果独立看门狗(IWDG)通过硬件选项或软件访问启动,LSI振荡器将被强制开启且无法被禁用。在LSI振荡器启动后,时钟将提供给IWDG。
1.11 时钟输出功能
微控制器时钟输出(MCO)功能允许将时钟信号输出到外部MCO引脚。相应GPIO端口的配置寄存器必须编程为复用功能模式。可以选择8个时钟信号中的一个作为MCO时钟。
- 系统时钟(SYSCLK)
- 内部高速时钟(HSI)
- 外部高速时钟(HSE)
- 选择的PLL时钟除以2
- 选择的PLL2时钟
- 选择的PLL3时钟除以2
- 选择的XT1外部3-25 MHz振荡器时钟(用于以太网)
- 选择的PLL3时钟(用于以太网)
输出到MCO的选定时钟信号不得超过50 MHz(最大I/O速度)。选择由时钟配置寄存器(RCC_CFGR)的MCO[3:0]位控制。
2. 复位
存在三种类型的重置,被定义为系统重置、电源重置和备份域重置。
2.1 系统复位
系统重置将所有寄存器设置为它们的重置值,除了时钟控制器CSR寄存器中的重置标志和备份域中的寄存器(见图4)。
当发生以下事件之一时,会生成系统重置:
- NRST引脚上的低电平(外部重置)
- 窗口看门狗计数结束条件(WWDG重置)
- 独立看门狗计数结束条件(IWDG重置)
- 软件重置(SW重置)(见软件重置)
- 低功耗管理重置(见低功耗管理重置)
通过检查控制/状态寄存器RCC_CSR中的重置标志,可以识别重置源
软件复位
必须将Cortex®-M3应用中断和重置控制寄存器中的SYSRESETREQ位设置为1,以强制对设备进行软件重置。
2.2 低功耗管理复位
生成低功耗管理复位有两种方式:
进入待机模式时产生的复位:
这种复位是通过在用户选项字节中重置nRST_STDBY位来启用的。在这种情况下,每当成功执行待机模式进入序列时,设备将被复位而不是进入待机模式。
进入停止模式时的复位:
这种复位是通过在用户选项字节中重置nRST_STOP位来启用的。在这种情况下,每当成功执行停止模式进入序列时,设备将被复位而不是进入停止模式。
2.3 电源复位
当发生以下事件之一时,将生成电源重置:
上电/下电重置(POR/PDR重置)
退出待机模式时
电源重置将所有寄存器设置为其重置值,但备份域除外(见图4)
这些源作用于NRST引脚,并且在延迟阶段始终保持低电平。RESET服务例程向量固定在内存映射中的地址0x0000_0004。。
提供给设备的系统复位信号在NRST引脚上输出。脉冲发生器保证每个复位源(外部或内部复位)的最小复位脉冲持续时间为20微秒。在外部复位的情况下,当NRST引脚被断言为低电平时生成复位脉冲。
2.4 备份域重置
备份域有两个特定的重置操作,这些操作只影响备份域(见图4)。
当发生以下事件之一时,将生成一个备份域重置:
- 软件重置,通过在备份域控制寄存器(RCC_BDCR)中设置BDRST位触发。
- VDD或VBAT电源开启,如果之前两个电源都已关闭。