STM32定时器实战(1):内部时钟轻松实现秒表计时

本文最后更新于:2025年3月4日 晚上

一、引言

你是否曾好奇电脑的时钟计时是如何实现的?又或者觉得网络上的天气时钟很炫酷?

本文将基于实际项目经验,手把手教你:

  1. 掌握STM32定时器原理及配置
  2. 实现简单的秒表计时demo,获取现成可用的工程代码

二、基本概念

2.1 定时器的定义

单片机的定时器(Timer)是其内部的一个重要功能模块,主要用于计时、计数、生成精确的时间间隔或控制周期性操作。其本质上是一个计数器,通过对时钟脉冲进行计数来实现计时功能。时钟源可以是单片机的主时钟(内部晶振)或外部引脚输入的信号。

2.2 定时器的时基单元

时基单元是定时器的核心结构,由三部分组成,即计数器,预分频器,自动重装载寄存器

计数器:用于对时钟源信号进行计数,可以是递增计数递减计数

预分频器:用于将高频时钟信号分频,降低计数频率,从而延长定时时间范围。例如,主频为16MHz的单片机,通过预分频器分频为16分频后,计数频率变为1MHz(每1μs计数一次)。

自动重装载寄存器:设定的计数目标值,当计数器达到设定值(溢出)时,会自动重置为初始值(重装载值),并触发中断或事件。例如:16位定时器的最大计数值为2^16=65535,若设置重装载值为50000,则每50000次计数触发一次中断。

2.3 定时器级联功能

有的小伙伴可能会问,你这计时时长也太短了。即便是72,MHz的时钟源,也最多只能实现59秒的计时。如果想实现更长时间的计时,这就需要使用到定时器的级联功能,即将一个定时器的输出作为另一个计时器的输入。假设我们第一个计时器的计时时长为59秒,设定第二个计时器的自动重装载寄存器为2^16=65535,那么我们级联后的最大时长就为59*2^16=1074h。这就是指数爆炸的威力。

2.4 定时器的主要功能


STM32定时器实战(1):内部时钟轻松实现秒表计时
https://northfourta.github.io/2025/03/02/STM32%E5%AE%9A%E6%97%B6%E5%99%A8%E5%AE%9E%E6%88%98%EF%BC%9A%E5%86%85%E9%83%A8%E6%97%B6%E9%92%9F%E8%BD%BB%E6%9D%BE%E5%AE%9E%E7%8E%B0%E7%A7%92%E8%A1%A8%E8%AE%A1%E6%97%B6/
作者
Northfourta
发布于
2025年3月2日
许可协议