STM32 RCC-使用HSE/HSI配置时钟(以STM32MUX时钟树作为图例)

参考资料来源于《野火STM32 HAL库开发实战指南》,芯片为STM32F407IGTb骄阳开发板,删减了部分用得比较少的知识点,搭配上STM32MUX的图形化展示,更有利于理解系统时钟。

1.系统时钟

1.1 HSE高速外部时钟信号

HSE 是高速的外部时钟信号,可以由有源晶振或者无源晶振提供,频率从 4-26MHZ 不等。当使用有源晶振时,时钟从 OSC_IN 引脚进入,OSC_OUT 引脚悬空,当选用无源晶振时,时钟从OSC_IN 和 OSC_OUT 进入,并且要配谐振电容。

HSE 我们使用 25M 的无源晶振。如果我们使用 HSE 或者 HSE 经过 PLL 倍频之后的时钟作为系统时钟 SYSCLK,当 HSE 故障时候,不仅 HSE 会被关闭,PLL 也会被关闭,此时高速的内部时钟时钟信号 HSI 会作为备用的系统时钟,直到 HSE 恢复正常,HSI=16M。

1.2 锁相环PLL

PLL 的主要作用是对时钟进行倍频,然后把时钟输出到各个功能部件。PLL 有两个,一个是主PLL,另外一个是专用的 PLLI2S,他们均由 HSE 或者 HSI 提供时钟输入信号。
在这里插入图片描述
专用的 PLLI2S用于生成精确时钟,给 I2S 提供时钟,就是图中下面那条线。HSE经过 PLL 时钟输入分频因子 M(2~63)分频后,成为 VCO 的时钟输入,VCO 的时钟必须在 1~2M 之间,我们选择 HSE=25M 作为 PLL 的时钟输入,M 设置为 25,那么 VCO输入时钟就等于 1M。VCO 输入时钟经过 VCO 倍频因子 N 倍频之后,成为 VCO 时钟输出,VCO 时钟必须在 192~432M之间。我们配置 N 为 336,则 VCO 的输出时钟等于 336M。

VCO 输出时钟之后有三个分频因子:PLLCLK 分频因子 p,USB OTG FS/RNG/SDIO 时钟分频因子 Q。p 可以取值 2、4、6、8, 我们配置为 2,则得到 PLLCLK=168M,也就是STSCLK系统时钟。

PLL的时钟配置过程,整理成公式表达:
VCOCLK_IN = PLLCLK_IN / M = HSE / 25 = 1M
VCOCLK_OUT = VCOCLK_IN * N = 1M * 336 = 336M
PLLCLK_OUT=VCOCLK_OUT/P=336/2=168M

1.3系统时钟SYSCLK

系统时钟来源可以是:HSI、PLLCLK、HSE,具体的由时钟配置寄存器 RCC_CFGR 的 SW 位配置。我们这里设置系统时钟:SYSCLK = PLLCLK = 168M。如果系统时钟是由 HSE 经过 PLL倍频之后的 PLLCLK 得到,当 HSE 出现故障的时候,系统时钟会切换为 HSI=16M,直到 HSE恢复正常为止。

1.4 AHB总线时钟HCLK

AHB,是Advanced High performance Bus的缩写,译作高级高性能总线,这是一种“系统总线”。

AHB主要用于高性能模块(如CPU、DMA和DSP等)之间的连接。AHB 系统由主模块、从模块和基础结构(Infrastructure)3部分组成,整个AHB总线上的传输都由主模块发出,由从模块负责回应。

系统时钟 SYSCLK 经过 AHB 预分频器分频之后得到时钟叫 AHB 总线时钟,即 HCLK,分频因子可以是:[1,2,4,8,16,64,128,256,512],具体的由时钟配置寄存器 RCC_CFGR 的 HPRE位设置。片上大部分外设的时钟都是经过 HCLK 分频得到,至于 AHB 总线上的外设的时钟设置为多少,得等到我们使用该外设的时候才设置,我们这里只需粗线条的设置好 APB 的时钟即可。我们这里设置为 1 分频,即 HCLK=SYSCLK=168M。
在这里插入图片描述

1.5 APB总线时钟

APB,是Advanced Peripheral Bus的缩写,这是一种外围总线。

APB主要用于低带宽的周边外设之间的连接,例如UART、1284等,它的总线架构不像 AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。再往下,APB2负责AD,I/O,高级TIM,串口1;APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM。

1.5.1 APB2 总线时钟PCLK2

