任何处理器,读到Clock时钟部分,总是费劲的。
系统时钟(system clock)SYSCLK可以来自四种时钟源:
HSI(high-speed internal)内部振荡器时钟
HSE(high-speed external)外部振荡器时钟
PLL时钟
MSI(multispeed internal)振荡器时钟
启动复位/从Stop或Standby状态唤醒之后默认将MSI作为时钟源。
设备包含下面的二级时钟源:
37KHz低速RC(LSI RC)时钟,用来驱动独立看门狗和RTC(用以从Stop/Standby模式中唤醒)的一个时钟选项。
32.768kHz低速外部晶体(LSE crystal),作为RTC的一个可选时钟(RTCCLK)。
每个时钟源可以被独立的打开关闭,这便于优化功耗。
多个预分频器允许配置AHB,高速APB2和低速APB1。AHB/APB2/APB1的最大值为32MHz.这决定于设备电压范围,详情参考PWR一章的Dynamic voltage scalling management一节。
所有的外围时钟都来自SYSCLK,除了:
48MHzUSB时钟和SDIO时钟,它们的时钟源来自PLL VOC时钟;
ADC时钟始终来自HSI时钟。分频1,2或者4用以根据设备运行条件而适应时钟频率。更多详细内容参考PWR一章的Operating Power Supply Range一节。
RTC/LCD时钟来自LSE,LSI或者1MHz的HSE_RTC(被编程分频的HSE)。
IWDG时钟始终来自LSI时钟
系统时钟(SYSCLK)频率必须高于或等于RTC/LCD时钟频率。
AHB时钟(HCLK)被8分频可以被用来作为Cortex System Timer(SysTick)外部时钟。SysTick可以来自这个时钟,也可以来自Cortex clock(HCLK),这可以根据SysTick的控制和状态寄存器配置。
Timer的时钟频率自动由硬件锁定。有两种情形:
1.APB预分频器为1,Timer时钟频率与所相连的APB是时钟频率一致;
2.否则,Timer的时钟频率是所连的APB时钟的2倍。
FCLK作为Cortex-M3的自由(Free running)时钟。详情参考ARM Cortex M3 Technical Reference Manual。
6.2.2 HSI时钟
HSI时钟由内部16MHz RC振荡器产生。它可以直接用于System clock或者PLL的输入。
HSI RC振荡器好处是可以提供一个廉价的时钟源(不需要外部器件)。虽然比起外部晶体振荡器或陶瓷谐振器它的频率精度要低一些,但它的启动速度要快。
校准
。。。。
RCC_CR寄存器的HSIRDY标识位用以指示HSI振荡器稳定与否。启动时,HSI RC的时钟直到这一位被硬件置1才输出。
HSI RC振荡器可以使用RCC_CR寄存器的HSION比特位来启动和关闭HSI RC振荡器。
6.2.3 MSI时钟
MSI时钟产生自内部RC振荡器。它的频率可以由RCC_ICSCR寄存器的MSIRANGE[2:0]比特配置。有7种频率范围:65.536kHz,131.072kHz,262.144kHz,524.288kHz,1.048MHz,2.097MHz(默认值)和4.194MHz.
系统重启、从Stop和Standby低功耗唤醒后系统时钟都使用的是MSI时钟。重启后或者从Standby唤醒之后,MSI频率设置为默认值。RCC_ICSCR寄存器的值在从STOP模式下继续保存,也就是说MSI频率和校准值在唤醒后的值和进入STOP模式前一样。
MSI的RC振荡器的优点是可以作为低功耗时钟源(无外围电路)。它可以作为低功耗模式下的唤醒时钟以减少功耗和唤醒时间。
RCC_CR寄存器的MSIRDY标志位表示MSI的RC稳定与否。启动后,MSI的RC输出时钟不释放直到该比特被硬件置1。
可以通过RCC_CR寄存器的MSION位打开和关闭MSI的RC。
当HSE晶体出错后,MSI还可以作为辅助的备用时钟源。
校准
由于制造过程的差异不同片子的MSI RC振荡器频率也会有差异。这也是为什么每个设备都经过ST的出长校准,在是室温TA为30度的情形下校准精度1%.
重启后,出厂校准值从RCC_ICSCR寄存器的MSICAL[7:0]装载。如果应用电压和温度不同,那么会影响到RC振荡器的速率。你还可以通过RCC_ICSCR寄存器的MSITRIM[7:0]比特来调整MSI频率。更多详细关于如何测量MSI的频率变化请参考6.2.14节。
6.2.5 LSE时钟
LSE晶体是一个32.768kHz的低速外部晶体或者陶瓷振荡器。它的优势在于为提供时钟/日历RTC外围模块提供时钟源。
LSE晶体可以通过RCC_CSR寄存器的LSEON位开启或关闭。
RCC_CSR寄存器上的LSERDY位则表示LSE晶体是否稳定。启动后,LSE晶体输出时钟信号直到该位置1才被释放。如果RCC_CIR寄存器上相应的位使能后,则稳定后将产生相应的中断。
外部源(LSE旁路)
该模式下,必须提供一个外部时钟源。频率最高可以达到1MHz。该模式可以通过设置RCC_CSR寄存器的LSEBYP和LSEON位为1而提供。大约50%占空比的外部时钟信号(方波,正弦波或三角波)驱动OSC32_IN引脚,OSC32_OUT引脚则可以作为GPIO。
6.2.7 系统时钟(SYSCLK)选择
SYSCLK可以选择自四种时钟源:
HSI振荡器
HSE振荡器
PLL振荡器
MSI振荡器
如果直接或者间接通过PLL作为钟源,就不可能停止该时钟。
只有在目标时钟源稳定之后才可以从一种时钟源切换为另外一种时钟源(时钟在启动之后稳定下来或者PLL锁定之后)。如果所选的时钟没有稳定下来,那么切换将在时钟稳定下来之后发生。RCC_CR寄存器的状态位表明哪些时钟稳定了和当前系统时钟选择了哪个时钟。
6.2.13 时钟向外输出功能
微处理器时钟输出(MCO)功能允许时钟经过分频器(1,2,4,8或者16)输出到外部MCO引脚(PA8)。相应的GPIO配置寄存器必须设置为外围功能模式。可以选择7种时钟信号之一作为MCO时钟输出。
SYSCLK
HSI
MSI
HSE
PLL
LSI
LSE
RCC_CFGR寄存器的MCOSEL[2:0]用来选择以上七种信号之一。