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标准库时钟树设置的更多相关文章

  1. 单片机stm32零基础入门之--初识STM32 标准库

    CMSIS 标准及库层次关系 因为基于Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难.为了解决不同的芯片厂商生产的Co ...

  2. STM32 标准库

    CMSIS 标准及库层次关系 因为基于Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难.为了解决不同的芯片厂商生产的Co ...

  3. STM32标准库GPIO操作

    STM32标准库GPIO操作 STM32任何外围设备的使用都分为两部分:初始化和使用.体现在代码上就是:(1)有一个初始化函数(2)main函数中的使用 1.初始化GPIO 初始化GPIO函数代码: ...

  4. 初识STM32标准库

    1.CMSIS 标准及库层次关系 CMSIS 标准中最主要的为 CMSIS 核心层,它包括了: STM32标准库可以从官网获得: 在使用库开发时,我们需要把 libraries 目录下的库函数文件添加 ...

  5. STM32 标准库V3.5启动文件startup_stm32f10xxx.s分析

    layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true 前言 分析startu ...

  6. STM32 标准库3.5修改默认外部8M晶振为16M晶振

    ST官方标准库V3.5默认的外部晶振频率为8M,实际使用中外部晶振需要修改为16M: 经过实验,修改有效,具体的patch如下: 修改 HSE_VALUE 值 diff --git "a/L ...

  7. SW加载标准库时出现failed to create Toolboxlibrary object怎么办?

    友情提示:Windows+r打开  输入smd 注意操作前要关闭solidworks, 重新打开软件. 下面就可以找到很多标准件了.

  8. 如何从ST官网下载STM32标准库

    Frm:https://blog.csdn.net/k1ang/article/details/79645044

  9. STM32标准库中GPIO_ReadInputData与GPIO_ReadInputDataBit的区别

    GPIO_ReadInputData读的是GPIOx的整个IDR寄存器的数据,返回一个十六位数,对应IDR寄存器的十六位.反映GPIOx所有端口的电平状态,所以参数只用传入GPIOx. uint16_ ...

  10. STM32 时钟树配置快速入门

    layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true 为什么要了解时钟树? ...

随机推荐

  1. SUBMIT指定用户名错误

    1.SUBMIT说明 在ABAP中,SUBMIT关键字用于运行另一个ABAP程序.通过SUBMIT关键字,可以在当前程序内部调用其他程序,而无需关闭当前程序. SUBMIT语句的一般语法如下: &qu ...

  2. js引起的 xxxx of null

    在 vue 中操作 dom 元素的时候,报错 style of null 这个报错的原因,跟你代码的健壮性有关了; 这样就不会报错了 if( document.querySelectorAll(&qu ...

  3. MybatisPlus对Mysql数据库关键字作为列名的处理--SQLSyntaxErrorException: You have an error in your SQL syntax;

    说明: 在设计数据库时,使用mysql关键字作为列名(比如order用于排序),就会报错:java.sql.SQLSyntaxErrorException: You have an error in ...

  4. SqlSugar导航查询/多级查询

    1.导航查询特点 作用:主要处理主对象里面有子对象这种层级关系查询 1.1 无外键开箱就用 其它ORM导航查询 需要 各种配置或者外键,而SqlSugar则开箱就用,无外键,只需配置特性和主键就能使用 ...

  5. 快递单信息抽取【二】基于ERNIE1.0至ErnieGram + CRF预训练模型

    相关文章: 1.快递单中抽取关键信息[一]----基于BiGRU+CR+预训练的词向量优化 2.快递单信息抽取[二]基于ERNIE1.0至ErnieGram + CRF预训练模型 3.快递单信息抽取[ ...

  6. 环境调试bug【二】无法加载源“<string>”: Source unavailable

    1.无法加载源"<string>": Source unavailable. 网上解决方法: 总结来说就两种: debugStdLib: true 添加到 launch ...

  7. 将Windows系统设置为NTP服务器

    环境 Windows 10,本机IP地址为:192.168.6.133 步骤 一.编辑注册表 win+r快捷键打开运行窗口,输入regedit打开注册表编辑器,找到以下几项并修改其值: 1.将type ...

  8. 苹果打破12年惯例:iPad一整年未更新

    1月2日消息,据媒体报道,自2010年首次亮相以来,苹果一直保持着每年至少发布一款新型号的传统. 但是在过去的2023年,苹果没有发布iPad,2023年苹果发布的唯一与iPad相关的产品是USB-C ...

  9. Docker从认识到实践再到底层原理(一)|技术架构

    前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...

  10. 零基础入门Vue之影分身之术——列表渲染&渲染原理浅析

    听我说 从 条件渲染 那一篇,我学习到了如何用Vue对dom节点根据条件显示 但单单有条件还不够啊,有时候数据是一大坨一大坨的数据,如果Vue不提供咱要么使用"v-html" 要么 ...