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

2023-05-16

【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寄存器
        • 1.3.5 DIER寄存器

零、参考

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:是否允许中断差触发UEV,进而更新影子寄存器
位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,否则,定时事件会感觉很长。固件库配置默认为0。

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

在这里插入图片描述

1.3.5 DIER寄存器

在定时功能下,只需要设置最后一位。

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

在库函数中,TIM_ITConfig函数就是用来是遏制允许中断的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • docker中accessTokens拉取私有git仓库

    背景 当需要git clone拉取私有库时 xff0c 传统的做法为将本机的ssh配置到gitlab中 但在docker中执行程序时需要拉取私有库 xff0c 此时无法为每个docker容器配置ssh 网上的一种方案为 xff0c 将配置好
  • Docker世界 -- 进阶篇(入门)

    一 Docker Compose 1 1 Docker Compose 介绍 1 1 1 简介 xff1a 传统的 docker 服务 xff0c 我们一般通过编写 Dockerfile 文件 xff0c 通过 build 命令创建一个镜像
  • 树莓派pico CMake工程 直接添加 .c .h文件

    假设工程名test1 xff0c 带main 的源代码文件 main c xff0c 要往工程里添加oled c oled h之类的源代码 直接添加为可执行文件 xff1a 编辑工程根目录的 CmakeLists txt add execu
  • 张量的通俗理解

    1 关于张量的四种定义 张量 在不同的运用场景下有不同的定义 xff08 1 xff09 张量是多维数组 xff0c 这个定义常见于各种人工智能软件 听起来还好理解 xff08 2 xff09 张量是某种几何对象 xff0c 不会随着坐标系
  • 如何搭建node_exporter

    如何搭建node exporter 1 观看条件 1 假设你已经看过上一篇文章 如何搭建普罗米修斯 Prometheus 2 假设你已经会搭建普罗米修斯 xff08 promethus xff09 3 上面两个假设 xff0c 只要满足一个
  • python类中初始化形式:def __init__(self)和def __init__(self, 参数1,参数2,···,参数n)区别

    前言 这两种初始化形式 xff0c 就类似于C 43 43 类中的构造函数 形式1 def init self span class token keyword class span span class token class name
  • Go语言操作grpc详细使用

    Go语言操作grpc详细使用 零 参考链接一 protobuf的详细使用二 grpc与protobuf的go文件的生成1 安装两个插件2 写proto文件3 编译proto文件 xff0c 生成go文件 三 grpc的详细使用1 一元RPC
  • Steghide使用教程及其密码爆破

    Steghide使用教程及其密码爆破 工具介绍 Steghide是一款开源的隐写术软件 xff0c 它可以让你在一张图片或者音频文件中隐藏你的秘密信息 xff0c 而且你不会注意到图片或音频文件发生了任何的改变 而且 xff0c 你的秘密文
  • 一道Gloang并发、锁的面试题,你会吗?

    Gloang并发 锁的面试题 1 题目描述2 问题分析2 1问题一2 2问题二2 3问题三2 4问题四2 5问题五 3 问题解决方法4 代码实现4 1 map前后加锁的方式4 2 sync map解决方式 1 题目描述 源地址 xff1a
  • 阿里云、腾讯云centos7安装mysql

    阿里云 腾讯云centos7安装mysql 1 下载2 解压与准备3 安装4 配置4 1配置数据库4 2查看默认密码4 3启动mysql4 4设置密码 5 开启远程登录5 1开放3306端口5 2开启远程登录6 参考链接 1 下载 镜像网站
  • go语言gin、net/http的优雅关机

    gin net http的优雅关机 什么是优雅关机 xff1f 优雅关机的实现参考链接 什么是优雅关机 xff1f http server运行过程中 xff0c 若进程被关闭 xff0c 那么正在处理的请求可能只被处理了一半就停止了 xff
  • C语言不详细记录

    C记录 1 内存管理2 结构体内存对其规则3 字符串函数4 二维数组5 const 指针6 字符串7 图片记录8 函数指针 1 内存管理 C语言内存讲解 详说内存分布和heap空间 2 结构体内存对其规则 C语言结构体对齐规则 C语言 结构
  • 【web压测】压测常用工具、压测指标到底是什么?

    压测常用工具 压测指标到底是什么 xff1f 一 压测指标 I1 QPS xff0c 每秒查询2 TPS xff0c 每秒事务3 RT xff0c 响应时间 二 压测指标 II三 压测工具1 ab2 go wrk 在window上压测 一
  • C语言结构体字节对其规则简述

    C语言结构体字节对其规则简述 规则描述示例示例一示例二 字节对齐规则 xff0c 一直不是很理解 xff0c 网上的答案也是参差不齐 规则描述 首先 xff0c 预处理指令 pragma pack n 可以改变默认对齐数进行字节对齐 n 取
  • 【STM32学习】SysTick定时器(嘀嗒定时器)

    SysTick定时器 一 参考资料二 时钟源选择与定时时间计算1 时钟源选择2 定时时间计算 三 SysTick Handler中断服务函数 一 参考资料 嘀嗒定时器 xff1a 时钟源 寄存器 二 时钟源选择与定时时间计算 结合正点原子的
  • 【STM32学习】GPIO口的八种工作模式

    GPIO口的八种工作模式 一 参考资料二 GPIO八种模式1 输入模式2 输出模式 三 施密特触发器1 电路2 电路计算 一 参考资料 GPIO原理图详解 强烈建议观看 xff1a GPIO为什么这样设计 xff1f 施密特触发器 原理 施
  • 【STM32学习】WWDG窗口看门狗

    STM32学习 WWDG窗口看门狗 x1f415 1 图展示WWDG原理2 复位 中断条件3 溢出时间计算4 与独立看门狗 x1f415 的对比 1 图展示WWDG原理 2 复位 中断条件 产生复位的情况 xff1a 当递减计数器数值递减到
  • 【STM32学习】时钟配置详解

    STM32学习 时钟配置详解 看懂时钟图结合代码外部高速时钟修改 看懂时钟图 在刚开始学习32的时候 xff0c 并不会在意这些 xff0c 或者即使看了也看的不是很明白 随着学习的深入 xff0c 我们发现看门狗 定时器 ADC很多外设都
  • vnc远程访问ubuntu18.04桌面系统 vncserver开机自启动

    文章目录 一 windows端准备二 ubuntu端准备三 远程连接桌面四 配置vncserver开机自启动 一 windows端准备 下载TightVNC xff1a https www tightvnc com 二 ubuntu端准备
  • 【STM32学习】定时器寄存器配置、功能工作过程详解

    STM32学习 定时器寄存器配置 功能工作过程详解 零 参考一 引言二 功能以及寄存器说明1 最基本的定时功能 xff08 时基单元 xff09 1 1 框图1 2 工作流程1 3 寄存器介绍1 3 1 CR1寄存器1 3 2 CNT PS