STM32L--Reset and clock control(RCC)

STM32L-Reset and clock control(RCC)


1. Reset

有三种复位的方法:系统复位、电源复位、RTC domain复位。

(1)系统复位
系统复位时会将所有寄存器置为复位状态(除了RTC、RTC备份寄存器和控制/状态寄存器、RCC_CSR)。
当以下事件发生时将会产生系统复位:
    • NRST端口为低电平(外部复位)
    • 窗口看门狗 end-of-count时(WWDG 复位)
    • 独立看门狗 end-of-count时(IWDG复位)
    • 软件复位(SW复位)
    • 低功耗管理复位
    • 选项字节加载复位
    • 退出待机模式时
可以通过检测复位标志位(control/status register,RCC_CSR)判断为哪一个复位源。
a)软件复位
配置Cortex-M3应用中断的SYSERSETREQ位和复位控制寄存器才能触发软件复位发生。
b)低功耗管理复位
有两种方法可以产生低功耗管理复位:
    • 当进入待机模式时产生的复位:需要复位选项字节里的nRST_STDBY位才能使其生效。在该情况下,无论进入待机模式的时序是否成功执行,设备将以复位代替进入待机模式。
    • 当进入停止模式时产生的复位:需要复位选项字节里的nRST_STOP位才能使其生效。在该情况下,无论进入停止模式的时序是否成功执行,设备将以复位代替进入停止模式。
c)选项字节加载复位
当FLASH_PECR寄存器中的OBL_LAUNCH位被置位时,选项字节加载复位才会产生。该位用于启动软件选项字节加载。

(2)电源复位
当以下事件发生时将会产生电源复位:
    • POR/PDR复位
    • BOR复位
电源复位会将所有寄存器包括RTC domain的值重置为复位状态。
这些均会表现在NRST端口上,并且在delay phase期间会保持低电平。复位服务的routine vector固定在了内存映射0X0000_0004地址。
系统复位信号会在NRST端口中输出。对于每个内部复位源,Pulse generator均会产生至少20us的延时。在外部复位的情况下,当NRST为低电平时会产生复位脉冲。




(3)RTC及备份寄存器复位
当以下事件发生时,RTC外设、RTC时钟、备份寄存器将会复位
    • 软件复位(设置RCC_CSR RTCRST位)
    • 电源复位(BOR/POR/PDR)

2.时钟
以下四种时钟源可用于驱动系统时钟(SYSCLK):
    • HSI(high-speed internal)oscillator clock
    • HSE (high-speed external)oscillator clock
    • PLL clock
    • MSI(multispeed internal)oscillator clock(当复位或者从停止、待机模式中唤醒时,系统时钟为MSI)
设备中还有以下两种时钟源:
    • 37kHz low speed internal RC(LSI RC):驱动独立看门狗,RTC(用于从停止/待机模式中自动唤醒、可选)
    • 32.768kHz low speed external crystal(LSE crystal):real-time clock(RTCCLK、可选)
每一个时钟源可以单独的关闭和打开,从而减少功耗。
多个分频器可用于配置AHB、the high speed APB(APB2)、the low speed APB(APB1)domains。AHB、APB1、APB2最高频道为32MHz(与工作电压范围相关)。
所以的外设时钟均来源于SYSCLK,除了以下外设时钟:
    • 48MHz clock USB 和 SDIO时钟来源于PLL VCO时钟
    • ADC时钟来源于HSI时钟,根据具体情况可以使用分频器进行1、2或4分频以使用合适的频率
    • RTC/LCD时钟来源于LSE,LSI或1MHz HSE_RTC(HSE divided by a programmable prescaler)
    • IWDG时钟来源于LSI
SYSCLK频道必需大于等于RTC/LCD时钟频道。
SysTick时钟来源于AHB时钟(8分频)。


硬件会自动调整定时器时钟频率,有以下两种情况:
    • 如果APB分频器为1,定时器时钟频道被设置为与APB一致
    • 否则,被设置为2倍于APB时钟

(1)HSE
HSE可以游以下时钟源产生:
    • HSE 外部晶振
    • HSE 外部时钟源
振荡器及负载电容需要放置在尽可能靠近引脚的地方以减少输出变形及启动稳定时间。电容值需要根据所选择的振荡器进行修改以匹配。



