Stm32的时钟系统以及使用SysTick滴答定时器实现延时
前言
- STM32的时钟系统由多个时钟源和时钟树组成
- 时钟源包括主时钟源(HSE)、内部高速时钟源(HSI)、内部低速时钟源(LSI)和外部低速时钟源(LSE)。
- 时钟树由多个时钟分频器和时钟门控器组成,可以将输入时钟源分频得到多个时钟信号,并且根据需要打开或关闭时钟门控器来控制时钟信号的输出。
下面这个是我从AI中查询的,我觉得还是很有参考意义的
STM32的主时钟源为HSE,可以通过外部晶振或者外部时钟信号输入。内部高速时钟源HSI为8MHz,可以通过RCC_CR寄存器控制开关。内部低速时钟源LSI为40kHz,主要用于RTC模块。外部低速时钟源LSE为32.768kHz,同样用于RTC模块。
时钟树主要由以下几个部分组成:
1.系统时钟分频器(SYSCLK):用于分频主时钟源或者内部高速时钟源,得到系统时钟(SYSCLK)。
2.AHB总线时钟分频器(HCLK):用于分频系统时钟,得到AHB总线时钟(HCLK)。
3.APB1总线时钟分频器(PCLK1):用于分频AHB总线时钟,得到APB1总线时钟(PCLK1)。
4.APB2总线时钟分频器(PCLK2):用于分频AHB总线时钟,得到APB2总线时钟(PCLK2)。
5.时钟门控器:用于控制各个外设的时钟开关,从而节省功耗。
下面对Stm32的时钟系统做一个系统性的复习和总结
Stm32时钟系统
时钟系统,理解时钟,看那个CubeMX时钟配置较为方便,虽然还是比较喜欢使用标准库哈哈
在Stm32中,有五个时钟源,分别为
HSI、HSE、LSI、LSE、PLL
-
从时钟频率来看可以分为高速时钟源和内部时钟源
HSI、HSE、PLL是高速时钟,LSI和LSE是低速时钟
-
从来源来看分为外部时钟源和内部时钟源
HSE和LSE是外部时钟源,其他的是内部时钟源
HSI 高速内部时钟
HSI是
高速内部时钟,RC振荡器,频率为8MHZ由内部的8MHZ的RC震荡器所产生
可以直接作为
系统时钟,或者二分频作为PLL输入
看下图就清楚了

HSE 高速外部时钟
HSE是高速外部时钟,他的时钟信号由以下两种时钟源产生
- HSE外部晶体/陶瓷谐振器,说的简单一些就是晶振
- HSE用户外部时钟
这个频率的范围为4MHZ-16MHZ
一般接8MHZ的晶振

PLL 锁相环倍频输出
PLL是锁相环倍频输出,PLL的输入可选
- HSI二分频后输入
- HSE输入
- HSE二分频后输入
倍频可以选择2-16倍频,但是最大的输出频率不能超过72MHZ
时钟的选择和选择倍频因子必须在其被激活前完成
如果要使用USB口,PLL必须被设置为48或72MHZ的时钟,用于提供48MHZ的USBCLK时钟

LSE 低速外部时钟
LSE是低速外部时钟,接外部晶振,频率为32.768KHZ
它为实时时钟RTC,或者其他定时功能提供一个低功耗且精确的时钟源

LSI 低速内部时钟
LSI是低速内部时钟,RC震荡器,频率为40KHZ,独立看门狗的时钟源只能是LSI,同时LSI是一个低耗的时钟源
它可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟
SYSCLK 系统时钟的选择
系统时钟SYSCLK的时钟来源可以是以下几种
- HSI 高速内部时钟 8MHZ
- HSE 高速外部时钟 8MHZ
- PLL 锁相环输出 8MHZ-72MHZ(最大不能超过72MHZ)

系统中所有外设的时钟来源都是来源于SYSCLK,SYSCLK通过AHB时钟分频后,送给各模块使用
其中
- AHB总线、内核、内存和DMA使用的是HCLK时钟
- 8分频至系统时钟,就是systick,滴答时钟
- 至Cortex自由运行时钟FCLK
- APB1外设时钟和定时器2-7
- APB2外设时钟和定时器1和定时器8
- ADC,可分频2、4、6、8分频,ADCCLK最大14MHZ

RTC 实时时钟
RTC实时时钟,有以下三个来源
- HSE 128分频
- LSE 作为RTC时钟的输入
- LSI 作为RTC时钟的输入

CSS 时钟安全系统
一般来说,MCU的时钟基本上来源于外部晶振8MHZ,经过PLL锁相环倍频后,传递给系统时钟
但是如果晶振电路出现了错误,产生不了精确的时钟,那么CSS将会起作用
他会把系统时钟自动切换成
HSI内部高速晶振,频率为8MHZ
MCO 内部时钟输出引脚
MCU允许输出时钟信号到外部MCO引脚,这个引脚是PA8
这个MCO时钟输出引脚可以输出
- PLL锁相环2分频
- HSI 内部高速时钟
- HSE 外部高速时钟
- SYSCLK 系统时钟

