STM32F103系统时钟配置

news/2024/11/19 23:05:47/文章来源:https://www.cnblogs.com/zyly/p/18555798

时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令。时钟系统就是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_CR

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结构体中定义的大部分结构体进行了详细的介绍,那么我们如何编码去初始化这些寄存器呢?

3.2 RCC初始化

这里我们采用HSE作为系统时钟输出,正常使用的时候也都是使用外部时钟。其初始化流程如下:

(1)

参考文章

[1] STM32F103时钟系统讲解

[2] Mini2440裸机开发之系统时钟配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/837049.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20222318 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 1.1 实验要求 掌握Metasploit的使用方法:“Search——Use——Show——Set——Exploit/run”。 1.2 实验任务 (1)前期渗透 (2)Vsftpd源码包后门漏洞(21端口) (3)SambaMS-RPC Shell命令注入漏洞(端口139) (4)Java RMI SERVER命令执行漏洞(1099端口) (…

atrace带ftrace数据如何转换成ftrace内容

第一种方法使用这个转换成ftrace数据 第二种方法 是的,systrace --from-file 是一种方便的方法,用于处理已经生成的 trace 文件(比如 systrace.html 或其他格式),包括提取或转换数据。以下是如何使用 systrace --from-file 来尝试转换为 ftrace 的详细方法。1. 什么是 sys…

10.7

Java有try-catch-finally的异常处理机制,包括以下几种情况:1、不抛出异常,try里面的代码、finally里面的代码、finally以后的代码都将正常执行,而catch里面的代码不会执行。2、抛出异常且被catch捕获,try里面的代码部分执行,catch里面的代码、finally里面的代码、finally…

排错:New-Object : 找不到类型 [Microsoft.Online.Administration.StrongAuthenticationRequirement]

前言今天,真的是被PowerShell坑的不要不要的!故事就不分享了,大家看看这个错误和解决方法吧。正文错误信息New-Object : 找不到类型 [Microsoft.Online.Administration.StrongAuthenticationRequirement]: 请确认加载了包含该类型的程序 集。 所在位置 行:1 字符: 8 + $SAR …

Github快速搭建个人/组织网站

最近课题组要建网站,记录一下速通流程。follow本流程你可以快速获得一个个人或组织的网站首页,部署在github的服务器上,完全免费。 预备工具 ke xue上网,从而登github 本地安装git 步骤 1 在自己的github账户建立空repo,必须命名为USRNAME.github.io (USRNAME是你的githu…

类和对象案例

第一道1.先写一个手机类,将属性和行为全部写完2,再写一个手机测试类,将其成员变量赋值 并不是只有测试类才能写main,其他类也可以有main,只不过代码会很臃肿,测试就用测试,不要把main写在其他类里总览第二道1.先写一个书类2.再写一个书测试类,将其成员变量赋值总览提供…

学习笔记(三十九):默认界面扫码

基本概念 默认界面扫码能力提供系统级体验一致的扫码界面,Scan Kit对系统相机权限进行了预授权,调用接口时,无需开发者再次申请相机权限。 适用于不同扫码场景的应用开发 场景介绍 默认界面扫码能力提供了系统级体验一致的扫码界面以及相册扫码入口,支持单码和多码识别,支…

网卡-国家码

交互大屏、笔记本等产品出口海外,也是网络相关设备,会发出AP热点网络,所以出口海外要符合当地法规。 大屏需要以自带网卡开出本地热点,用于投屏、设备间协同等操作。热点这块受限影响的是信道,每个国家都有雷达信道以及其它军事等受限信道,使用信道时避开这些雷达信道。…

人工智能之机器学习基础——K-Means

K-Means 是一种无监督学习算法,用于将数据划分为 KKK 个簇(Clusters),使得每个簇中的样本尽可能接近其簇中心,簇之间尽可能远离。K-Means 常用于聚类分析,例如客户分群、图像分割等任务。