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 内核里 ...
随机推荐
- 菜鸟系列Fabric——Fabric 1.4共识机制(5)
fabric 共识机制 由于fabric是分布式的系统,因此需要共识机制来保障各个节点以相同的顺序状态保存账本,达成一致性. 在当前fabric1.4版本中,存在三种共识机制,分别是solo,kafk ...
- excel经典图表
柱形图: 点击图表,选择数据,添加列 选择展示的列区域数据,编辑水平分类轴,选择按年份统计 效果图: 更改图表类型: 折线图或面积图: 饼图或圆环图: 散点图或气泡图: 组合图: 更改原有图表为组合图 ...
- react正常显示html代码、dangerousSetInnerHTML 笔记
const html =`<h1>今天天色很好</h1>` <div dangerouslySetInnerHTML={{__html:html}}></di ...
- docker数据卷学习-利用数据卷实现mysql的快速恢复和迁移
docker数据卷学习 一 新建带有数据卷的容器 1.从docker hub下载centos7镜像 # docker pull centos 2. 创建container # docker run - ...
- assign()-JS
------------恢复内容开始------------ 现需要在js中,使用一个新的对象的值覆盖旧有对象,js中有一个方法: Object.assign(target,…sources) 当ta ...
- python_0基础开始_day04
第四节 一.列表 list 数据类型之一,存储大量的,不同类型的数据 列表中只要用逗号隔开的就是一个元素 有序可变的. 1.1列表的索引 列表和字符串一样也拥有索引,但是列表可以修改: lst = [ ...
- SpringBoot 的启动banner生成网址
1.http://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20 2.http://www. ...
- Linux 测试IP和端口是否能访问
一. 使用wget判断 wget是linux下的下载工具,需要先安装. 用法: wget ip:port 连接存在的端口 转自:https://blog.csdn.net/weixin_3768923 ...
- 第一个SpringMVC的注解应用
由于默认的配置文件中支持了注解,所以可以直接编写注解的Controller 将ItcastController加入到SpringMVC容器中: 配置Controller的扫描包
- 转:spring中InitailizingBean接口的简单理解
转自:https://www.cnblogs.com/wxgblogs/p/6849782.html spring中InitializingBean接口使用理解 InitializingBean接 ...