STM32标准库时钟树设置
STM32的系统时钟大致可以分为以下流程
1.外部晶振提供HSE高速外部时钟信号
2.HSE经过PLL锁相环,倍频后得到PLL_CLK高速内部时钟信号
3.PLL_CLK经过分频后得到系统时钟SYSCLK
4.SYSCLK经过分频后得到APB1和APB2的时钟信号
如下图所示:

标准库代码如下(需要引用头文件“stm32f10x_rcc.h”,芯片不同,头文件也要更换):
void HSE_SetSysClock(uint32_t pllmul)
{
//__IO是c语言关键字volatile的重定义,防止这两个变量在读取过程中遭到修改导致的数据错误
__IO uint32_t StartUpCounter = 0,HSEStartUpStatus = 0;
//将RCC时钟树初始化为复位状态
RCC_DeInit();
//开启外部晶振
RCC_HSEConfig(RCC_HSE_ON);
//等待HSE稳定,该函数为阻塞式函数
HSEStartUpStatus = RCC_WaitForHSEStartUp();
//判断HSE是否稳定
if(HSEStartUpStatus == SUCCESS){
//设置PLL时钟来源为HSE,第一个参数表示使用HSE几分频,第二个参数表示PLL倍频倍数
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,pllmul);
//AHB预分频因子设置为1分频,使HCLK = SYSCLK;若设置为2分频,则HCLK/2 = SYSCLK
RCC_HCLKConfig(RCC_SYSCLK_Div1);
//APB1预分频因子设置为2分频,使PCLK1 = HCLK/2
RCC_PCLK1Config(RCC_HCLK_Div2);
//APB2预分频因子设置为1分频,使PCLK2 = HCLK
RCC_PCLK2Config(RCC_HCLK_Div1);
//开启PLL
RCC_PLLCmd(ENABLE);
//等待PLL稳定,此函数为非阻塞式
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){
}
//切换SYSCLK时钟源为系统时钟
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//读取时钟切换位状态,确保切换成功
while(RCC_GetSYSCLKSource() != 0x80){
}
}
else//此处放置初始化失败的程序
{
while(1)
{
}
}
}
主要参考野火《STM32库开发实战指南》编写,如有谬误,欢迎指出
STM32标准库时钟树设置的更多相关文章
- 单片机stm32零基础入门之--初识STM32 标准库
CMSIS 标准及库层次关系 因为基于Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难.为了解决不同的芯片厂商生产的Co ...
- STM32 标准库
CMSIS 标准及库层次关系 因为基于Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难.为了解决不同的芯片厂商生产的Co ...
- STM32标准库GPIO操作
STM32标准库GPIO操作 STM32任何外围设备的使用都分为两部分:初始化和使用.体现在代码上就是:(1)有一个初始化函数(2)main函数中的使用 1.初始化GPIO 初始化GPIO函数代码: ...
- 初识STM32标准库
1.CMSIS 标准及库层次关系 CMSIS 标准中最主要的为 CMSIS 核心层,它包括了: STM32标准库可以从官网获得: 在使用库开发时,我们需要把 libraries 目录下的库函数文件添加 ...
- STM32 标准库V3.5启动文件startup_stm32f10xxx.s分析
layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true 前言 分析startu ...
- STM32 标准库3.5修改默认外部8M晶振为16M晶振
ST官方标准库V3.5默认的外部晶振频率为8M,实际使用中外部晶振需要修改为16M: 经过实验,修改有效,具体的patch如下: 修改 HSE_VALUE 值 diff --git "a/L ...
- SW加载标准库时出现failed to create Toolboxlibrary object怎么办?
友情提示:Windows+r打开 输入smd 注意操作前要关闭solidworks, 重新打开软件. 下面就可以找到很多标准件了.
- 如何从ST官网下载STM32标准库
Frm:https://blog.csdn.net/k1ang/article/details/79645044
- STM32标准库中GPIO_ReadInputData与GPIO_ReadInputDataBit的区别
GPIO_ReadInputData读的是GPIOx的整个IDR寄存器的数据,返回一个十六位数,对应IDR寄存器的十六位.反映GPIOx所有端口的电平状态,所以参数只用传入GPIOx. uint16_ ...
- STM32 时钟树配置快速入门
layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true 为什么要了解时钟树? ...
随机推荐
- 在WPF应用中实现DataGrid的分组显示,以及嵌套明细展示效果
我在前面随笔<在Winform系统开发中,对表格列表中的内容进行分组展示>,介绍了Winform程序中对表格内容进行了分组的展示,在WPF应用中,同样也可以对表格的内容进行分组展示,不过处 ...
- net8来了
11 月 15 日开始的为期三天的 .NET Conf 在线活动的开幕日上,.NET 8作为微软的开源跨平台开发平台正式发布..NET 团队着重强调云.性能.全栈 Blazor.AI 和 .NET M ...
- conda创建虚拟环境后文件夹中只有conda-meta文件夹,无法将环境添加到IDE中
1.问题描述:anaconda的envs的其中一个环境目录下,没有python.exe文件,只有conda-meta和scripts 平时创建虚拟环境都是: conda create -n test ...
- PaddleNLP--UIE(二)--小样本快速提升性能(含doccona标注)
相关文章: 1.快递单中抽取关键信息[一]----基于BiGRU+CR+预训练的词向量优化 2.快递单信息抽取[二]基于ERNIE1.0至ErnieGram + CRF预训练模型 3.快递单信息抽取[ ...
- Flask 之SocketIO库实现绘图表
Flask 默认提供了针对WebSocket的支持插件from flask_socketio import SocketIO 直接通过pip命令安装即可导入使用,前端也需要引入socketIO库文件, ...
- U390630 分考场题解
题目链接:U390630 分考场 本题来自于2019年蓝桥杯国赛的题.在洛谷上也被标为了假题.原因是首先官方在需要输出浮点数的情况下,并没有开启spj,并且官方所给的数据当中,总有一两个数据以不知道到 ...
- Oracle 数据库版本路线图
经常会有客户困惑某个Oracle版本的支持周期,且希望得到确切的官方说明,其实这可以从MOS文档: Release Schedule of Current Database Releases (Doc ...
- SpringMVC关于@RequestBody加与不加的区别
SpringMVC关于@RequestBody加与不加的区别 前两天在做项目的时候遇到了这样一个问题,小组成员为了方便做接口测试,给Controller控制器上加了@RequestBody注解,但是前 ...
- JOISC 2020 记录
Day1 T1 Building 4 首先有一个 \(O(n^2)\) 的 DP:记 \(f_{i,j,0/1}\) 表示已经填了前 \(i\) 位,其中有 \(j\) 位选择了 A 序列,当前第 \ ...
- Codeforces Round #884 (Div. 1 + Div. 2) A-E
比赛链接 A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; bool solve() { i ...