【STM32学习】定时器寄存器配置、功能工作过程详解
迪丽瓦拉
2025-06-01 17:17:57
0

【STM32学习】定时器寄存器配置、功能工作过程详解

  • 零、参考
  • 一、引言
  • 二、功能以及寄存器说明
    • 1、最基本的定时功能(时基单元)
      • 1.1 框图
      • 1.2 工作流程
      • 1.3 寄存器介绍
        • 1.3.1 CR1寄存器
        • 1.3.2 CNT、PSC、ARR寄存器
        • 1.3.3 EGR寄存器
        • 1.3.4 RCR寄存器

零、参考

STM32-定时器详解
STM32个人笔记-定时器

一、引言

本文针对STM32F103系列单片机的定时器进行介绍。
主要是其常用功能的工作流程、以及寄存器的对应配置。

在这里插入图片描述

该图清晰的表明了各种定时器的参数与功能。其中,基础定时器基本上就只有最简单的计数到了然后触发中断的功能;通用和高级定时器,在其基础上还有PWM输出、捕获/比较、刹车、死区设置等功能。图片来源

二、功能以及寄存器说明

1、最基本的定时功能(时基单元)

1.1 框图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这是截取了参考手册中三种定时器的款图,对于下半部分该功能涉及不到。
对于定时器的始终来源CK_INT,大家可以根据RCC时钟树,查看时钟源频率是多少。
从CK_INT到CK_PSC,三种类型的定时器基本都是一致的;从CK_PSC到最后的中断触发,不同的是高级定时器还有一个重复数据定时器。也就是说高级定时器,并不是当计数器溢出之后就立即触发中断,其还会经过重复计数器的操作才会被触发。

影子寄存器:框图中带有阴影的寄存器,除了自己本体外,还有一个一模一样的影子寄存器。我们可以将本体理解为用来当作缓冲的,影子才是真正起作用的。为什么这样设计呢?比如,当定时器正在运行当中,此时ARR=36,CNT计数到32,就在这时,我们修改ARR为30,如果没有影子,那么CNT此时来说已经溢出了,会直接触发中断,但是很明显,由于我们的修改,怕破坏了当前定时器输出的周期,如果是PWM输出的话,在要求及其严格的场景下,可能会产生某些误差。所以增加了影子寄存器,当我们修改重要寄存器的时候会先放到本体寄存器,然后当当前周期结束时,才会由UEV事件触发,将本体中的设置放到影子中起作用。

在这里插入图片描述

从图中可以看出,当新值写入时,是先写入到本体,并未起作用。当当前运行周期结束后,才会将新值加载到影子中。

1.2 工作流程

对于基本和通用定时器:
PSC预分频器,根据设置的分频数,将CK_INT传递过来的时钟频率分频后,驱动CNT计数器计数。即计一个数的时间t是1/(TIMxCLK/(PSC+1))=(PSC+1)/TIMxCLK;那么将CNT中的数据计完,需要的时间为(ARR+1)*(PSC+1)/TIMxCLK。然后触发中断,ARR会将数据重新装到CNT中,然后执行中断服务函数。

例如,TIMXCLK=72MHz,PSC=7199,ARR=4999。则中断事件为t=(4999+1)*(7199+1)/ 72 * 1000000 = 0.5s,即500ms产生一次中断。注意时间与频率的关系。

而对于高级定时器:
当上述CNT计数溢出之后,并不是直接触发中断,而是触发重复计数器(RCR)计数,当RCR计数溢出之后,才会触发中断服务函数。

1.3 寄存器介绍

根据stm32固件库,我们可以看出,只需要对时基初始化结构体 TIM_TimeBaseInitTypeDef 结构体进行配置能,就能实现最基本的定时器功能。

先看该结构体中有哪些东西:

在这里插入图片描述

再看初始化函数:

在这里插入图片描述

不难发现,使用的寄存器有:CR1、PSC、ARR、CNT、RCR、EGR。
其中CNT寄存器,在框图中出现了。

1.3.1 CR1寄存器

在这里插入图片描述
在这里插入图片描述

位0:计数器使能,必须开启
位1:可以理解为中断使能;如果禁止了,就不在产生中断;影子寄存器的加载工作也会停止
位2:设置哪些事件能触发中断
位4-位6:5:计数方式的设置
位7:是否使用ARR的影子寄存器

1.3.2 CNT、PSC、ARR寄存器

这三个没什么好说的,知道如何计算中断时间就行。PSC和ARR的范围为1-65535。

在这里插入图片描述

1.3.3 EGR寄存器

在这里插入图片描述
在这里插入图片描述

对于高级和通用定时器,EGR寄存器还有很多其他功能,但是就对基本的使用来说,仅需设置这一位。

这一位什么意思呢?中断的产生都是硬件自动控制的(溢出等)。而这个是用来通过软件的方式触发中断或者事件更新的,进而将本体寄存器中的值放入到影子寄存器中。

例如,在固件库中,初始化的时候,这一位是设置为1的。即初始化的时候,立马触发一个中断,将该放的数据放到该放的位置。

1.3.4 RCR寄存器

该寄存器只有高级定时器才有。

在这里插入图片描述

在最基本的定时功能中,对于高级定时器来说,该位设置为0即可。

关于其最后两句话,通过下图很好理解。

在这里插入图片描述

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...