当前位置: 首页 > news >正文

STM32学习笔记——定时器

目录

一、定时器功能概述

1、基本定时器(TIM6&TIM7)

工作原理

时序

2、通用计时器(TIM2&TIM3&TIM4&TIM5)

时钟源

外部时钟源模式1&2

外部时钟源模式2

外部时钟源模式1

定时器的主模式输出

输入捕获

3、高级定时器(TIM1&TIM8)

重复计数器

DTG(Dead Time Generate)死区生成

刹车输入

二、定时器相关寄存器

1、TIMx_CR1/2 (TIMx_Control Register1/2) TIMx控制寄存器

2、TIMx_SMCR (TIMx_Slave Mode Control Register) 从模式控制器寄存器

3、TIMx_DIER (TIMx_DMA/Interrupt Enable Register) DMA/中断使能寄存器

4、TIMx_SR (TIMx_Status Register) 状态寄存器

5、TIMx_EGR (TIMx_Event Generation Register) 事件生成寄存器

6、TIMx_CCMR1/2 (TIMx_Capture/Compare Mode Register 1/2) 捕获比较寄存器1/2

7、TIMx_CCER (TIMx_Capture/Compare Enable Register) 捕获比较使能寄存器

8、TIMx_CNT (TIMx_Counter) 计数寄存器

9、TIMx_PSC (TIMx_Prescaler) 预分频寄存器

10、TIMx_ARR (TIMx_Auto-Reload Register) 自动重载寄存器

11、TIMx_CCR1/2/3/4 (TIMx_Capture/Compare Register1/2/3/4) 捕获/比较寄存器1/2/3/4

12、TIMx_DCR (TIMx_DMA Control Register) DMA控制寄存器

13、TIMx_DMAR (TIMx_DMA Address for Full Transfer) 全DMA传输地址寄存器

三、定时器配置


一、定时器功能概述

        “在STM32中,定时器一共分为基本定时器、通用定时器、高级定时器三种,定时器是STM32众多外设中的一个。”

        定时器顾名思义,即用作定时的外设,主要部分是一个带有自动重装载的16位累加计数器,计数器的时钟通过一 个预分频器得到。

        计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动重装载寄存器(TIMx_ARR)组成一个时基单元。

1、基本定时器(TIM6&TIM7)

        基本定时器有两大功能,一是定时功能,二是用于专门驱动数模转换器(DAC)。

        基本定时器分别是TIM6和TIM7,两者在功能上完全一致且互相独立,可同时使用。

工作原理

        基本定时器带有一个独立的、向上递增的可编程的计数器。当给自动重装载寄存器(TIMx_ARR)设置一个值并使能后,计数寄存器(TIMx_CNT)将从0开始向上计数。当计数寄存器与自动重装载寄存器相同的时候,就会产生一个向上溢出中断,并将计数寄存器中的值清零。

图1.1 基本定时器框图

        如图1.1,芯片本身无法完成计时,所以用户若想知道过去了多长时间则必须选择时钟源获取时间。一般来说,基本定时器只能从内部时钟获取时钟源。内部时钟(CK_INT)经过控制器后直接接到了预分频器寄存器(TIMx_PSC),并且变成了CK_PSC,可以认为CK_PSC就是CK_INT。根据不同需求,将会对时钟频率进行分割,得到一个新的输出的时钟频率CK_CNT。此后,时基单元正常工作。

时序

图1.2 预分频系数从1变到2的计数器时序图

        如图1.2,线1代表计数器开始使能(enable),在使能之前定时器时钟不运行;使能后定时器时钟在线3之前未分频,在线3之后二分频,并且此时计数器寄存器达到自动重装值,在线3时清零,之后从0重新计数。与此同时,在线3还会产生一个更新事件。下面的预分频器控制寄存器用于用户读写分频系数,并不直接影响分频。预分频器缓冲器又叫作影子寄存器,顾名思义,起缓冲作用,直接影响分频。它的作用是防止在计数过程中突然改变分频值造成的前后频率不一致。它会等到下一个计数周期,也就是线3时才会生效。预分频器计数器每次回到0时输出一个脉冲,对应线3和线4。