STM32时钟框图


STM32启动文件的作用以及CL、VL、XL、LD、MD、HD的含义
启动文件的作用,在Stm32f10x_hd.s中,文件注释中已经详细介绍,经过翻译如下
- 设置初始栈顶指针SP
- 设置初始PC,让其初始值为Reset Handler
- 设置除ISR地址外的向量表项
- 配置时钟系统,同时配置外部时钟系统
- 安装在STM3210E-EVAL板上的SRAM作为数据内存使用(可选,由用户决定)
- 在C库中调用main()函数
- 复位后,CortexM3处理器处于线程模式,优先级为Privileged,并且栈Stack设置为Main

总的来说就是
- 初始化栈指针和必要的程序
- 从Systeminit()函数进入到main()函数(对于stm32,定义系统时钟首先在system_stm3210x.c文件中修改宏即可)
- 建立中断服务入口地址(将中断向量和中断服务函数链接起来)
CL、VL、XL、LD、MD、HD 文件的含义
Stm32根据不同的使用场景和FLASH的大小,分为了不同的产品,不同的产品的缩写不同
- CL : 互联型产品,Stm32F105/107 系列
- VL :超值型产品,Stm32F100系列
- XL : 超高精度产品,Stm32F101/103系列
- LD : 低密度产品,FLASH小于64k
- MD : 中密度产品,FLASH等于64K或者128K
- HD : 高密度产品, FLASH大于128K
SysTick 滴答定时器
SysTick主要用来延时,或者是实时系统的心跳时钟,这样可以节省MCU的资源,不用浪费一个定时器
-
SysTick是一个
24位的到倒计数定时器,当计数到0时,将从RELOAD寄存器中自动重装载定时初值,开始新一轮计数。只要不把SysTick控制及状态寄存器中的使能位清除,就永不停息 -
即使在睡眠状态下也能工作运行
使用SysTick来实现延时,极大的节省了系统资源
- SysTick定时器被捆绑在NVIC中断,用于产生SYSTICK中断(中断号为15)
SysTick的中断优先级也可以设置
在
Stm32F10xxx参考手册中 ,系统滴答校准值为9000,当系统滴答时钟设定为9MHZ,为HCLK/8的最大值时,产生1ms的基准

CM3为SysTick提供两个时钟源
- 内核的自由运行时钟FCLK(这个就是HCLK时钟)
- 自由表现在不来自于系统时钟HCLK
- 在系统时钟停止时,FCLK也继续运行
- 外部参考时钟STCLK (这个一般是HCLK,AHB总线的1/8,9MHZ)
SysTick滴答定时器,在
FreeRTOS中,就是使用SysTick滴答定时器来推动任务的切换和时间的管理
固件库中SysTick的配置在misc.c和core_cm3.h文件中
- 其中SysTick的时钟源选择在
misc.c文件中 - 初始化SysTick在在
core_cm3.h文件中
SysTick的时钟源选择

SysTick的初始化
开启SysTick中断,并且使能SysTick中断,以及SysTick中断的时间间隔
简单的说ticks的值就是relaod的值,中断会在val==0的时候产生,两次中断就是val的值从reload到0的时间
从初始值开始,向下计数,计数到0,产生中断,如此反复

使用SysTick实现延时
选择外部时钟HCLK,八分频,此时时钟为9MHZ

我们在上面已经说过,
当系统滴答时钟设定为9MHZ,为HCLK/8的最大值时,产生1ms的基准
初始化完成后,即可实现延时
将延时加载到LOAD寄存器中,并且清空计数器,等待时间到达,关闭计数器,清空计数器
间间隔
简单的说ticks的值就是relaod的值,中断会在val==0的时候产生,两次中断就是val的值从reload到0的时间
从初始值开始,向下计数,计数到0,产生中断,如此反复

使用SysTick实现延时
选择外部时钟HCLK,八分频,此时时钟为9MHZ

初始化完成后,即可实现延时
将延时加载到LOAD寄存器中,并且清空计数器,等待时间到达,关闭计数器,清空计数器

