STM32 时钟 第七课学习笔记
STM32 时钟 第七课学习笔记嵌入式学习笔记 · 第 七 课今天学习了时钟和时钟树的概念、分频器/锁相环/复用器、四种时钟源树根、总线分频树干/树枝以及时钟树的编程配置整理成文方便复习。文章目录STM32 时钟 第七课学习笔记一、时钟和时钟树的概念1. 为什么需要时钟2. 什么是时钟树3. 本课学习脉络课程目录二、分频器、锁相环和复用器三、树根四种时钟源四、树干系统时钟 SYSCLK 与 PLL经典 72MHz 配置8MHz HSE × 9五、树枝外设时钟总线AHB/APB六、时钟树编程1. 时钟树的初始状态2. 标准库的启动代码3. 时钟树的编程接口标准库4. 配置时钟树经典 72MHz 流程5. 配置 Flash 指令预取高主频必备6. 片上外设开关和复位七、时钟速查表与口诀一、时钟和时钟树的概念1. 为什么需要时钟数字电路的一切动作都靠时钟节拍驱动寄存器在每个时钟沿采样数据CPU 每条指令都要若干时钟周期。没有时钟芯片就是静止的。频率越高运行越快但功耗越大不同外设对频率要求不同APB1 外设只能跑 36MHzUSB 需要 48MHzADC 最大 14MHz…。2. 什么是时钟树时钟树从时钟源开始经过分频、倍频、选择复用器后把不同频率的时钟分发给 CPU 和各外设的整个分配网络。因为形似一棵树根 → 树干 → 树枝所以叫时钟树。3. 本课学习脉络课程目录模块主题概念篇时钟和时钟树的概念器件篇分频器、锁相环和复用器树根时钟源HSE/HSI/LSE/LSI树干系统时钟 SYSCLK 生成路径树枝外设时钟总线AHB/APB1/APB2编程篇时钟树的初始状态、标准库启动代码、编程接口、配置时钟树、配置 Flash 指令预取、片上外设开关和复位二、分频器、锁相环和复用器时钟树上三种基本器件器件英文作用例子分频器Divider / Prescaler把频率降低72MHz /2 36MHzAPB1锁相环PLLPhase-Locked Loop把频率提高倍频8MHz ×9 72MHz复用器MUXMultiplexer从多路输入中选一路系统时钟选 HSI / HSE / PLLCLK记忆分频降、PLL 升、MUX 选。三、树根四种时钟源时钟源名称频率精度主要用途HSE高速外部晶振4~16 MHz常用 8M高PLL 倍频源、系统时钟HSI高速内部 RC8 MHz低温漂大上电默认时钟、低成本方案LSE低速外部晶振32.768 kHz高RTC 实时时钟LSI低速内部 RC40 kHz低独立看门狗 IWDG要点上电默认用 HSI8MHz等 HSE 稳定后再切换需要高精度如串口波特率、USB时用 HSELSE 专给 RTC 走秒用LSI 专给 IWDG 用。记忆树根有 4 个外高HSE、内高HSI、外低LSE、内低LSI。四、树干系统时钟 SYSCLK 与 PLLSTM32F103 完整时钟树来自 STM32F10xxx 参考手册图 8图解析主干路径从左往右时钟源左8MHz HSI RC、4-16MHz HSE OSCOSC_IN/OSC_OUT、32.768kHz LSEOSC32_IN/OSC32_OUT、40kHz LSIPLL 锁相环PLLSRC 选择 PLL 输入源HSI/2 或 HSE 或 HSE/2PLLMUL 倍频×2~×16得 PLLCLKSW 系统时钟选择器在 HSI / HSE / PLLCLK 三者中选一个作为SYSCLK最大 72MHzAHB 预分频器SYSCLK 分频得HCLK至 AHB 总线、核心、存储器、DMA最大 72MHzHCLK /8 得 Cortex 系统时钟SysTickAPB1 预分频器得 PCLK1最大 36MHz至 APB1 外设APB1 分频≠1 时定时器时钟 ×2TIM2~7APB2 预分频器得 PCLK2最大 72MHz至 APB2 外设APB2 分频≠1 时定时器时钟 ×2TIM1、TIM8ADC 预分频器PCLK2 /2,4,6,8 得 ADCCLK最大 14MHz→ ADC1/2/3USB 预分频器PLLCLK /1 或 /1.5 得 48MHz → USBRTC 时钟LSE/LSI/HSE/128 经 RTCSEL[1:0] 选择 → RTCCLK → RTCLSI 同时送独立看门狗MCO 主时钟输出可把 PLLCLK/HSI/HSE/SYSCLK/2 后输出到引脚供外部使用。经典 72MHz 配置8MHz HSE × 9HSE 8MHz → PLLSRC(选HSE) → PLLMUL(×9) → PLLCLK 72MHz → SW → SYSCLK 72MHz SYSCLK 72MHz → AHB /1 → HCLK 72MHz HCLK → APB1 /2 → PCLK1 36MHz定时器 ×2 → 72MHz HCLK → APB2 /1 → PCLK2 72MHz定时器 ×2 → 72MHz PCLK2 → ADC /6 → ADCCLK 12MHz≤14MHz ✓ PLLCLK → USB /1.5 → 48MHz ✓注意手册注明HSI 作为 PLL 输入时系统时钟最大只能到 64MHz。五、树枝外设时钟总线AHB/APBSTM32 内部总线架构用户整理示意图图解析Cortex-M3 内核CPU通过 I-Bus取指和 D-Bus数据连接总线矩阵总线矩阵连接 Flash、RAM、DMA1、DMA2 及AHB 总线最大 72MHzAHB 经桥接单元分出两条总线APB2最大 72MHz挂 EXTI、GPIOA~GPIOD、TIM1、SPI1、USART1、ADC1、ADC2APB1最大 36MHz挂 TIM2~4、USART2/3、SPI2、I2C1/I2C2、bxCAN、USB2.0 FS。总线与频率限制速查总线最大频率典型分频72M 方案挂载外设举例AHBHCLK72 MHz/1 72MHz核心、Flash、RAM、DMA、SDIOAPB2PCLK272 MHz/1 72MHzGPIO、USART1、SPI1、TIM1、ADCAPB1PCLK136 MHz/2 36MHzUSART2/3、SPI2、I2C、TIM2~4、CAN、USBADC14 MHz/6 12MHzADC1/2/3USB48 MHz/1.5USB2.0 FS记忆APB2 快72MAPB1 慢36M外设挂哪条总线最大频率就受谁限制。六、时钟树编程1. 时钟树的初始状态芯片上电复位后默认使用 HSI8MHz作为系统时钟所有外设时钟默认关闭省电需要时再逐个打开。2. 标准库的启动代码启动文件startup_stm32f10x_hd.s在 main() 之前会调用SystemInit()在 system_stm32f10x.c 中它负责把时钟树配置成宏定义的频率默认SYSCLK_FREQ_72MHz。3. 时钟树的编程接口标准库功能函数配置 PLLRCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9)配置系统时钟源RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK)AHB 分频RCC_HCLKConfig(RCC_SYSCLK_Div1)APB1 分频RCC_PCLK1Config(RCC_HCLK_Div2)APB2 分频RCC_PCLK2Config(RCC_HCLK_Div1)外设时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE)外设复位RCC_APB2PeriphResetCmd(…)4. 配置时钟树经典 72MHz 流程/* system_stm32f10x.c 中 SetSysClock() 的核心流程标准库 */// 1. 打开 HSE 并等待就绪RCC_HSEConfig(RCC_HSE_ON);while(RCC_GetFlagStatus(RCC_FLAG_HSERDY)RESET);// 2. 配置 PLLHSE 8MHz 不分频×9 72MHzRCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);// 3. 配置总线分频AHB/1、APB1/2、APB2/1RCC_HCLKConfig(RCC_SYSCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2);RCC_PCLK2Config(RCC_HCLK_Div1);// 4. 使能 PLL等待就绪后选作系统时钟RCC_PLLCmd(ENABLE);while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)RESET);RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);5. 配置 Flash 指令预取高主频必备SYSCLK 高于 24MHz 时必须给 Flash 设置等待周期并开启预取缓冲否则 CPU 取指跟不上FLASH_SetLatency(FLASH_Latency_2);// 72MHz 需要 2 个等待周期FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);// 开启指令预取6. 片上外设开关和复位每个外设使用前都要使能它的时钟挂在哪条总线就使能哪个 RCCRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);复位外设回到默认状态RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1,ENABLE);// 复位RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1,DISABLE);// 释放HAL 库对应HAL_RCC_OscConfig()配置 HSE/HSI/PLLHAL_RCC_ClockConfig()配置 SYSCLK/AHB/APB1/APB2__HAL_RCC_GPIOA_CLK_ENABLE()。七、时钟速查表与口诀项目内容时钟源HSE 4-16M / HSI 8M / LSE 32.768K / LSI 40K上电默认HSI 8MHz外设时钟全关系统时钟SYSCLK 最大 72MHzHSI 作 PLL 输入时最大 64MHzAHBHCLK 最大 72MHzAPB2PCLK2 最大 72MHzGPIO、USART1、SPI1、TIM1、ADCAPB1PCLK1 最大 36MHzUSART2/3、SPI2、I2C、TIM2~4、CAN、USB定时器APB 分频1 时同 APB 频率否则 ×2ADCADCCLK 最大 14MHzPCLK2 /2,4,6,8USB48MHzPLL /1 或 /1.5SysTickHCLK /8Flash72MHz 需 2 等待周期 预取使能经典配置8M×972MAHB/1、APB1/2、APB2/1、ADC/6记忆口诀分频降、PLL 升、MUX 选。树根 4 个外高 HSE、内高 HSI、外低 LSE、内低 LSI。SYSCLK 最大 72MAPB1 只有一半36M。APB2 快、APB1 慢外设挂哪条就受哪条限制。定时器爱翻倍APB 分了频定时器就 ×2。外设要先给电开时钟用前记得 RCC 使能。本文为第七课学习笔记时钟树图为 STM32F10xxx 参考手册图 8如有错误欢迎评论区指正。