APB2 总线时钟 PCLK2 由 HCLK 经过高速 APB2 预分频器得到,分频因子可以是:[1,2,4,8,16],具体由时钟配置寄存器 RCC_CFGR 的 PPRE2 位设置。HCLK2 属于高速的总线时钟,片上高速的外设就挂载到这条总线上,比如全部的 GPIO、USART1、SPI1 等。至于 APB2 总线上的外设的时钟设置为多少,得等到我们使用该外设的时候才设置,我们这里只需粗线条的设置好APB2 的时钟即可。我们这里设置为 2 分频,即 PCLK2 = HCLK /2= 84M。
在这里插入图片描述

1.5.2 APB1总线时钟PCLK1

APB1 总线时钟 PCLK1 由 HCLK 经过低速 APB 预分频器得到,分频因子可以是:[1,2,4,8,16],具体由时钟配置寄存器 RCC_CFGR 的 PPRE1 位设置。HCLK1 属于低速的总线时钟,最高为42M,片上低速的外设就挂载到这条总线上,比如 USART2/3/4/5、SPI2/3,I2C1/2 等。至于APB1 总线上的外设的时钟设置为多少,得等到我们使用该外设的时候才设置,我们这里只需粗线条的设置好 APB1 的时钟即可。我们这里设置为 4 分频,即 PCLK1 = HCLK/4 = 42M。
在这里插入图片描述
在这里插入图片描述

1.6总结

下图就是我们经常与之打交道的一条路线,大多数外设的时钟都是由PCK1或者PCK2来提供,所以在学习单片机的过程中掌握这一条路线是必要的。
在这里插入图片描述

2.其他时钟

2.1 独立看门狗时钟

独立看门狗时钟由内部的低速时钟 LSI 提供,大小为 32KHZ。
在这里插入图片描述

2.2 I2S时钟

I2S 时钟可由外部的时钟引脚 I2S_CKIN 输入,也可由专用的PLLI2SCLK 提供,具体的由 RCC时钟配置寄存器 ( RCC_CFGR) 的 I2SSCR 位配置。我们在使用 I2S 外设驱动 W8978 的时候,使用的时钟是 PLLI2SCLK,这样就可以省掉一个有源晶振。
在这里插入图片描述

2.3 RTC 时钟

RTCCLK 时钟源可以是 HSE 1 MHz(HSE 由一个可编程的预分频器分频)、LSE 或者 LSI 时钟。选择方式是编程 RCC 备份域控制寄存器 (RCC_BDCR) 中的 RTCSEL[1:0] 位和 RCC 时钟配置寄存器(RCC_CFGR) 中的 RTCPRE[4:0] 位。所做的选择只能通过复位备份域的方式修改。我们通常的做法是由 LSE 给 RTC 提供时钟,大小为 32.768KHZ。LSE 由外接的晶体谐振器产生,所配的谐振电容精度要求高,不然很容易不起震。
在这里插入图片描述

2.4 PHY 以太网时钟

F407 要想实现以太网功能,除了有本身内置的 MAC 之外,还需要外接一个 PHY 芯片,常见的PHY 芯片有 DP83848 和 LAN8720,其中 DP83848 支持 MII 和 RMII 接口,LAN8720 只支持RMII 接口。野火 F407 开发板用的是 RMII 接口,选择的 PHY 芯片是 LAB8720。使用 RMII 接口的好处是使用的 IO 减少了一半,速度还是跟 MII 接口一样。当使用 RMII 接口时,PHY 芯片只需输出一路时钟给 MCU 即可,如果是 MII 接口,PHY 芯片则需要提供两路时钟给 MCU。
在这里插入图片描述

2.5 USB PHY时钟

F407 的 USB 没有集成 PHY,要想实现 USB 高速传输的话,必须外置 USB PHY 芯片,常用的芯片是 USB3300。当外接 USB PHY 芯片时,PHY 芯片需要给 MCU 提供一个时钟。

外扩 USB3300 会占用非常多的 IO,跟 SDRAM 和 RGB888 的 IO 会复用的很厉害,鉴于 USB高速传输用的比较少,野火 F407 骄阳就没有外扩这个芯片。

2.6 MCO 时钟输出

MCO 是 microcontroller clock output 的缩写,是微控制器时钟输出引脚,主要作用是可以对外提供时钟,相当于一个有源晶振。F407 中有两个 MCO,由 PA8/PC9 复用所得。MCO1 所需的时钟源通过 RCC 时钟配置寄存器 (RCC_CFGR) 中的 MCO1PRE[2:0] 和 MCO1[1:0] 位选择。MCO2 所需的时钟源通过 RCC 时钟配置寄存器 (RCC_CFGR) 中的 MCO2PRE[2:0] 和 MCO2位选择。有关 MCO 的 IO、时钟选择和输出速率的具体信息如下表所示:
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值