相关文章:
Stm32的时钟系统以及使用SysTick滴答定时器实现延时
前言 STM32的时钟系统由多个时钟源和时钟树组成时钟源包括主时钟源(HSE)、内部高速时钟源(HSI)、内部低速时钟源(LSI)和外部低速时钟源(LSE)。时钟树由多个时钟分频器和时钟门控器组…...
重生c++系列之类与对象(中篇)
好的继上期,我们今天带来c类与对象系列的继续学习。 类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员 函数。 …...
Java中synchronized基本介绍和细节讨论。使用Synchronized来解决售票超卖问题
基本介绍 线程同步机制:在多线程编程下,一些敏感数据不允许被多个现在在同一时刻访问,此时就使用同步访问机制,保证数据在任何同一时刻最多只有一个进程访问,以保证数据的完整性。(即:当有一个线程在对内存…...
java内存分区
按照垃圾收集,将 Java 堆划分为**新生代 (Young Generation)和老年代(Old Generation)**两个区域, 新生代存放存活时间短的对象,而每次回收后存活的少量对象,将会逐步晋升到老年代中…...
【JavaScript】V8 引擎解析 JavaScript 的过程
V8 是由 Google 开发的 JavaScript 引擎,用于执行 JavaScript 代码。它被广泛应用于 Chrome 浏览器和 Node.js 等环境。V8 的解析和执行过程是一个复杂的流程,以下是其大致步骤: 词法分析(Lexical Analysis)࿱…...
Qt:界面实时响应鼠标拖动绘制
采用双缓冲实现界面实时响应鼠标的拖动绘制。 思想如下:首先需要两张画布pix和tempPix,他们都是QPixmap实例;pix用来保存初始界面或上一阶段以完成的绘制;tempPix用来作为鼠标拖动时的实时界面绘制;当鼠标左键按下后拖…...
Docker拉取RocketMQ及可视化界面
本文介绍Docker拉取RocketMQ及可视化界面操作步骤 Linux下安装Docker请参考:Linux安装Docker 文章目录 安装namesrv创建挂载目录授权相关权限拉取镜像运行容器查看运行情况 安装Broker创建挂载目录及配置文件目录授权相关权限创建配置文件运行容器查看运行情况 安装…...
花5分钟判断,你的Jmeter技能是大佬还是小白!
jmeter 这个工具既可以做接口的功能测试,也可以做自动化测试,还可以做性能测试,其主要用途就是用于性能测试。但是,有些公司和个人,就想用 jmeter 来做接口自动化测试。 你有没有想过呢? 下面我就给大家讲…...
macOS - 安装 Python 及地址
文章目录 Python 官方安装包Pip3Applications - PythonMiniconda多个python环境有多种方式安装 python,比如 Python 官方包、anaconda、miniconda、brew 等 这里记录使用 Python 官方包进行安装,和 miniconda 安装方式,以及安装后 各执行文件、安装包的地址。 明确这些地址后…...
前端组件库造轮子——Tree组件开发教程
前端组件库造轮子——Tree组件开发教程 前言 本系列旨在记录前端组件库开发经验,我们的组件库项目目前已在Github开源,下面是项目的部分组件。文章会详细介绍一些造组件库轮子的技巧并且最后会给出完整的演示demo。 文章旨在总结经验,开源分…...
java打war包、jar包方式,java运行war包、jar包方式
Java spring boot部署到生产环境有两种常见方式 1打jar包,使用了内置的tomcat服务器,流程简单 2打war包,可以放标准tomcat服务器中 jar包 1pom.xml新增 <build><plugins><plugin><groupId>org.springframework.b…...
“超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据,ChatGLM-v2、中文Bloom、Dolly_v2_3b助您实现更智能的应用!”
“超级AI助手:全新提升!中文NLP训练框架,快速上手,海量训练数据,ChatGLM-v2、中文Bloom、Dolly_v2_3b助您实现更智能的应用!” 1.简介 目标:基于pytorch、transformers做中文领域的nlp开箱即用…...
空时自适应处理用于机载雷达——机载阵列雷达信号环境(Matla代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
lib61850 学习笔记一 (概念)
IEC61850 定义60多种服务满足变电站通信需求。支持在线获取数据模型,也支持IED水平通信(GOOSE报文) 术语定义 间隔 bay: 变电站由据应公共功能紧密连接的子部分组成。 例如 介于进线或者 出线 和母线之间的断路器;二条母线之间…...
【深度学习】半监督学习 Efficient Teacher: Semi-Supervised Object Detection for YOLOv5
https://arxiv.org/abs/2302.07577 https://github.com/AlibabaResearch/efficientteacher 文章目录 AbstractIntroductionRelated WorkEfficient TeacherDense Detector Abstract 半监督目标检测(SSOD)在改善R-CNN系列和无锚点检测器的性能方面取得了成…...
vue3鼠标拖拽滑动效果
第一步 在utils下面新建一个directives.js文件,然后引入如下代码 const dragscroll (el) > {el.onmousedown ev > {const disX ev.clientX;const disY ev.clientY; // 需要上下移动可以加const originalScrollLeft el.scrollLeft;const originalScroll…...
08 通过从 库1 复制 *.ibd 到 库2 导致 mysql 启动报错
前言 呵呵 最近同事有这样的一个需求 需要将 库1 的一张表 复制到 库2 然后 我想到了 之前一直使用的通过复制这个库的 data 文件来进行数据迁移的思路, 是需要复制这个 库对应的 data 目录下的数据文件, 以及 ibdata1 文件 然后 我又在想 这里的场景能否也使用这里的额方式…...
一生一芯9——ubuntu22.04安装valgrind
这里安装的valgrind版本是3.19.0 下载安装包 在选定的目录下打开终端,输入以下指令 wget https://sourceware.org/pub/valgrind/valgrind-3.19.0.tar.bz2直至下载完成 解压安装包 输入下面指令解压安装包 tar -xvf valgrind-3.19.0.tar.bz2.tar.bz2注…...
STM32中BOOT的作用 (芯片死锁解决方法)
BOOT stm32中具有BOOT1和BOOT0 作用 BOOT是stm32单片机的启动模式, 通过不同组合模式,共有三种启动方式。 一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置B…...
基于YOLOv8模型和DarkFace数据集的黑夜人脸检测系统(PyTorch+Pyside6+YOLOv8模型)
摘要:基于YOLOv8模型和DarkFace数据集的黑夜人脸检测系统可用于日常生活中检测与定位黑夜下的人脸,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目…...
Vue 3.4+ 实验性/新特性深度实战(2026版)
一、背景:从“稳定”到“极致体验”截至 2026 年,Vue 3.4 与 3.5 已全面普及,但许多能显著降低心智负担的特性(如 defineModel)在早期被标记为“实验性”,或仅在 3.5 才完全稳定。如果你还在写“Pr…...
手把手教你用VSCode快速定位并修改RuoYi框架的页面标题和图标(避坑指南)
高效定制RuoYi前端界面:VSCode全局搜索实战指南 刚接触RuoYi框架的开发者常会遇到这样的困扰:想修改浏览器标签页标题或系统Logo,却不知从何下手。前后端分离的项目结构让配置文件散落在各处,而手动翻找无异于大海捞针。本文将带你…...
3步快速解密QQ音乐加密文件:QMCDecode终极免费解决方案
3步快速解密QQ音乐加密文件:QMCDecode终极免费解决方案 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认…...
5个步骤掌握PatternMaster图案生成工具:提升设计效率的自动化解决方案
5个步骤掌握PatternMaster图案生成工具:提升设计效率的自动化解决方案 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 在数字设计领域,效率与创意往往难以兼…...
ncmdumpGUI:网易云音乐加密文件转换的完整解决方案
ncmdumpGUI:网易云音乐加密文件转换的完整解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 一、初识ncmdumpGUI:解密音乐文件的…...
STM32F767串口接收不定长数据实战:超时中断与空闲中断的配置与性能对比
1. STM32F767串口接收不定长数据的痛点与解决方案 在嵌入式开发中,处理串口不定长数据就像在餐厅等一份不知道有多少道菜的套餐——你永远不知道下一口是什么,也不知道什么时候结束。STM32F767作为高性能MCU,面对RS485、Modbus等协议时&#…...
Phi-3-mini-4k-instruct-gguf应用案例:HR招聘话术生成、产品FAQ自动整理、日报模板填充
Phi-3-mini-4k-instruct-gguf应用案例:HR招聘话术生成、产品FAQ自动整理、日报模板填充 1. 模型简介 Phi-3-mini-4k-instruct-gguf是微软推出的轻量级文本生成模型,特别适合处理问答、文本改写和内容整理等任务。这个GGUF版本的模型经过优化࿰…...
AIVideo效果对比展示:不同参数下的视频生成质量评测
AIVideo效果对比展示:不同参数下的视频生成质量评测 1. 开场白:参数设置对视频效果的影响 你有没有遇到过这样的情况:用AI生成视频时,明明输入的内容一样,但出来的效果却天差地别?有时候画面模糊不清&…...
AW88195音频编解码器驱动从MTK到RK平台的移植实践
1. 认识AW88195音频编解码器驱动移植 第一次接触AW88195音频编解码器驱动移植时,我也是一头雾水。这个来自艾为的音频芯片主要用于提升扬声器音质,但厂商提供的驱动包往往只适配特定平台。比如这次遇到的AW88195_Driver_MTK_V0.1.6.zip就是专门为MTK平台…...
SpringBoot微服务架构:集成AnythingtoRealCharacters2511实现分布式转换服务
SpringBoot微服务架构:集成AnythingtoRealCharacters2511实现分布式转换服务 1. 引言 想象一下,一个电商平台每天需要处理成千上万的动漫风格商品图片,想要将它们转换为真实人像风格来提升商品吸引力。传统方案要么依赖人工设计效率低下&am…...
