news 2026/4/15 10:27:17

STM32 - 滴答定时器 - 2

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32 - 滴答定时器 - 2

一、滴答定时器(SysTick)概述

SysTick 是Cortex-M 内核(如 STM32F103 用的 Cortex-M3)自带的24位递减定时器,属于内核级外设,而非 STM32 片上外设。核心用途:

  1. 裸机开发:实现微秒 / 毫秒级精准延时;
  2. RTOS 开发:作为系统心跳(Tick),支撑任务调度、时间片轮转;
  3. 通用场景:统计函数执行时间、实现简单定时任务。

二、相关寄存器

1、关键寄存器

寄存器作用
LOAD重装值寄存器,设置计数最大值
VAL当前计数值寄存器,可手动清零
CTRL控制 + 状态寄存器(时钟源选择、使能、中断使能、计数完成标志)
CALIB

校准值寄存器(一般用于 RTOS 节拍校准,裸机开发较少用)

2、CTRL 控制与状态寄存器

  • ENABLE:Systick的使能位。
  • TICKINT:在使用时选择Systick是否要产生中断。若把位2设置为1,则Systick在从初值倒计数到0时就会产生中断。
  • CLKSOURCE:设置为0,则Systick的时钟源就是外部时钟;设置为1,则Systick的时钟源就是内部时钟。选择如下图

3、LOAD寄存器

当计数器从 LOAD 的值递减到 0 时,会自动重载 LOAD 的值,重新开始计数(ENABLE = 1)。 寄存器的低24位有效。

4、VAL 当前计数值寄存器

读取时返回当前计数器的递减值

5、CALIB 校准值寄存器

主要用于 RTOS 中校准系统节拍,裸机开发几乎不用。

三、裸机 - 精确延时

基于STM32f103 - 标准库

1、寄存器配置

1> 选择配置寄存器延时1us,后面的函数调用其就可以实现

  • CTRL:0x00000005 -> 使能滴答定时器 + 选择 HCLK(72MHz)作为 SysTick 时钟源
  • LOAD:HCLK=72MHz ->1 us需要计数 72 次
  • VAL:让定时器从LOAD的数值重新开始计数,避免残留的计数值导致延时误差。
/** * @brief 微秒级延时 * @param xus 延时时长,范围:0~233015 * @retval 无 */ void Delay_us(uint32_t xus) { SysTick->LOAD = 72 * xus; //设置定时器重装值 SysTick->VAL = 0x00; //清空当前计数值 SysTick->CTRL = 0x00000005; //设置时钟源为HCLK,启动定时器 while(!(SysTick->CTRL & 0x00010000)); //等待计数到0 SysTick->CTRL = 0x00000004; //关闭定时器 }

2> 代码部分:

  • while(!(SysTick->CTRL & 0x00010000)); CTRL的 BIT16 是COUNTFLAG(计数完成标志位):当 SysTick 从 LOAD 值递减到 0 时,该位会自动置 1。这行代码的作用是 “循环等待,直到计数完成”,也就是等待延时时间到。
  • SysTick->CTRL = 0x00000004;关闭 SysTick 定时器(BIT0=0),避免定时器继续运行影响后续操作,BIT2 保持 1(不影响,仅关闭使能)。

2、毫秒/秒级延时

有了上面的微秒延时,实现毫秒/秒就简单了,只需要不停的调用微秒函数就可以了

1>ms延时

/** * @brief 毫秒级延时 * @param xms 延时时长,范围:0~4294967295 * @retval 无 */ void Delay_ms(uint32_t xms) { while(xms--) { Delay_us(1000); } }

2>s延时

/** * @brief 秒级延时 * @param xs 延时时长,范围:0~4294967295 * @retval 无 */ void Delay_s(uint32_t xs) { while(xs--) { Delay_ms(1000); } }

四、使用注意

滴答时钟实现的精准延时属于阻塞型延时在延时过程中,CPU 会持续等待延时完成,无法执行其他任务。在使用的时候要格外注意,以避免延时过多导致系统故障。

参考:@Barkley X

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/9 16:12:31

MySQL 8 环境中创建业务相关的数据库和关联表

文章目录 一、连接 MySQL 容器 二、创建数据库(UTF8mb4) 三、创建关联表(带外键,适合多表查询) 四、插入测试数据 五、多表查询核心练习(按场景分类) 场景1:基础内连接(INNER JOIN)—— 查“有订单的用户+订单信息” 场景2:左连接(LEFT JOIN)—— 查“所有用户+订…

作者头像 李华
网站建设 2026/4/12 1:36:30

单片机光伏太阳能锂电池发电手机充电器防过充无线充电输出设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

21-041、51单片机光伏太阳能锂电池发电手机充电器防过充无线充电输出设计产品功能描述: 本系统由STC89C52单片机、LCD1602液 晶显示、锂电池充电检测、太阳能发电、锂电池充电保护TP4056、升压稳压、无线充电模块组成。 1、通过太阳能电池板并接给锂电池供电&#x…

作者头像 李华
网站建设 2026/4/10 15:41:22

51单片机地震震动检测语音报警器检测系统131(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

51单片机地震震动检测语音报警器检测系统131产品功能描述: 本系统由STC89C52单片机、语音模块、短接检测及电源组成。 1、如果两根线短接了,则语音一直报警。除非按下复位按键或者断开电源,则语音不报警。 2、该设备可以作为简单震动报警器或…

作者头像 李华
网站建设 2026/4/7 21:11:08

导师严选10个AI论文工具,助继续教育学生轻松写论文!

导师严选10个AI论文工具,助继续教育学生轻松写论文! AI 工具如何助力论文写作? 在当前继续教育学生面临日益繁重的学术任务背景下,AI 工具正逐渐成为不可或缺的得力助手。无论是撰写开题报告、构建论文大纲,还是完成初…

作者头像 李华