a)External source(HSE bypass)
在该模式下,需要提供一个外部时钟源,其频道可达32MHz。通过设置时钟控制寄存器的HSEBYP和HSEON位即可选择该模式。外部时钟源(方波、正玄波、三角波)以50%的占空比驱动OSC_IN引脚。

b)External crystal/ceramic resonator(HSE crystal)
1~24MHz的外部振荡器可以为系统提供高精度的时钟。

硬件连接如Figure 13所示。
RCC_CR寄存器中的HSERDY标示了HSE振荡器是否已经稳定。在启动时,只有该位为有效时,HSE才是生效的。如果配置了RCC_CR相应的位,可以产生相应的中断。
通过RCC_CR寄存器中的HSEON可以关闭或开启HSE。

(2)HSI

HSI时钟由内部16MHz RC振荡器产生。该时钟可直接被用为系统时钟或者PLL输入。
HSI RC振荡器具有在低成本(无需外部元器件)情况下提供时钟源,而且比HSE具有更快的启动时间,但是其精度没有外部振荡器高(即使进行了调整)。
a)Calibration
RC振荡器的频率会于其他芯片上的不同(与不同的制作过程有关)。这就是为什么每个芯片在出厂前调整到只有1%的误差(在固定的温度TA:25摄氏度)。
复位后,出厂的调整值存放在了内部时钟源调整寄存器RCC_ICSCR的HSICAL[7:0]。
如果应用与电压或者温度变化的相关,这也有可能同时影响到了RC振荡器的频率。你可以在程序中通过修改HSIRTIM[4:0](RCC_ICSCR寄存器中)修改HSI频率。

RCC_CR寄存器中的HSIRDY标示了HSI振荡器是否已经稳定。在启动时,只有该位有效时,HSI才是生效的。
通过RCC_CR寄存器中的HSION可以关闭或开启HSI。

(3)MSI

MSI时钟源由内部RC振荡器产生。可通过RCC_ICSCR寄存器中的MSIRANGE[2:0]来调整其频率。七种频率是有效的:65.536kHz,131.072kHz,262.144kHz,524.288kHz,1.048MHz,2.097MHz(默认值)和4.194MHz。
复位重启之后或者从停止、待机低功耗模式中唤醒时,MSI时钟源用于系统时钟,且MSI频率为其默认值。从停止模式中唤醒后MSI的频道不会被改变。
MSI RC振荡器具有在低成本(无需外部元器件)情况下提供时钟源。且被使用为低功耗模式的唤醒时钟以减少功耗和唤醒时间。
RCC_CR寄存器中的MSIRDY标示了MSI RC振荡器是否已经稳定。在启动时,只有该位有效时,MSI才是生效的。
如果HSE 振荡器失效时,可自动切换使用该时钟源(CSS)。
a)Calibration
MSI RC振荡器的频率会于其他芯片上的不同(与不同的制作过程有关)。这就是为什么每个芯片在出厂前调整到只有1%的误差(在固定的温度TA:25摄氏度)。
复位后,出厂的调整至存放在了RCC_ICSCR的MSICAL[7:0]。如果应用与电压或者温度变化的相关,这也有可能同时影响到了RC振荡器的频率。你可以在程序中通过修改MSIRTIM[7:0](RCC_ICSCR寄存器中)修改HSI频率。

(4)PLL

内部PLL可由HSI RC或者HSE振荡器驱动。其可用于系统时钟和为USB外设提供48MHz时钟.

PLL输入频率范围必需为:2~24MH

目标频率是通过multiplication factor和output division(嵌入在PLL中)进行配置:
    • 如果应用中使用了USB或者SDIO接口,PLL VCO时钟(由PLL multiplication factor决定)必需被编程为输出96MHz频率。这被要求为USB或者SDIO提供48MHz的时钟(SDIOCLK or USBCLK=PLLVCO/2)
    • 系统时钟由PLL VCO分频得到
Note:
1. 
应用程序必需正确的设置PLL multiplication factor以避免超出以下情况:
PLLVCO=96MHz range1
PLLVCO=48MHz range2
24MHz range3
另外必需正确设置output division 避免SYSCL大于32MHz。

2.
PLL 最小输入频率为2MHz(当使用HSE为PLL的时钟源时)。必需在使能PLL前进行PLL的配置。一旦PLL使能后,则无法修改其参数。
为了修改PLL配置,步骤如下:
1. 设置PLLON为0,关闭PLL
2. 等待PLLRDY位被清除,PLL则已停止
3. 修改所需要的配置
4. 设置PLLON为1,开启PLL