图1.2 预分频系数从1变到4的计数器时序图

        图1.2与图1.1原理相同,便不做赘述。


*内部时钟的频率一般是72MHz,预分频器写0代表一分频,写1代表二分频。可以这样简单记忆:分频就像切黄瓜,一刀(预分频器写1)两断(二分频),两刀三断...


2、通用计时器(TIM2&TIM3&TIM4&TIM5)

“通用定时器是在基本定时器的基础上,引入了外部引脚,通用定时器不仅仅能定时,还以定时为基础,发展出测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等功能。”

图2.1 通用定时器框图

时钟源

        通用定时器除了内部时钟外,还可以选择外部时钟作为时钟源。

图2.2 内部时钟源

选择外部时钟作为时钟源时,有四个输入通道,即TIMx_CH1/2/3/4,具体选择哪一个由用户配置。

外部时钟源模式1&2

图2.3 外部时钟源模式2外部触发输入模块

        外部时钟信号从TIM2_ETR (PA0引脚)进来后,经过极性选择和边沿检测器和预分频器,兵分两路。

外部时钟源模式2

        一路ETRF进入触发控制器,此后便可选择作为时基单元了。这一路叫做外部时钟源模式2。若想使用外部时钟或者把这个定时器当作计数器,那么配置这一路即可。

外部时钟源模式1

        另一路TRGI (Trigger In)有两个用途,第一个是触发从模式控制器;第二个是作为外部时钟源的输入,此时这一路叫做外部时钟源模式1。

        此外路径a、路径b、路径c也是外部时钟源模式1.

图2.4 外部时钟源模式1外部触发输入模块

        外部时钟源模式1和外部时钟源模式2是等价的,区别在于前者占用从模式触发器。

图2.5 通用定时器框图(局部)

        INR0/1/2/3是其他定时器的输入通道,相当于其他定时器的TRGO;同样地,该定时器的TRGO也连接至其他定时器的ITRx。如图2.7。这样可以实现定时器级联的功能。

图2.6 示意简图

具体连接如表2.1

表2.1

总而言之,外部时钟源模式1的输入可以是ETR引脚、TIM1_CH1、TIMx_CH2、其他定时器。

定时器的主模式输出

图2.7 定时器的主模式输出

        该电路可以把内部的一些事件映射到TRGO引脚上。

输出比较

图2.8 输出比较电路

        该电路用于输出PWM波、驱动电机等。

输入捕获

图2.9 输入捕获电路

        该电路用于测量输入信号的脉冲长度等。

3、高级定时器(TIM1&TIM8)

图3.1框内的电路与通用定时器相同。

图3.1 高级定时器

重复计数器

图3.2 重复计数器

        重复计数器可以实现每隔几个周期发生一次更新(基本定时器和通用定时器都是每个周期都要发生一次更新)

DTG(Dead Time Generate)死区生成

图3.3 死区生成电路

        可输出两个互补的PWM波,用于驱动三相无刷电机。

刹车输入

图3.4 刹车输入

        当TIMx_BKIN产生刹车信号,或者内部时钟失效,控制电路会自动切断电机的输出,确保安全。

图3.5 定时中断基本结构 (江科大自化协)

二、定时器相关寄存器

1、TIMx_CR1/2 (TIMx_Control Register1/2) TIMx控制寄存器

2、TIMx_SMCR (TIMx_Slave Mode Control Register) 从模式控制器寄存器

3、TIMx_DIER (TIMx_DMA/Interrupt Enable Register) DMA/中断使能寄存器

4、TIMx_SR (TIMx_Status Register) 状态寄存器

5、TIMx_EGR (TIMx_Event Generation Register) 事件生成寄存器

6、TIMx_CCMR1/2 (TIMx_Capture/Compare Mode Register 1/2) 捕获比较寄存器1/2

7、TIMx_CCER (TIMx_Capture/Compare Enable Register) 捕获比较使能寄存器

8、TIMx_CNT (TIMx_Counter) 计数寄存器

