程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)

STM32F103系统时钟配置

时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令。时钟系统就是CPU的脉搏,决定CPU速率,像人的心跳一样 只有有了心跳,人才能做其他的事情,而单片机有了时钟,才能够运行执行指令,才能够做其他的处理 (点灯,串口,ADC),时钟的重要性不言而喻。

一、STM32F103时钟介绍

STM32F103本身十分复杂,外设非常多 但我们实际使用的时候只会用到有限的几个外设,使用任何外设都需要时钟才能启动,但并不是所有的外设都需要系统时钟那么高的频率,为了兼容不同速度的设备,有些高速,有些低速,如果都用高速时钟,势必造成浪费 并且,同一个电路,时钟越快功耗越快,同时抗电磁干扰能力也就越弱,所以较为复杂的MCU都是采用多时钟源的方法来解决这些问题。所以便有了STM32F103的时钟系统和时钟树。

1.1 系统时钟

系统时钟(SYSCLK)有多种选择,图中左边的部分就是设置系统时钟使用那个时钟源;

  • HSI振荡器时钟:HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高;
  • HSE振荡器时钟:HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz
  • PLL时钟;其时钟输入源可选择为HSI/2HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz

系统时钟的右边,则是系统时钟通过AHB预分频器,给相对应的外设设置相对应的时钟频率.

从左到右可以简单理解为 各个时钟源--->系统时钟来源的设置--->各个外设时钟的设置。

在我们使用的STM32F103F103开发板中:

  • OSC32_INOSC32_OUT连接了32.768kHz的晶振,用于给RTC提供时钟信号;
  • OSC_INOSC_OUT连接了8MHz的晶振,作为系统时钟的来源。

Keil编写程序是默认的时钟为72Mhz,其实是这么来的:

  • 外部晶振(HSE)提供的8MHz通过PLLXTPRE分频器后;
  • 进入PLLSRC选择开关;
  • 进而通过PLLMUL锁相环进行倍频(x9)后,为系统提供72MHz的系统时钟(SYSCLK);
  • 之后是AHB预分频器对时钟信号进行分频,然后为低速外设提供时钟。

1.2 USB时钟

STM32F103中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源。该时钟源只能从PLL输出端获取(唯一的),可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz72MHz

1.3 时钟输出到外部

STM32F103可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSIHSE、或者系统时钟。可以把时钟信号输出供外部使用。

1.4 外设时钟

系统时钟通过AHB分频器给外设提供时钟,AHB分频器可选择12481664128256512分频。其中AHB分频器输出的时钟送给如下模块使用:

  • SDIO;
  • FSMC;
  • 内核总线:送给AHB总线、核心存、储器和DMA使用的HCLK时钟。;
  • Tick定时器:通过8分频后送给Cortex的系统定时器时钟;
  • 直接送给Cortex的空闲运行时钟FCLK
  • APB1外设:送给APB1分频器。APB1分频器可选择124816分频;
    • 其输出一路供APB1外设使用(PCLK1,最大频率36MHz);
    • 另一路送给通用定时器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2-7使用;
  • APB2外设:送给APB2分频器。APB2分频器可选择124816分频:
    • 其输出一路供APB2外设使用(PCLK2,最大频率72MHz);
    • 另一路送给高级定时器。该倍频器可选择1或者2倍频,时钟输出供定时器1和定时器8使用;
    • 另外APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。ADC分频器可选择为2468分频;
  • 经过2分频送至SDIOAHB

需要注意的是,如果APB预分频器分频系数是1,则定时器时钟频率 (TIMxCLK)PCLKx。否则,定时器时钟频率将为APB域的频率的两倍:TIMxCLK = 2xPCLKx

1.4.1 APB1APB2的对应外设

APB1上面连接的是低速外设,包括电源接口、备份接口、CANUSBI2C1I2C2USART2USART3UART4UART5SPI2SP3等;

APB2上面连接的是高速外设,包括UART1SPI1Timer1ADC1ADC2ADC3、所有的普通I/O口(PA-Pg)、第二功能I/OAFIO)口等。