(5)LSE

LSE振荡器是32.768kHz低速外部晶振或者陶瓷振荡器。其优势在于提供低功耗且高精度的时钟源给RTC时钟/日历或其他定时功能。
通过RCC_CSR寄存器中的LSEON位可关闭或开启LSE。
RCC_CSR寄存器中的LSERDY标示了LSE是否已经稳定。在启动时,只有该位有效时,LSE才是生效的。如果配置RCC_CIR寄存器中的对应位可产生相应的中断。
a)External source(LSE bypass)
在该模式下,需要提供一个外部时钟源。其频率可高达1MHz。通过配置RCC_CR中的LSEBYP和LSEON即可开启该模式。外部时钟源以50%的占空比驱动OSC32_IN引脚

(6)LSI

LSI RC振荡器作为低功耗时钟源,在停止或者待机模式下为IWDG提供时钟,该时钟频道约37kHz。
通过RCC_CRT寄存器中的LSION位可关闭或开启LSI。
RCC_CSR寄存器中的LSIRDY标示了LSI是否已经稳定。在启动是,只有该位有效时,LSI才是生效的。
a)LSI measurement
The frequency dispersion of the LSI oscillator can be measured to have accurate RTC time base and/or IWDG timeout(when LSI is used as clock source for these peripherals)with an acceptable accuracy.

(7)系统时钟选择(SYSCLK)

四种不同的时钟源可用于系统时钟(SYSCLK):
    • HSI
    • HSE
    • PLL
    • MSI(default after reset)
如果时钟源正在用作系统时钟或者通过PLL用作系统时钟,此时是无法停止该时钟源的。
只有当目标时钟源准备好时(在启动延时后或者PLL锁定后处于稳定状态)才可从一个时钟源切换到另外一个。如果一个还没有准备好的时钟源被选中进行切换,只有当时钟源稳定后才会进行该时钟源切换。RCC_CR寄存器中的状态位会标示那些时钟源准备好了和当前那个时钟源用于系统时钟

(8)System clock source frequency versus voltage range

以下表格展示了在不同的电压范围内可使用的时钟频率范围:



(9)时钟安全系统(CSS)

时钟安全系统可以通过软件激活。在该情况下,当HSE振荡器稳定后,时钟检测器也是使能的,并且当振荡器停止后,时钟检测器也是失效的。
如果检测到了HSE失效了,该振荡器会自动失效,会产生一个中断(CSSI)告警其失效以允许MCU做出补救措施。CSSI连接到了Cortex-M3 NMI exception vector。
Note:当CSS使能且HSE失效时,CSS中断会发生和自动产生一个NMI。NMI会被不确定的执行除非CSS中断pending位被清除。总而言之,在NMI ISR中必需设置RCC_CIR寄存器中的CSSC以清除CSS中断。
如果HSE被使用为系统时钟,失效检测会引发一个系统时钟切换动作,系统时钟会切换到MSI中,且HSE会失效。如果HSE作为PLL的输入,且PLL用于系统时钟,当发生失效检测时,PLL也是无效的。

(10)LSE的时钟安全系统

In hith density and medium+ devices,通过配置RCC_CSR寄存器的LSECSSON可以激活LSE上的CSS。该位可由硬件复位或者RTC软件复位,或者检测到LSE失效之后会被复位。LSECSSON只有当LSE和LSI被使能且生效时才能被设置,和当RTC时钟被选中之后。
LSE上的CSS可在所有模式中运行:run、sleep、stop和standby、
如果检测到了外部32kHZ振荡器失效时,LSE时钟不再为RTC提供时钟源,且没有任何寄存器的硬件变化。
In standby mode a wakeup is generated. In other modes an interrupt can be sent to wake-up the software.
The software MUST then disable the LSECSSON bit,stop the defective 32kHz oscillator(disabling LSEON),and can change the RTC clock source(no clock or LSI or HSE,with RTCSEL),or take ant required action to secure the application.

(11)RTC和LCD时钟