9、TIMx_PSC (TIMx_Prescaler) 预分频寄存器

10、TIMx_ARR (TIMx_Auto-Reload Register) 自动重载寄存器

11、TIMx_CCR1/2/3/4 (TIMx_Capture/Compare Register1/2/3/4) 捕获/比较寄存器1/2/3/4

12、TIMx_DCR (TIMx_DMA Control Register) DMA控制寄存器

13、TIMx_DMAR (TIMx_DMA Address for Full Transfer) 全DMA传输地址寄存器

三、定时器配置

使能寄存器时钟→定时器初始化→允许定时器中断→中断源配置→开启定时器→中断服务函数

若文章内容出现错误,恳请各位批评指正,感激不尽! 

相关文章:

STM32学习笔记——定时器

目录 一、定时器功能概述 1、基本定时器(TIM6&TIM7) 工作原理 时序 2、通用计时器(TIM2&TIM3&TIM4&TIM5) 时钟源 外部时钟源模式1&2 外部时钟源模式2 外部时钟源模式1 定时器的主模式输出 输入捕获…...

Android编程权威指南(第四版)- 第 4 章 UI状态的保存与恢复

文章目录 代码:依赖MainActivityQuizViewModelQuestion知识点代码: 大体是一样的,修改了一些 依赖 implementation("androidx.lifecycle:lifecycle-extensions:2.2.0")MainActivity package com.example.geoquizimport androidx.appcompat.app.AppCompatActivi…...

代理模式

如有错误或有补充,以及任何改进的意见,请留下您的高见 定义 代理模式是一种设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理模式是一种结构型模式,它可以在不修改源码的情况下增强方法,在方法前后增…...

C++三剑客之std::any(一) : 使用

相关系列文章 C三剑客之std::any(一) : 使用 C之std::tuple(一) : 使用精讲(全) C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二):深入剖析​​​​​​​ 目录 1.概述 2.构建方式 2.1.构造函数 2.2.std::make_any 2.3.operator分配新值 3.访问值…...

2024年:用OKR管理你的生活

在科技高速发展的时代,越来越多的企业和团队开始采用OKR(Objectives and Key Results)管理方法来设定目标并跟踪进度。你是否想过,将OKR理念引入个人生活,以更有效地实现人生目标?本文将探讨如何在2024年运…...

Lua迭代器以及各种源函数的实现

范型for 范型for的格式如下所示&#xff1a; for <var-list> in <exp-list> do<body> end var-list指变量名列表&#xff0c;可以为多个&#xff0c;exp-list指表达式列表&#xff0c;通常情况下只有一个值。可以更具体地写为另一种形式&#xff1a; fo…...

e5 服务器具备哪些性能特点?

随着云计算和大数据技术的不断发展&#xff0c;服务器作为数据中心的核心设备&#xff0c;其性能特点也日益受到关注。其中&#xff0c;E5服务器作为当前主流的服务器类型之一&#xff0c;具备许多优秀的性能特点。本文将详细介绍E5服务器的性能特点&#xff0c;帮助读者更好地…...

《C++ Primer Plus》《2、开始学习C++》

文章目录 0 前言&#xff1a;1 进入C1.1 main()函数1.2 C注释1.3 预处理器和iostream1.4 头文件名1.5 名称空间1.6 使用cout进行C输出1.7 C源代码的格式化 2 C语句2.1 声明语句和变量2.2 赋值语句2.3 cout语句 3 其他C语句3.1使用cin3.2 使用cout进行拼接3.3 类简介 4 函数4.1 …...

Backtrader 文档学习- Sizers

Backtrader 文档学习- Sizers 1.概述 智能仓位 Strategy提供了交易方法&#xff0c;即&#xff1a;buy&#xff0c;sell和close。看一下buy的定义&#xff1a; def buy(self, dataNone,sizeNone, priceNone, plimitNone,exectypeNone, validNone, tradeid0, **kwargs):注意&…...

基于YOLOv8算法的照片角度分类项目实践

