STM32F103时钟配置流程

2023-11-04

知识点:

  1. 系统复位后,HSI振荡器被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,它将不能被停止。
  2. STM32F103的三个可以作为系统时钟的时钟源,分别是HSI、HSE、PLL。而PLL的时钟源是HSI/2(内部RC振荡器二分频)、HSE。
  3. 如果使用HSI,系统时钟我们能达到的最大频率是64MHz,如果使用HSE,系统时钟最大频率是72MHz。
  4. APB时钟有低速PCLK1和高速PCLK2;PCLK1是从HCLK二分频得到的,最大36MHZ,根据上一条知识点如果是使用HSI,则最快是32MHz。
  5. PLL的设定需要在使能之前,一旦PLL使能后参数不可更改。
  6. 附录是一些缩写的英文全称,也有一些补充的知识点。

步骤:

第一步 初始化时钟

不管现在SYSCLK的时钟源是哪个,我们先重置系统时钟源。
RCC_DeInit();

第二步 打开对应的时钟输入

若使用内部高速时钟HSI
RCC_HSICmd(ENABLE);
若使用外部高速时钟HSE
RCC_HSEConfig(RCC_HSE_ON);

第三步 等待时钟晶振工作

HSI
While(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)==RESET);
HSE
While(RCC_GetFlagStatus(RCC_FLAG_HSERDY)==RESET);

第四步 设置AHB时钟HCLK

RCC_HCLKConfig(RCC_SYSCLK_Div1);
分频系数自己设定,一般都是RCC_SYSCLK_Div1即不分频。

第五步 设置低速APB1时钟

RCC_PCLK1Config(RCC_HCLK_Div2);

第六步 设置高速APB2时钟

RCC_PCLK2Config(RCC_HCLK_Div1);

第七步 设置Flash预缓冲周期

FLASH_SetLatency(FLASH_Latency_2);//设置等待周期
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // 使能flash预缓冲
Flash的操作也没有总线时钟快,所以需要总线在操作flash时稍作等待。
推荐根据HCLK设置:

  1. 0-24MHz时,取FLASH_Latency_0;
  2. 24-48MHz,取FLASH_Latency_1;
  3. 48-72MHz时,取FLASH_Latency_2。

第八步 设置PLL (如果不使用PLL,请略过此步骤)

HSI
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16 );
HSE
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9 );

第九步 打开PLL (如果不使用PLL,请略过此步骤)

RCC_PLLCmd(ENABLE);

第十步 等待PLL工作 (如果不使用PLL,请略过此步骤)

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)== RESET);

第十一步 设置系统时钟

HSI
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
HSE
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
PLL
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

第十二步 判断是否是设置的时钟

HSI
while(RCC_GetSYSCLKSource()!= 0x00);
HSE
while(RCC_GetSYSCLKSource()!= 0x04);
PLL
while(RCC_GetSYSCLKSource()!= 0x08);

例程:外部晶振为8M的72M系统时钟配置

void SysclkInit(void)
{
	RCC_DeInit();
	RCC_HSEConfig(ENABLE);
    while(RCC_GetFlagStatus(RCC_FLAG_HSERDY)==RESET);
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
    RCC_PCLK1Config(RCC_HCLK_Div2);
    RCC_PCLK2Config(RCC_HCLK_Div1);
    FLASH_SetLatency(FLASH_Latency_2);
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9 );
    RCC_PLLCmd(ENABLE);
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)== RESET);
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
    while(RCC_GetSYSCLKSource()!= 0x08);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32F103时钟配置流程 的相关文章

  • CVE-2021-41773漏洞复现

    1 安装debian系统 首先我选择的系统是debian10版本 也可以在别的系统完成复现 我想一个纯净版 所有重新安装了一个系统 安装步骤简单展示一下 1 创建虚拟机 点击下一步 导入镜像 自己选安装的位置以及虚拟机的名称 安装过程需要设
  • sql语句合集大全(个人总结)

    查找emp表 select from emp 查找emp表的sal select a SAL from emp a 查找emp表的ename select a ename from emp a emp表的sal 10 select a SA
  • 六大设计原则--迪米特法则【Low Of Demeter】

    声明 本文内容是从网络书籍整理而来 并非原创 定义 迪米特法则也叫做最少知识原则 Least Knowledge Principle 指一个对象应该对其他对象有最少的了解 通俗的讲 一个类对自己需要耦合或者调用的类应该知道的最少 你类内部是