相关新闻

视频转 GIF 的基本流程与文件大小优化

视频转 GIF 的基本流程与文件大小优化

将视频转换为 GIF,常见于聊天动图、软件操作演示、教程配图和短循环动画等场景。与 MP4 不同,GIF 不支持音频,颜色表现也有限,因此更适合短片段循环展示,而不是替代完整视频。1. 转换流程可以使用视频编辑软件、在线转…

2026/10/15 2:50:28 阅读更多 →
Kotlin密封类与密封接口:用类型系统优雅建模有限状态

Kotlin密封类与密封接口:用类型系统优雅建模有限状态

1. 密封类是什么:先解决“一个类型究竟有几种形态”做状态建模时间长了,会越来越反感那种靠字符串常量硬撑的写法。请求返回isSuccess一个布尔,错误信息又用一个可空字段,结果组合出来四种状态:成功、失败、还没成功但…

2026/10/15 2:50:28 阅读更多 →
Vue子组件优化:避免不必要的重新渲染

Vue子组件优化:避免不必要的重新渲染

1. 问题现象与背景分析最近在Vue项目开发中,不少同事都遇到了一个奇怪的现象:明明父组件的数据没有变化,子组件却频繁触发重新渲染。这种"无故刷新"不仅影响性能,有时还会导致界面闪烁等不良体验。经过排查发现&#xf…

