stm32F103R6之时钟树

目录

概述

HSE时钟

HSI时钟

PLL

LSE时钟

LSI时钟

系统时钟(SYSCLK)选择

时钟安全系统(CSS)

时钟输出


概述

三种不同的时钟源可被用来驱动系统时钟(SYSCLK):HSI(内部高速)振荡器时钟、HSE(外部高速)振荡器时钟、PLL(锁相环)时钟。

另外:

  • 40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机/待机模式下自动唤醒系统。
  • 32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)。

当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。

stm32F103R6之时钟树

图 1时钟树

HSE时钟

高速外部时钟信号(HSE)由以下两种时钟源产生:HSE外部晶体/陶瓷谐振器和HSE用户外部时钟。

为了减少时钟输出的失真和缩短启动稳定时间,晶体/陶瓷谐振器和负载电容器必须尽可能地靠近振荡器引脚。负载电容值必须根据所选择的振荡器来调整。

外部时钟源(HSE旁路)

在这个模式里,必须提供外部时钟。它的频率最高可达25MHz。用户可通过设置在时钟控制寄存器中的HSEBYP和HSEON位来选择这一模式。外部时钟信号(50%占空比的方波、正弦波或三角波)必须连到SOC_IN引脚,同时保证OSC_OUT引脚悬空。见下图。

外部晶体/陶瓷谐振器(HSE晶体)

4~16Mz外部振荡器可为系统提供更为精确的主时钟。相关的硬件配置可参考下图。在时钟控制寄存器RCC_CR中的HSERDY位用来指示高速外部振荡器是否稳定。在启动时,直到这一位被硬件置’1’,时钟才被释放出来。如果在时钟中断寄存器RCC_CIR中允许产生中断,将会产生相应中断。 HSE晶体可以通过设置时钟控制寄存器里RCC_CR中的HSEON位被启动和关闭。

stm32F103R6之时钟树

图 2HSE时钟源

HSI时钟

HSI时钟信号由内部8MHz的RC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差。

制造工艺决定了不同芯片的RC振荡器频率会不同,这就是为什么每个芯片的HSI时钟频率在出厂前已经被ST校准到1%(25°C)的原因。系统复位时,工厂校准值被装载到时钟控制寄存器的HSICAL[7:0]位。 如果用户的应用基于不同的电压或环境温度,这将会影响RC振荡器的精度。可以通过时钟控制寄存器里的HSITRIM[4:0]位来调整HSI频率。

时钟控制寄存器中的HSIRDY位用来指示HSI RC振荡器是否稳定。在时钟启动过程中,直到这一位被硬件置’1’,HSI RC输出时钟才被释放。HSI RC可由时钟控制寄存器中的HSION位来启动和关闭。 如果HSE晶体振荡器失效,HSI时钟会被作为备用时钟源。

PLL

内部PLL可以用来倍频HSI RC的输出时钟或HSE晶体输出时钟。

PLL的设置(选择HIS振荡器除2或HSE振荡器为PLL的输入时钟,和选择倍频因子)必须在其被激活前完成。一旦PLL被激活,这些参数就不能被改动。

如果PLL中断在时钟中断寄存器里被允许,当PLL准备就绪时,可产生中断申请。

如果需要在应用中使用USB接口,PLL必须被设置为输出48或72MHZ时钟,用于提供48MHz的USBCLK时钟。

LSE时钟

LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能提供一个低功耗且精确的时钟源。 LSE晶体通过在备份域控制寄存器(RCC_BDCR)里的LSEON位启动和关闭。 在备份域控制寄存器(RCC_BDCR)里的LSERDY指示LSE晶体振荡是否稳定。在启动阶段,直到这个位被硬件置’1’后,LSE时钟信号才被释放出来。如果在时钟中断寄存器里被允许,可产生中断申请。

外部时钟源(LSE旁路)

