STM32F407-RCC配置 联系客服

发布时间 : 星期日 文章STM32F407-RCC配置更新完毕开始阅读3c11ec1925c52cc58bd6bed8

RCC (Reset and Clock Control)配置

这里介绍RCC 的 时钟控制功能

在STM32F103上,由于小组所有的板子都使用用 同样的芯片,同样的晶振,以及同样的库函数,即使我们不去理解RCC,仍然可以将大多数功能调试出来。但如果使用不同型号的芯片,例如用STM32F407 与 STM32103 进行通信,如果不去弄清楚RCC,在调试中可能会遇到麻烦。

下面就我调试STM32F407的这段时间,介绍一下RCC的部分功能。文档的前半部分是关于RCC的部分功能描述,后半部分是关于库函数的使用。

时钟结构

(原图请参考STM32F407 参考手册RCC部分)

STM32F407最高层是SYSCLK系统时钟,由其生成了 AHB时钟,再由AHB时钟生成APB时钟。

SYSCLK系统时钟可以由3个基本的时钟源获得:HSE(外部高速晶振)或HSI(内部高速晶振)或PLL锁相环倍频。

例如:

板子上焊了8MHz的晶振,则 HSE = 8MHz。如果焊了25MHz的,则HSE = 25MHz。 HSI是芯片内部自带的晶振,其大小由芯片型号决定,如STM32F407的HSI是16MHz。

PLL倍频的功能是:将HSE或HSI的频率放大,最大可以放大到168MHz.

SYSCLK系统时钟可以由HSE/HSI/PLL提供。

例如使用库函数:

RCC_SYSCLKConfig( RCC_SYSCLKSource_HSE ); 代表用 HSE外部高速晶振作为系统时钟源。

如果HSE =8MHz,则SYSCLK = 8M,即STM32F407就会运行在8M的速度; 如果HSE=25M,则SYSCLK = 25M,即STM32F407就会运行在25M。

RCC_SYSCLKConfig( RCC_SYSCLKSource_HSI ); 代表用 HSI内部高速晶振作为系统时钟源,

如果HSI=16M,则SYSCLK=16M,即STM32F407 就会运行在16M的速度。

RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK );代表用PLL时钟作为系统时钟源。

如果配置PLL倍频至168M,则SYSCLK=168M,即STM32F407 会运行在168M; 如果倍频至144M,则SYSCLK=144M,STM32F407就会运行在144M; 如果倍频至72M,STM32F407也会像STM32F103运行在72M;

从SYSCLK,紧接着分得AHB时钟(也叫HCLK)。

假设此时我们已经选择PLL作为系统时钟源,且PLL倍频至168M,即SYSCLK=168M。

那么AHB的最高频率就为168MHz。

方框底部的数字 /1,2...512 代表AHB时钟预分频数,范围1~512, 如果是 1, 即HCLK为SYSCLK的1分频, HCLK = SYSCLK/1 = 168/1 = 168 MHz 如果是 2,即HCLK为SYSCLK的2分频,HCLK = SYSCLK/2 = 168/2 = 84MHz

注意,HCLK是受SYSCLK约束的,

如果我们配置SYSCLK = 144M,那么此时HCLK最大只能达到 144MHz。

将AHB时钟继续分割,得到的是APB时钟(也叫PCLK)。

假设在此之前,SYSCLK=168M,SYSCLK 2分频得 HCLK = 84M。(HCLK代表AHB时钟)

与前面AHB时钟类似,方框底部的数字代表预分频数,范围1~16. 如果是1,即PCLK(APB时钟)为HCLK的1分频, PCLK = HCLK/1 = 84/1 = 84MHz 如果是2,即PCLK为HCLK的2分频, PCLK = HCLK/2= 84/2 = 42MHz。

APB时钟可以继续分给APB总线上的外设,如果继续配置外设的预分频,可以进一步修改外设的时钟频率。

例如:

配置CAN总线。

第一步:利用PLL,我们配置 系统时钟 SYSCLK = 168MHz。 第二步:此时已有SYSCLK=168MHz。

设置AHB分频数为2,即得:HCLK = SYSCLK/2 = 84MHz。

第三步:此时已有HCLK = 84MHz。

设置APB分频数为 2,即得:PCLK = HCLK/2 = 42MHz。

第四步:此时已有 PCLK = 42MHz。

设置 CanInitStruct.CAN_Prescaler = 7 ,即得 CAN时钟 = PCLK/7 = 6MHz。

这样,正确配置了CAN的时钟,配置CAN时才能计算出实际的波特率,从而实现通