2026/10/15 2:50:28 阅读更多 →

最新新闻

Java接入个人微信API:消息回调进客服系统的正确姿势

Java接入个人微信API:消息回调进客服系统的正确姿势

Java 团队接个人微信,通常第一反应是:Spring Boot 写个 Controller,接收回调,然后直接在方法里写业务。 本地调试挺顺,一上生产就出现:接口超时、消息重复、Tomcat 线程打满。 问题不在 Java,而…

2026/10/15 3:33:41 阅读更多 →
YOLO26算法室内工作环境手部手势目标检测+训练好的模型+8212张数据集+pyqt可视化界面

YOLO26算法室内工作环境手部手势目标检测+训练好的模型+8212张数据集+pyqt可视化界面

YOLO26算法室内工作环境手部手势目标检测训练好的模型8212张数据集pyqt可视化界面 这套数据共 8212 张图。用 YOLO26 训了 100 轮,mAP50 0.7315,mAP50-95 0.6002。Precision 0.7335、Recall 0.7532。下面按数据构成 → 训练曲线 → 预测效果的顺序过一遍…

2026/10/15 3:33:41 阅读更多 →
仓颉编程语言 I/O 节点流完全指南:标准流与文件流的实战解析

仓颉编程语言 I/O 节点流完全指南:标准流与文件流的实战解析

文档知识库教程OpenHarmony 【免费下载链接】CangjieCorpus 本仓库为仓颉编程语言语料库,聚焦 仓颉编程语言 核心知识体系,整合官方开发指南、API 文档、典型代码示例及语法规范等多维度资源,经结构化处理与专业标注,构建为支持 R…

2026/10/15 3:33:41 阅读更多 →
LAMMPS bond_style mm3 键伸缩势详解:YAFF 包的 MM3 非谐势实现、参数配置与实战应用

LAMMPS bond_style mm3 键伸缩势详解:YAFF 包的 MM3 非谐势实现、参数配置与实战应用

科研科学计算高性能计算 【免费下载链接】lammps Public development project of the LAMMPS MD software package 项目地址: https://gitcode.com/gh_mirrors/la/lammps 点击查看 免费下载 导读 bond_style mm3 是 LAMMPS 中用于描述键伸缩运动的非谐势模型&…

2026/10/15 3:33:41 阅读更多 →
Flutter Engine Windows 无障碍实现解析:MSAA 与 UI Automation 在 AXPlatformNodeWin 中的落地

Flutter Engine Windows 无障碍实现解析:MSAA 与 UI Automation 在 AXPlatformNodeWin 中的落地

跨平台前端移动开发OpenHarmony 【免费下载链接】flutter_flutter 本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于…

2026/10/15 3:33:41 阅读更多 →
Natron ErodeSmooth 节点完全指南:归一化功率加权腐蚀/膨胀滤镜的参数解析与源码级解读

Natron ErodeSmooth 节点完全指南:归一化功率加权腐蚀/膨胀滤镜的参数解析与源码级解读

音视频视频处理图形学桌面应用 【免费下载链接】Natron Open-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry. 项目地址: https://gitcode.com/gh_mirrors/na/Natron 点击查看 …

2026/10/15 3:32:41 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →