STM32的系统时钟设置SystemClock_Config()探究
一、首先了解几个硬件名词:
stm32有多种时钟源,为HSE、HSI、LSE、LSI、PLL,对于L系统的,还有一个专门的MSI
1、HSE是高速外部时钟,一般8M的晶振,精度比较高,比较稳定。
2、HSI是高速内部时钟,RC振荡器,频率为8MHz。精度略差。
3、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。一般为RTC使用。
4、LSI是低速内部时钟,RC振荡器,频率为40kHz。
5、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。
6、MSI是L系列独有的,它是一个产生于内部的可选择的时钟源,能提供12种不同频率:100 kHz, 200 kHz, 400 kHz, 800 kHz, 1 MHz, 2 MHz, 4 MHz (default value), 8 MHz, 16 MHz, 24 MHz, 32 MHz and 48 MHz。可以直接选择为系统主系统时钟,也可以作为PLL源,经倍频后选择作为系统的主系统时钟。为低功耗提供更多的选择。其相当于代替了HSI了。
stm32有多个总线,主要有AHB和APB总线
AHB是高速总线,是一种系统总线,它主要负责连接处理器、DMA等一些内部接口。AHB 系统由主模块、从模块和基础结构3部分组成,整个AHB总线上的传输都由主模块发出,由从模块负责回应。
APB是低速总线,它主要负责连接外围设备,它又分为APB1和APB2,它的总线架构不像 AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。APB桥就是连接AHB和APB中间的玩意。
APB1最大时钟频率为36MHz
APB2最大时钟频率为72MHz
二、其次了解三个结构体:
stm32的HAL库,在系统时钟设置的结构有,RCC_OscInitTypeDef和RCC_ClkInitTypeDef、RCC_PLLInitTypeDef三个。
1、RCC_OscInitTypeDef为设置系统各时钟的来源
typedef struct
{
uint32_t OscillatorType; //选定将被配置的振荡器
uint32_t HSEState; //HSE状态
uint32_t LSEState; //LSE状态
uint32_t HSIState; //HSI状态
uint32_t HSICalibrationValue; //HSI校准调整值
uint32_t LSIState; //LSI状态
RCC_PLLInitTypeDef PLL; //PLL结构体参数
} RCC_OscInitTypeDef;
2、RCC_ClkInitTypeDef哦设置AHB和APB总线时钟配置

typedef struct
{
uint32_t ClockType; //选定将被配置的时钟
uint32_t SYSCLKSource; //用作系统时钟的时钟源选择
uint32_t AHBCLKDivider; //AHB时钟(HCLK)分频器,该时钟由SYSCLK而来
uint32_t APB1CLKDivider; //APB1时钟(PCLK1)分频器,该时钟由HCLK而来
uint32_t APB2CLKDivider; //APB2时钟(PCLK2)分频器,该时钟由HCLK而来
} RCC_ClkInitTypeDef;
3、RCC_PLLInitTypeDef设置PLL的相关参数
typedef struct
{
uint32_t PLLState; //PLL状态
uint32_t PLLSource;//PLL输入时钟
uint32_t PLLM; //PLL
uint32_t PLLN;
uint32_t PLLP;
uint32_t PLLQ;
}RCC_PLLInitTypeDef;

STM32的系统时钟设置SystemClock_Config()探究的更多相关文章
- STM32之系统时钟
转载:http://www.openedv.com/posts/list/302.htm 时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是必要的,有助于深入理解STM32. ...
- STM32查看系统时钟
调用库函数RCC_GetClocksFreq,该函数可以返回片上的各种时钟的频率 函数原形 void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clock ...
- STM32 ~ 查看系统时钟
调用库函数RCC_GetClocksFreq,该函数可以返回片上的各种时钟的频率 函数原形 void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks) ...
- STM32系统时钟
一.时钟树 STM32有4个时钟源: 1)HSE(高速外部时钟源) 外部晶振作为时钟源,范围为4~16MHz,常取为8MHz 2)HSI(高速内部时钟源) 由内部RC振荡器产生,频率为8MHz,但不稳 ...
- STM32系统时钟为什么没有定义呢
对于使用3.5版本库开发的STM32学习者 有时候不清楚为什么没有时钟定义 那么我们就简单的讲解下吧: 1,函数从启动文件开始运行(汇编文件) 2,若是hd.s 请看151行LDR R0, = ...
- STM32内部时钟设置-寄存器版
STM32寄存器版本——内部时钟设置 同时要记得把延时初始化函数设置好 //系统时钟初始化函数 //pll:选择的倍频数,从2开始,最大值为16 //pll:选择的倍频数,这里使用内部时钟,PLL为4 ...
- STM32入门系列-STM32时钟系统,自定义系统时钟
在时钟树的讲解中我们知道,通过修改PLLMUL中的倍系数值(2-16)可以改变系统的时钟频率.在库函数中也有对时钟倍频因子配置的函数,如下: void RCC_PLLConfig(uint32_t R ...
- MSP430主系统时钟以及430的低功耗设置
如何将系统时钟设置到外部高频晶体振荡器,430的MCLK默认的是DCO的,如何安全的从DCO切换到外部晶体振荡器,这是一个很重要的步骤,因为经过此步骤,可以极大地提高430的处理能力,DCO在内部,可 ...
- 基于Systick系统时钟延时的LED闪烁灯
1.回顾我们的51 单片机编程,当我们需要做系统延迟的时候,最常采用的一种方式就是使用for 循环的空语句等待来实现. 当然,在STM32 里面也可以这么实现.但是在STM32 的Cortex 内核里 ...
随机推荐
- luoguP1352没有上司的舞会(树形DP)
题目链接:https://www.luogu.org/problemnew/show/P1352 题意:给定n个结点,每个结点有一个权值,给n-1条边,n个结点构成一棵树.并且规定一个结点的父结点如果 ...
- Random Pick with Weight
Given an array w of positive integers, where w[i] describes the weight of index i, write a function ...
- 在.Net中使用RedLock实现分布式锁
⒈简介 RedLock 分布式锁算法由 Redis 的作者提出,大部分语言都有对应的实现,查看,RedLock.net 是 RedLock 分布式锁算法的 .NET 版实现,用来解决分布式下的并发问题 ...
- xargs、chattr命令
一.xargs:将标准输入转化成命令行参数 用法:xargs [OPTION] ... COMMAND INITIAL-ARGS ...使用参数INITIAL-ARGS运行COMMAND,并从输入中读 ...
- spark教程(12)-生态与原理
spark 是目前非常流行的大数据计算框架. spark 生态 Spark core:包含 spark 的基本功能,定义了 RDD 的 API,其他 spark 库都基于 RDD 和 spark co ...
- cSpring Boot整合RabbitMQ详细教程
来自:https://blog.csdn.net/qq_38455201/article/details/80308771 十分详细,几张图片不显示,看这个地址 1.首先我们简单了解一下消息中间件的应 ...
- Spring配置redis及使用
一.redis简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用. ...
- 分布式---Raft算法
6.Raft Raft也是分布式一致性协议,主要是用来竞选主节点. 单个Candidate的竞选 有三种节点:Follower,Candidate和Leader.Leader会周期性的发送心跳 ...
- 剑指offer-和为S的两个数字-知识迁移能力-python
题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 思路 ...
- Git复习(九)之理解git工作区和暂存区
前言 Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 版本库 在工作区目录中有一个.git文件,这个其实不是工作区而是Git的版本库 版本库中包含两个部分,一个是暂存区index/ ...