目录 一、任务概述二、YOLOv8算法简介2.1 算法改进2.2 算法特点2.3 网络结构2.4 性能比较 三、工程实践3.1 安装算法框架库ultralytics3.2 库存照片预处理3.2.1 提取所有图片3.2.2 去除冗余的相同照片3.2.3 去除无车辆照片3.2.4 随机提取指定数量的图片 3.3 照片朝向分类3.3.1 …...

go语言进阶篇——面向对象(一)

什么是面向对象 在我们设计代码时&#xff0c;比如写一个算法题或者写一个问题结局办法时&#xff0c;我们常常会使用面向过程的方式来书写代码&#xff0c;面向过程主要指的是以解决问题为中心&#xff0c;按照一步步具体的步骤来编写代码或者调用函数&#xff0c;他在问题规…...

C#,栅栏油漆算法(Painting Fence Algorithm)的源代码

1 刷油漆问题 给定一个有n根柱子和k种颜色的围栏&#xff0c;找出油漆围栏的方法&#xff0c;使最多两个相邻的柱子具有相同的颜色。因为答案可以是大的&#xff0c;所以返回10^97的模。 计算结果&#xff1a; 2 栅栏油漆算法的源程序 using System; namespace Legalsoft.Tr…...

java_error_in_pycharm.hprof文件是什么?能删除吗?

java_error_in_pycharm.hprof文件是什么&#xff1f;能删除吗&#xff1f; &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333;hprof格式文件介绍&#x1f333;&#x1f333;java_error_in_pycharm.hprof文件什么情况下能删除&#x1f333;&…...

LeetCode 491 递增序列

给定一个整型数组, 你的任务是找到所有该数组的递增子序列&#xff0c;递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]说明: 给定数组的长度不会超过15。 数组中的整数范围是 [-…...

考研/计算机二级数据结构刷题之顺序表

目录 第一题 顺序表的初始化&#xff0c;销毁&#xff0c;头插&#xff0c;尾插&#xff0c;头删&#xff0c;尾删&#xff0c;指定位置插入&#xff0c;指定删除以及打印 第二题 移除元素 题目链接&#xff1a; OJ链接 题目详解&#xff1a;移除元素 第三题&#xff1a;删…...

Git 代码协同的使用方法 for Azure DevOps

1. 登陆Azure 步骤1.1. VS Code&#xff0c;登陆Azure Cloud的Ubuntu环境&#xff0c;如下&#xff1a; 重点: 这里的Azure Cloud的用户名是YourAzureUserName&#xff0c;口令是YourAzurePassword 步骤1.2. 登陆Azure Cloud的Ubuntu环境后&#xff0c;配置Git账户信息&…...

数据库学习笔记2024/2/5

2. SQL 全称 Structured Query Language&#xff0c;结构化查询语言。操作关系型数据库的编程语言&#xff0c;定义了 一套操作关系型数据库统一标准 2.1 SQL通用语法 在学习具体的SQL语句之前&#xff0c;先来了解一下SQL语言的通用语法。 1). SQL语句可以单行或多行书写&…...

PSM-Net根据Stereo图像生成depth图像

一、新建文件夹 在KITTI数据集下新建depth_0目录 二、激活anaconda环境 conda activate pt14py37三、修改submission.py文件 3.1 KITTI数据集路径 parser.add_argument(--datapath, default/home/njust/KITTI_DataSet/00/, helpselect model)3.2 深度图像输出路径 save…...

Mocaverse NFT 概览与数据分析

作者&#xff1a;stellafootprint.network 编译&#xff1a;mingfootprint.network 数据源&#xff1a;Mocaverse NFT Collection Dashboard Mocaverse 是 Animoca Brands 推出的专属 NFT&#xff08;非同质化代币&#xff09;系列&#xff0c;包含 8,888 个独特的 "M…...

SpringBoot之事务源码解析

首先事务是基于aop的&#xff0c;如果不了解aop的&#xff0c;建议先去看下我关于aop的文章: Spring之aop源码解析  先说结论&#xff0c;带着结论看源码。首先&#xff0c;在bean的生命周期中&#xff0c; 执行实例化前置增强&#xff0c;会加载所有切面并放入缓存&#xff0…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...