二、时钟相关寄存器

2.1 时钟控制寄存器(RCC_CR

2.2 时钟配置寄存器(RCC_CFGR

2.3 时钟中断寄存器(RCC_CIR

2.4 APB2外设复位寄存器(RCC_APB2RSTR)

2.5 APB1外设复位寄存器(RCC_APB1RSTR)

2.6 AHB外设使能寄存器(RCC_AHBENR

2.7 APB2外设时钟使能寄存器(RCC_APB2ENR

2.8 APB1外设时钟使能寄存器(RCC_APB1ENR

三、时钟配置源码

3.1 RCC_TypeDeff

RCC寄存器结构RCC_TypeDeff,在文件stm32f10x_map.h中定义如下:

/*------------------------ Reset and Clock Control ---------------------------*/
typedef struct
{
  vu32 CR;	     // 时钟控制寄存器 ;
  vu32 CFGR;	 // 时钟配置寄存器 ;
  vu32 CIR;		 // 时钟中断寄存器 ;
  vu32 APB2RSTR; // APB2外设复位寄存器 ;
  vu32 APB1RSTR; // APB1外设复位寄存器 ;
  vu32 AHBENR;	 // AHB外设时钟使能寄存器 ;
  vu32 APB2ENR;	 // APB2外设时钟使能寄存器 ;
  vu32 APB1ENR;	 // APB1外设时钟使能寄存器 ;
  vu32 BDCR;	 // 备份域控制寄存器 ;
  vu32 CSR;		 // 控制/状态寄存器 ;
} RCC_TypeDef;

#define RCC_BASE              (AHBPERIPH_BASE + 0x1000)

#ifdef _RCC
  #define RCC                 ((RCC_TypeDef *) RCC_BASE)
#endif /*_RCC */

在第二节中我们已经对RCC_TypeDef结构体中定义的大部分结构体进行了详细的介绍,那么我们如何编码去初始化这些寄存器呢?

亲爱的读者和支持者们,自动博客加入了打赏功能,陆陆续续收到了各位老铁的打赏。在此,我想由衷地感谢每一位对我们博客的支持和打赏。你们的慷慨与支持,是我们前行的动力与源泉。

日期姓名金额
2023-09-06*源19
2023-09-11*朝科88
2023-09-21*号5
2023-09-16*真60
2023-10-26*通9.9
2023-11-04*慎0.66
2023-11-24*恩0.01
2023-12-30I*B1
2024-01-28*兴20
2024-02-01QYing20
2024-02-11*督6
2024-02-18一*x1
2024-02-20c*l18.88
2024-01-01*I5
2024-04-08*程150
2024-04-18*超20
2024-04-26.*V30
2024-05-08D*W5
2024-05-29*辉20
2024-05-30*雄10
2024-06-08*:10
2024-06-23小狮子666
2024-06-28*s6.66
2024-06-29*炼1
2024-06-30*!1
2024-07-08*方20
2024-07-18A*16.66
2024-07-31*北12
2024-08-13*基1
2024-08-23n*s2
2024-09-02*源50
2024-09-04*J2
2024-09-06*强8.8
2024-09-09*波1
2024-09-10*口1
2024-09-10*波1
2024-09-12*波10
2024-09-18*明1.68
2024-09-26B*h10
2024-09-3010
2024-10-02M*i1
2024-10-14*朋10
2024-10-22*海10
2024-10-23*南10
2024-10-26*节6.66
2024-10-27*o5
2024-10-28W*F6.66
2024-10-29R*n6.66
2024-11-02*球6
2024-11-021*鑫6.66
2024-11-25*沙5
2024-11-29C*n2.88
posted @   大奥特曼打小怪兽  阅读(407)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
如果有任何技术小问题,欢迎大家交流沟通,共同进步

公告 & 打赏

>>

欢迎打赏支持我 ^_^

最新公告

程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)。

了解更多

点击右上角即可分享
微信分享提示