基于正点原子stm32mini板的时钟系统的学习

本篇文章将详细讲述时钟系统的相关知识。小白总结,如有错误,请大神指教。

任何一个外设在使用之前,必须首先使能其相应的时钟。所以学会时钟系统知识显得尤为重要。

一、时钟系统框图

(1)时钟源:HSI RC,HSE OSC,LSE OSC,LSI RC,PLL。

(2)三种不同的时钟源可被用来驱动系统时钟(SYSCLK):HSI振荡器时钟 , HSE振荡器时钟 ,PLL时钟。

(3)HSE主要通过外部晶振来开启频率,频率范围约是4MHz---16MHz在这个模式里,必须提供外部时钟。它的频率最高可达50MHz。外部时钟信号(50%占空比的方波、正弦波或三角波)必须连到SOC_IN引脚,同时保证OSC_OUT引脚悬空。3~25Mz外部振荡器可为系统提供非常精确的主时钟。

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

(5)PLL:锁相环内部输出。主PLL以下述时钟源之一为输入,产生倍频的输出:HSI时钟除以2 ,HSE或通过一个可配置分频器的PLL2时钟。当改变主PLL的输入时钟源时,必须在选中了新的时钟源(通过时钟配置寄存器(RCC_CFGR)的PLLSRC位)之后才能关闭原来的时钟源。 如果使能了时钟中断寄存器(RCC_CIR),可以在PLL就绪时产生一个中断。

(6)LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能提供一个低功耗且精确的时钟源。LSE晶体通过在备份域控制寄存器(RCC_BDCR)里的LSEON位启动和关闭。 

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

(8)系统时钟(SYSCLK):系统复位后,HSI振荡器被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,它将不能被停止。 只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时钟源的切换才会发生。在被选择时钟源没有就绪时,系统时钟的切换不会发生。直至目标时钟源就绪,才发生切换。

(9)时钟安全系统(CSS) :时钟安全系统可以通过软件被激活。一旦其被激活,时钟监测器将在HSE振荡器启动延迟后被使能,并在HSE时钟关闭后关闭。

(10)几个重要的时钟:SYSCLK(系统时钟),AHB总线时钟,APB1总线时钟(低速)(速度最高36MHz),APB2总线时钟(高速)(速度最高72MHz),PLL时钟。

二、RCC相关配置寄存器

typedef struct
{
    ____IO uint32_t CR;  //HSI,HSE,CSS,PLL等的使能和就绪标志位
    ____IO uint32_t CFGR;//PLL等的时钟源选择,分频系数设定
    ____IO uint32_t CIR; //清除/使能时钟就绪中断
    ____IO uint32_t APB2RSTR; //APB2线上外设复位寄存器
    ____IO uint32_t APB1RSTR; //APB1线上外设复位寄存器
    ____IO uint32_t AHBENR;   //DMA,SDIO等时钟使能
    ____IO uint32_t APB2ENR;  //APB2线上外设时钟使能
    ____IO uint32_t APB1ENR;  //APB1线上外设时钟使能
    ____IO uint32_t BDCR;     //备份域控制寄存器
    ____IO uint32_t CSR;      //控制状态寄存器
}RCC__TypeDef;

三、RCC相关头文件和固件库源文件

1.时钟使能配置:

RCC_LSEConfig();
RCC_HSEConfig();
RCC_HSICmd();
RCC_LSICmd();
RCC_PLLCmd();

2.时钟源相关配置:

RCC_PLLConfig();
RCC_SYSCLKConfig();
RCC_RTCCLKConfig();

3.分频系数选择配置:

RCC_HCLKConfig();
RCC_PCLK1Config();
RCC_PCLK2Config();

4.外设时钟使能:

RCC_APB1PeriphClockCmd();
RCC_APB2PeriphClockCmd();
RCC_AHBPeriphClockCmd();

5.其他外设时钟配置:

RCC_ADCCLKConfig();
RCC_RTCCLKConfig();

6.状态参数获取参数:

RCC_GetClocksFreq();
RCC_GetSYSCLKSource();
RCC_GetFlagStatus();

7.RCC中断相关函数:

RCC_ITConfig();
RCC_GetITStatus();
RCC_ClearITPendingBit();

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FPGAI

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

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

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

打赏作者

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

抵扣说明:

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

余额充值