STM32学习笔记:时钟系统

STM32学习笔记:时钟系统

一.时钟系统5个时钟源

HSI高速内部时钟

HSE高速外部时钟

LSI低速内部时钟

LSE低速外部时钟

PLL锁相环时钟

二.主系统时钟介绍

1.HSE(High Speed External Clock signal)时钟

高速的外部时钟

产生:无源晶振加两个电容辅助起振(4~16M),一般选用8M

作用:一般选用都是HSE

控制位:由RCC_CR(时钟控制寄存器)的 位16(HSEON)控制

2.HSI(High Speed Internal Clock signal)时钟

高速的内部时钟

产生:芯片内部(8M)

作用:当HSE故障时,系统时钟会自动切换到HSI,直至HSE启动成功

控制位:由RCC_CR(时钟控制寄存器)的 位0(HSION)控制

3.PLLCLK时钟

锁相环时钟

产生:HSI/2、HSE经过倍频所得,可以选择2~16倍频

控制位:由RCC_CFGR(时钟配置寄存器)的PLLXTPRE和PLLMUL控制

4.SYSCLK时钟

系统时钟

产生:HSE.HSI.PLLCLK

控制位:由RCC_CFGR(时钟配置寄存器)的SW控制

注意:一般配置SYSCLK = PLLCLK = 72M

5.HCLK时钟

AHB(advanced high-performance bus)高速总线时钟

产生:SYSCLK分频得到的

作用:为AHB总线的外设提供时钟,为Cortex系统定时器提供时钟(SysTick),为内核提供时钟(FCLK)

控制位:由RCC_CFGR(时钟配置寄存器)的HPRE控制

注意:一般配置HCLK = SYSCLK = 72M

6.PCLK1时钟

APB1低速总线时钟

产生:HCLK分频得到的

作用:为APB1总线的外设提供时钟,2倍频后为APB1总线定时器2~7提供时钟

控制位:由RCC_CFGR(时钟配置寄存器)的PPRE1控制

注意:一般配置PCLK1 = HCLK/2 = 36M

6.PCLK2时钟

APB2低速总线时钟

产生:HCLK分频得到的

作用:为APB2总线的外设提供时钟,为APB2总线定时器1和8提供时钟

控制位:由RCC_CFGR(时钟配置寄存器)的PPRE2控制

注意:一般配置PCLK2 = HCLK = 72M

7.RTC时钟

产生:HSE分频、LSE(外部低速时钟)、LSI(内部低速时钟)

作用:为芯片内部的RTC外设提供时钟

控制位:由RCC_BDCR(RCC备份域控制寄存器)的RTCSEL控制

8.IWDGCLK时钟

独立看门狗时钟

产生:由LSI提供

三.72M系统时钟配置过程

在这里插入图片描述

由8M HSE时钟开始,经过PREDIV1SCR选择,进入PREDIV1进行预分频在这里选择1分频,此时 8/1=8M,再经过PLLSCR选择,进入PLLMUL进行倍频在这里选择9倍频,此时 8*9=72M,输出形成PLLCLK(锁相环时钟),在SW选择PLLCLK,所以SYSCLK=PLLCLK=72M.

void SetSysClockTo72M(void) //非官方系统时钟初始化函数
{
    ErrorStatus HSEStatus;
    /*把RCC寄存器复位*/
    RCC_DEInit();
    /*使能HSE*/
    RCC_HSEConfig(RCC_HSE_ON);
    /*等待HSE启动*/
    HSEStatus = RCC_waitForHSEStartUp();
    if(HSEStatus == SUCCESS)
    {
        /*使能预取指*/ 
        FLASH_PrefetchBUfferCmd(FLASH_PrefetchBUffer_Enable); //预取指缓存使能
        FLASH_SetLatency(FLASH_Latency_2); //预取指2个延时周期
        /*配置其他时钟*/
        RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB的时钟HCLK,由SYSCLK 1分频得到
        RCC_PCLK1Config(RCC_HCLK_Div2); //设置APB1的时钟PCLK1,由HCLK 2分频得到
        RCC_PCLK2Config(RCC_HCLK_Div1); //设置APB2的时钟PCLK2,由HCLK 1分频得到
        /*配置 PLLCLK = HSE *RCC_PLLMul_9R*/
        RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//这里RCC_PLLMul_x的x的取值为2~16
        /*使能PLL*/
        RCC_PLLCmd(ENABLE);
        /*等待PLL稳定*/
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
        /*选择系统时钟*/
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
        /*等待系统时钟稳定*/
        while(RCC_GetSYSCLKSource != 0x08);
    }
    else
    {
        /*启动失败,用户自行添加处理代码*/
    }
}

四.xM系统时钟配置过程

只需将上述的72M系统时钟配置过程的

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

换成

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_x); //x的取值为2~16

统时钟配置过程的

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

换成

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_x); //x的取值为2~16

即可

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ninehuang333

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

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

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

打赏作者

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

抵扣说明:

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

余额充值