随机推荐

  • idea打包springboot项目并部署至服务器

    idea打包springboot项目并部署至服务器 Step1 如果项目没有webapp或web目录 Step2 将springboot导成jar包 Step3 将springboot部署至云服务器 Step1 如果项目没有webapp或w
  • GCP: AppEngine(GAE)的使用

    一 基本概念 在全托管式的无服务器平台上构建可扩缩性极强的应用 将应用从零无缝扩容到全球级规模 而不用费心管理底层基础架构 得益于零服务器管理和零配置部署 开发者可以专注于构建出色的应用 省去管理开销 App Engine 支持多种主流开发
  • 使用ab进行并发压测SSL read failed (5) - closing connection错误

    最近在进行并发压测 在c参数特别大的时候 测试过程中出现SSL read failed 5 closing connection错误 研究好久没有找到瓶颈 但在换了一台测试服务器后 这个问题没有出现 所以基本可以确定是测试服务器产生的瓶颈
  • Java中整型数据的进制书写

    问题描述 我觉得这是一个比较有趣的事情 我觉得大多数初学者在编程过程中都不会在源代码里用除了十进制的其它进制写常量 但是当我在做leetcode的 回文数字 一题时 写了个测试样例 以为int 0343可以被识别为343 从而被识别成回文数
  • combo 添加listeners,使用 initComponent、constructor 的区别

    LocationCombo Ext extend Ext form ComboBox initComponent function var config name loactionCombo hiddenName loactionCombo
  • Unity 使用Final IK实现拟真调整物体IK动画

    文章目录 IK部分 需求 何为IK 参考资料 Final IK概述 手部IK效果 IK交互 拿取与双手调整效果 演示视频 IK部分 需求 NPC拿起物体 指定转向放到指定位置 要求动作尽可能自然 贴近真实 何为IK 谈IK之前先讲一下正向运
  • 【计算机网络】数据链路层(二):差错检测和纠正

    帧同步虽然可以区分每个数据帧的起始和结束 但是还没有解决数据正确传输的两方面问题 一 如果有帧出现了错误 二 如果有帧丢失了 这都是数据链路层确保向网络层提供可靠数据传输服务解决的问题 也就是数据链路层的差错控制功能 要实现差错控制功能 就
  • 0、Spring工程构建&Spring快速入门&Spring配置文件详解&注入&Sprint相关API

    1 Spring工程构建 创建工程项目目录文件夹 IDEA选择项目new一个module 配置案例 aop创建 创建并下载完毕后 点击file选择projert 选择按照的jdk版本 output选择当前目录 点击右下方apply 选择fa
  • Android BottomNavigationView的属性设置

    底部导航栏通常是每个item由一个icon和title组成的 然后再控制下是否点击的状态即可 当然也可以使用官方在support包内提供的BottomNavigationView来实现 于简单的需求来说 使用BottomNavigation
  • FPGA数字IC刷题58道Verilog题解代码及视频讲解【FPGA探索者】【同步/异步FIFO】【跨时钟】

    牛客 Verilog 刷题入门篇1 24 进阶篇1 34 题解代码 所有代码均能通过测试 配合视频讲解效果更佳 为避免内容冗余 本文只给出代码 部分题目给出必要说明 很多题目本身出题有些问题 着重理解题目 没必要钻牛角尖 本文作者 FPGA
  • 贪心算法之活动安排问题(填表详解+思路解析)

    贪心算法 总是选择当前看起来最优的选择 局部最优解 得到的结果是一个整体最优解 但是总是选择局部最优解并不总是能得到整体最优解 需要在问题具有 贪心选择性和优化子结构时才成立 贪心选择性 第一次做出贪心选择是正确的 优化子结构 第一次做完贪
  • Tarjan 强连通分量算法的 Java 实现

    强连通分量算法是图论中的一个重要算法 用于将有向图分解为若干个强连通分量 Tarjan 算法是其中一种常用的实现方式 它可以高效地找到图中的所有强连通分量 本文将介绍 Tarjan 强连通分量算法的 Java 实现 并提供相应的源代码 首先
  • 万用表的使用

    deprecate 反对 轻视 declaration 宣告 声明书 宣布 宣告 申报 arg argue 争论 论证 争辩 主张 认为 提供证据 证明 表明 原因等 type 类型 种类 打字 成为 的典型 function 功能 作用
  • [721]linux安装kafka及命令行使用

    文章目录 一 安装kafka 二 解压kafka 三 修改server properties文件 四 修改zookeeper properties文件 五 添加kafka启动脚本 六 启动kafka 七 命令行使用kafka 创建topic
  • Vue知识系列(4)每天10个小知识点

    目录 系列文章目录 Vue知识系列 1 每天10个小知识点 Vue知识系列 2 每天10个小知识点 Vue知识系列 3 每天10个小知识点 知识点 31 Vuex 四种属性的概念 作用 使用示例 32 Vuex 和单纯的全局对象 的概念 作
  • Linux磁盘分区和文件系统的关系

    一 Linux磁盘相关命令及作用 1 df命令 用于显示文件系统的磁盘空间使用情况 2 du命令 用于查看文件或目录的磁盘使用情况 3 fdisk命令 用于磁盘分区表的创建和管理 4 mkfs命令 用于创建文件系统 5 mount命令 用于
  • 华北电力计算机专业排名,华电考研计算机专业排名

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1354计算机软件与理论359 1355计算机软件与理论340 1356计算机软件与理论334 1357计算机软件与理论329 1358计算机软件与理论326 1359计算机软件与理论324 1
  • C++/C++11中引用的使用

    引用 reference 是一种复合类型 compound type 引用为对象起了另外一个名字 引用类型引用 refer to 另外一种类型 通过将声明符写成 d的形式来定义引用类型 其中d是声明的变量名 一 一般引用 一般在初始化变量时
  • Cocos2dx on Qt

    讨论贴在这里 http www cocos2d x org boards 6 topics 8043 page 1 准备 glew 库 bin glew32 dll gt windows system32 include GL gt VC
  • STM32F103时钟配置流程

    知识点 系统复位后 HSI振荡器被选为系统时钟 当时钟源被直接或通过PLL间接作为系统时钟时 它将不能被停止 STM32F103的三个可以作为系统时钟的时钟源 分别是HSI HSE PLL 而PLL的时钟源是HSI 2 内部RC振荡器二分频