RTC和LCD有着同样的时钟源:LSE,LSI,HSE 1MHz clock(HSE divided by a programmable prescaler),通过设置RCC_CSR寄存器中的RTCSEL[1:0]和RCC_CR寄存器中的RTCPRE[1:0]来选择对应的时钟源。
一旦选择了RTC和LCD的时钟源,只有通过设置RCC_CSR寄存器中的RTCRST来修改选择或者通过一个POR。
如果LSE/LSI用于RTC时钟源,RTC在停止和待机低功耗模式下可继续工作,还有可以用作唤醒信号。而已,如果使用HSE作为RTC时钟源时,RTC无法在停止和待机低功耗模式下工作。而无论是使用LSE/LSI作为RTC时钟源,LCD均可在停止和待机低功耗模式下工作。
Note:当APB1时钟频率小于7倍的RTC时钟频率(7*RTCLCK),必需读取calendar time和date寄存器两次才可以正确读取数据。如果第二次读取的数据与第一次读取的数据一致,那么数据确保是正确的,否则需要进行第三次读取。

(12)看门狗时钟

IDG可以通过硬件选项位启动或者软件访问启动,此时LSI会被强制生效且无法使其失效。After the LSI oscillator temporization,the clock is provided to the IWDG.

(13)时钟输出功能

MCO(microcontroller clock output)功能允许时钟通过一个可配置的分频器后输出到MCO pin(PA8)。相关的GPIO端口需要配置为alternate function mode。
如下时钟源可被选中为MCO时钟:
    • SYSCLK
    • HSI
    • MSI
    • HSE
    • PLL
    • LSI
    • LSE
通过RCC_CFGR寄存器的MCOSEL[2:0]配置所选择的时钟源。

(14)TIM9/10/11 内部/外部时钟管理

通过TIM9/TIM10/TIM11 channel1 输入捕获可以间接的测量时钟源频率。



每个定时器有一个输入多路选择器用于选择哪个I/O或者内部时钟源触发输入捕获。通过配置TIMx_OR寄存器的TI1_RMP[1:0]可修改该选择。
对于TIM9和TIM10,连接LSE到channel1的输入端的主要目的是为了精确的测量HSI和MSI系统时钟(HSI和MSI应该被选择为系统时钟源)。HSI时钟在LSE信号间的计数为内部时钟周期提供了一个量度标准。利用LSE振荡器的高精度,可以确定在同样条件下的内部时钟频率,从而可以根据电压或者温度的变化对时钟源进行调整。
MSI和HSI振荡器可进行精度调整就是为了该目的。
基本观点包括了提供一个相关的测量(eg:HSI/LSE比):测量的精度与两个时钟源之比相关,HSI/LSE越高,有更好的测量。
当时当MSI时钟较低时(typical below 1MHz),无法提供一个足够准确的解决方案。在该情况下,建议进行一下操作:
    • accumulate the results of several captures in a row
    • use the timer's input capture prescaler(up to 1 capture every 8 periods)
    • use the RTC_OUT signal at 512Hz(when the RTC is clocked by the LSE)as the input for the channel1 input capture.This improves the measurement precision.
TIM10同样可以用于测量LSI:对于没有晶振的应用是十分有用的。超低功耗LSI振荡器在制作过程中有很大的误差:通过测量其精度作为HSI时钟源的一个功能,凭HSI的精度这是可以确定其频率的。
最后TIM11有两个其他的源。TIM11在无晶振的应用中使用MSI就像TIM10使用LSI一样。HSE_RTC的频率相对较高(1MHz),因此相关的频率测量不是十分精确,所以其主要目的是为了粗劣的测量外部晶振的频率。This is useful for instance to meet the requirements of the IEC60730/IEC61335 standards,which requires to be able to determine harmonic or subharmonic frequencies(-50/+100% deviations).

(15)TIM9/10/11 时钟依赖系统时钟源


相当一部分应用使用32.768kHz时钟作为RTC的基本时钟,这样做可以让该时钟源完全独立于系统时钟。这允许调度任务不需要顾及系统的状态(stopped、executing at low medium or full speed)
为了达到该目的,LSE时钟在内部重定向到了三个定时器的ETR inputs,这用于额外的时钟源(as show in Figure 15)。This gives up three independent time bases(using the auto-reload feature)with 1 or 2 compare additional channels for fractional events. For instance,the TIM9's auto-reload interrupt can be programmed for a 1 second tick interrupt with an additional interrupt occuring 250ms after the main tick.
Note:
In this configuration,make sure that you have at least a ratio of 2 between the external clock(LSE) and the APB clock. If the application uses an APB clock frequency lower than twice the LSE clock frequency(typically LSE=32.768kHz,so twice LSE=65.536kHz),it is mandatory to use the external trigger prescaler feature of the timer:it can divide the ETR clock by up to 8.




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章