在这个模式里必须提供一个32.768kHz频率的外部时钟源。你可以通过设置在备份域控制寄存器(RCC_BDCR)里的LSEBYP和LSEON位来选择这个模式。具有50%占空比的外部时钟信号。

LSI时钟

LSI RC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟。LSI时钟频率大约40kHz(在30kHz和60kHz之间)。

LSI RC可以通过控制/状态寄存器(RCC_CSR)里的LSION位来启动或关闭。

在控制/状态寄存器(RCC_CSR)里的LSIRDY位指示低速内部振荡器是否稳定。在启动阶段,直到这个位被硬件设置为’1’后,此时钟才被释放。如果在时钟中断寄存器(RCC_CIR)里被允许,将产生LSI中断申请。

系统时钟(SYSCLK)选择

系统复位后,HSI振荡器被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,它将不能被停止。 只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时钟源的切换才会发生。在被选择时钟源没有就绪时,系统时钟的切换不会发生。直至目标时钟源就绪,才发生切换。 在时钟控制寄存器(RCC_CR)里的状态位指示哪个时钟已经准备好了,哪个时钟目前被用作系统时钟。

时钟安全系统(CSS)

时钟安全系统可以通过软件被激活。一旦其被激活,时钟监测器将在HSE振荡器启动延迟后被使能,并在HSE时钟关闭后关闭。 如果HSE时钟发生故障,HSE振荡器被自动关闭,时钟失效事件将被送到高级定时器(TIM1和TIM8)的刹车输入端,并产生时钟安全中断CSSI,允许软件完成营救操作。此CSSI中断连接到Cortex™-M3的NMI中断(不可屏蔽中断)。

时钟输出

微控制器允许输出时钟信号到外部MCO引脚。 相应的GPIO端口寄存器必须被配置为相应功能。以下四个时钟信号可被选作MCO时钟(见图一):

● SYSCLK

● HSI

● HSE

● 2分频的PLL时钟

STM32F103R6是一款基于ARM Cortex-M3内核的微控制器,它具有丰富的外设和功能。在配置STM32F103R6时钟时,需要设置系统时钟和外设时钟。 1. 系统时钟配置: - 首先,需要选择系统时钟源。可以选择内部时钟源(HSI)或外部时钟源(HSE)。 - 如果选择内部时钟源,可以使用默认的内部高速时钟(HSI)作为系统时钟源。可以通过设置RCC_CFGR寄存器来配置HSI的分频系数。 - 如果选择外部时钟源,需要将外部时钟源连接到MCU的引脚上,并通过设置RCC_CFGR寄存器来配置外部时钟源的分频系数。 - 然后,需要选择系统时钟的分频系数。可以通过设置RCC_CFGR寄存器来配置分频系数,以得到所需的系统时钟频率。 2. 外设时钟配置: - 对于每个外设,都有一个时钟使能寄存器(RCC_APBxENR或RCC_AHBxENR),用于控制外设时钟的使能和禁用。 - 通过设置相应的时钟使能位,可以使能或禁用特定的外设时钟。 下面是一个示例代码,演示了如何配置STM32F103R6时钟: ```c #include "stm32f10x.h" void SystemClock_Config(void) { // 选择系统时钟源为外部时钟源(HSE) RCC->CFGR |= RCC_CFGR_SW_HSE; // 配置外部时钟源的分频系数 RCC->CFGR |= RCC_CFGR_HPRE_DIV1; // AHB时钟不分频 RCC->CFGR |= RCC_CFGR_PPRE1_DIV2; // APB1时钟分频系数为2 RCC->CFGR |= RCC_CFGR_PPRE2_DIV1; // APB2时钟不分频 // 使能外部时钟源(HSE) RCC->CR |= RCC_CR_HSEON; while(!(RCC->CR & RCC_CR_HSERDY)); // 使能外设时钟 RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // 使能TIM2时钟 RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // 使能GPIOA时钟 } int main(void) { // 配置系统时钟 SystemClock_Config(); // 其他代码... return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丰年稻香

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值