尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

STM32系统时钟与SysTick定时器

STM32系统时钟与SysTick定时器
📅 发布时间:2026/6/19 13:07:54

一、系统嘀嗒定时器(SysTick)全面解析

1. SysTick定时器基本概念

定时器是STM32 中常用的外设,一般定时器的基本功能就是定时,而在Cortex M3/M4 内核中也包含一个简单的定时器,就是系统嘀嗒定时器(Systick),它是属于M4 内核的一个外设,内嵌在NVIC 中,所有基于Cortex-M3/M4 内核的MCU 中都包含这个Systick 定时器,所以在不同的硬件中移植起来非常方便。
由于Systick 定时器属于CM4内核,所以大家在STM32F4 中文参考手册中是找不到关于Systick时器的相关信息,所以可以在CM3 权威指南或者Cortex M3/M4 权威指南中找到。

image-20251121125816571

image-20251121125829621


2. 基本应用

(1) 裸机开发:编写专门的延时函数,实现微秒、毫秒级别的延时,如作为闹钟或者延时。
(2) 操作系统:可以为RTOS 实时操作系统的任务调度提供时钟节拍,RTOS 的架构是并行的。

3.时钟分析

如果打算利用Systick 定时器进行定时,则必须清楚Systick 定时器的时钟频率,而定时器是挂载在总线下,而不同的总线的频率是不同的,而总线的频率是由时钟提供,而时钟的提供者又各不相同,所以必须要提前了解时钟源的区别。

一般情况下一款MCU 有多种时钟源(用于提供时钟信号),时钟源一般可以分为两类:内部时钟源、外部时钟源,每一种时钟源的频率都是各不相同的。

结论:不清楚时钟源的频率,就无法计算总线的频率,从而无法计算挂载在总线下外设的频率。

image-20251121130113556

可以看到,MCU 提供5 种时钟源,分别是HSI、HSE、LSI、LSE、PLL,每种时钟源的频率都
是不同的。

(1) HSE 高速外部时钟

image-20251121130138991

(2) HSI 高速内部时钟

image-20251121130203711

(3) LSE 低速外部时钟

image-20251121130226097

(4) LSI 低速内部时钟

image-20251121130246822

(5) PLL 倍频锁相环

image-20251121130307658

由于PLL 锁相环是需要HSE 高速外部时钟提供时钟信号,并且PLL 可以把较低的HSE 时钟频率进行放大,则需要用户修改工程中的PLL 参数以及修改工程中的HSE_VALUE

MCU 主频的计算 = ( HSE_VALUE / PLL_M * PLL_N ) / PLL_P = (8MHz / 8 * 336) / 2 = 168MHz !!!!

4.时钟选择

通过M3 内核文档可以知道Systick 定时器有2 个时钟源,一个是内部时钟(FCLK),一个是外部时钟(STCLK)

image-20251121130434402

可以知道,Systick 定时器的内部时钟的频率是168MHZ,外部时钟的频率是168MHZ/8 =21MHZ 。

(1) 内部时钟
如果选择使用内部时钟(168MHZ)作为系统嘀嗒定时器的时钟源,则嘀嗒定时器的计数周期:1000000us 生成168000000 个脉冲,意味着 1us 可以生成168 个脉冲,所以计数周期等于1/168us。

(2) 外部时钟
如果选择使用外部时钟(21MHZ)作为系统嘀嗒定时器的时钟源,则嘀嗒定时器的计数周期:1000000us 生成21000000 个脉冲,意味着 1us 可以生成21 个脉冲,所以计数周期等于1/21us。

5.控制方式

image-20251121130546722

image-20251121130604368

二、系统嘀嗒定时器延时

程序设计

/********************************************************************************* @file    delay.c * @author  qrshxc@163.com* @version V1.0* @date    2025.7.23* @brief   基于SysTick定时器实现微秒、毫秒、秒级延时函数********************************************************************************/#include "stm32f4xx.h"/*** @name      delay_us* @brief     微秒级延时函数* @param     nus: 延时的微秒数* @return    无* @version   1.0* @note      使用SysTick定时器实现精确微秒延时*/
void delay_us(u32 nus)
{SysTick->CTRL = 0;    					 // 关闭系统嘀嗒定时器SysTick->LOAD = nus * 21 -1; 			// 计数次数,递减计数,0结束SysTick->VAL = 0;    					 // 清除当前数值寄存器SysTick->CTRL = 1;   					 // 打开系统嘀嗒定时器,使用参考时钟while ((SysTick->CTRL & 0x00010000)==0); // 等待计时完成SysTick->CTRL = 0;   					 // 关闭系统嘀嗒定时器
}/*** @name      delay_ms* @brief     毫秒级延时函数* @param     nus: 延时的毫秒数* @return    无* @version   1.0* @note      使用SysTick定时器实现精确毫秒延时*/
void delay_ms(u32 nus)
{SysTick->CTRL = 0;   					 // 关闭系统嘀嗒定时器SysTick->LOAD = nus * 21 * 1000 -1; 	 // 计数次数,递减计数,0结束SysTick->VAL = 0;     					 // 清除当前数值寄存器SysTick->CTRL = 1;   					 // 打开系统嘀嗒定时器,使用参考时钟while ((SysTick->CTRL & 0x00010000)==0); // 等待计时完成SysTick->CTRL = 0;   					 // 关闭系统嘀嗒定时器
}/*** @name      delay_s* @brief     秒级延时函数* @param     nus: 延时的秒数* @return    无* @version   1.0* @note      通过调用毫秒延时函数实现秒级延时*/
void delay_s(u32 nus)
{while(nus--){delay_ms(500);  // 延时500毫秒delay_ms(500);  // 再延时500毫秒,合计1秒}
}

相关新闻

  • 【Linux】教你在 Linux 上搭建 Web 服务器,步骤清晰无门槛 - 详解
  • 【第7章 I/O编程与异常】\r\n 和 \n\r是一回事吗?
  • 2025-11-21

最新新闻

  • 实木全屋定制哪家专业?临沂本地实木定制品牌综合排行参考 - 新闻快传
  • 用scikit-learn构建可解释的棒球预测模型
  • MPC555/556开发支持:调试模式、开发端口与寄存器详解
  • 2026合肥全域名表变现渠道盘点,连锁奢品行合扬综合实力位居前列 - 开心测评
  • BP Eva 赋能全周期绩效管理,让每轮考核沉淀员工能力成长档案
  • 2026年6月最新劳力士中国官方售后服务热线地址网点及客服电话 - 劳力士服务中心

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号