STM32之四:TIM定时器(1-基本定时器)

目录

1. STM32有哪些定时器

2. 基本定时器

2.1 基本定时器主要功能

2.2 基本定时器的框图

2.2.1 时钟输入

 2.2.2 至DAC

2.2.3 至时基单元(重点)

2.2.4 影子寄存器

2.2.5  基本定时器寄存器说明

2.2.5.1 控制寄存器1(TIMx_CR1)

2.2.5.2 TIMx_DIER、TIMx_SR、TIMx_EGR

2.3 如何在STM32中进行基本定时器定时


1. STM32有哪些定时器

STM32定时器分为三种类型:高级定时器、通用定时器、基本定时器。

作为接触定时器的第一章节,本节介绍基本定时器,需要掌握如何通过定时器来产生指定时间的中断,其余影子寄存器等概念做了解。

STM32定时器分类(来源:B站江协科技—课件)

2. 基本定时器

2.1 基本定时器主要功能

    1. 提供基本定时中断功能

    2. 触发DAC同步电路

2.2 基本定时器的框图

基本定时器框图
2.2.1 时钟输入

首先从框图左上部分看,基本定时器的时钟输入只有一个,即:来自RCC的TIMxCLK,我们翻看下时钟树部分的框图STM32之二:时钟树,定时器2-7在APB1总线上,且对其频率有要求。“如果APB1预分频系数=1,则频率不变,否则频率*2”,我们知道,由于APB1最大频率为36MHz,SYSCLK时钟为72MHz,所以,APB1预分频器的系数=2,因此此处频率*2,即,至TIMxCLK的时钟为72MHz。因此,内部时钟CK_INT为72MHz

基本定时器时钟来源
 2.2.2 至DAC

CK_INT输入的矩形兵分两路,一路触发控制器至DAC。

基本定时器在芯片内部直接连接到DAC,并通过触发输出直接驱动DAC。

本节主要探讨定时器的基本定时中断作用,此功能不做过多介绍。

2.2.3 至时基单元(重点)

红框框到的地方为时基单元,时基单位由预分频器(PSC)、计数器(CNT)和自动重装载寄存器(ARR)组成。

预分频器(PSC):PSC是16bit的预分频器,可以对定时时钟进行1~65536之间的任何一个数进行分频。分频过后的时CKCNT=\frac{TIMxCLK}{PSC+1} 。PSC+1是因为实际PSC寄存器从0开始计数,PSC=0即代表不分频(或1分频),PSC=1即代表2分频,因此此处PSC需+1。

计数器(CNT):CNT是一个16bit的只向上计数的计数器,最大值为65535。当计数器中的数值达到自动重装载寄存器的值时产生更新时间,并清零从头开始计数。

自动重装载寄存器(ARR):ARR是一个16bit的寄存器,里面装着计数器能计数的最大值,当CNT中的值和ARR中的值一致时,如果使能中断,定时器会溢出中断。

那么,如果要定义1ms中断的时钟,PSC和ARR该如何取值呢?

定时器的时钟CK_CNT=CK_INT/(PSC+1),则计数器计数一次的时间=1/CK_CNT,当计数器计数数值达到ARR时候,产生一次中断。因此产生中断的时间可以计时为=(PSC+1)/ CK_INT*ARR

则PSC可以取值为71,ARR取值为1000,则(71+1)/72000000*1000 = 1ms

PS:PSC和ARR的取值不固定,满足公式即可

至此,即可给寄存器赋值来进行定时器中断。

2.2.4 影子寄存器

在基本定时器的框图中我们看到,标绿色的框框带有阴影。且时基单元中,自动重装载寄存器和预分频器也有阴影。这部分带有阴影的寄存器表示在物理上这个寄存器对应2个寄存器,其中一个是程序员可以写入或读出的寄存器,称为预装载寄存器,另一个是程序员看不见,但在操作中真正起作用的寄存器,称为影子寄存器。

我们观察STM32F10xx参考手册可以看到,影子寄存器被描述为缓冲。至于下句“可以在运行过程中改变它的数值,新的预分频数值将在下一个更新事件时起作用”,在运行中改变的其实是预装载寄存器,用户随时可以更改预装载寄存器的值,但是影子寄存器的值会在下一个更新事件时起作用。

预分频器介绍
2.2.5  基本定时器寄存器说明

虽然基本定时器只有定时和触发DAC两个功能,但是观看其寄存器,很多的标志位还是让人有些搞不清楚,在此将这些寄存器梳理下。

2.2.5.1 控制寄存器1(TIMx_CR1)

  • CEN: 

位0是一个标志位CEN,CEN意为计数器CNT使能位。

即CNT=1,使能计数器。CNT=0,关闭计数器,计数器不计数。因此可见,如果要进行定时器中断功能,必须要使CNT=1.

  • UDIS:

位1为UDIS,表示禁止更新位。由软件设置和清除,以使能或禁止UEV事件的产生。

UDIS=0,UEV使能。更新事件UEV可以由下列事件产生:

        -计数器CNT上溢或下溢。

        -设置UG位(UG位为事件产生寄存器TIMx_EGR的0位,置1表示由软件产生更新事件)

        -通过从模式控制器产生的更新(高级定时器功能,此处可以不看)

UDIS=1

        不产生UEV更新事件。

  • URS和OPM

位2为URS,URS表示UEV事件的请求源。

为3为OPM,OPM表示单脉冲模式。

 

  • ARPE :自动重装载预装载使能。

ARPE即ARR自动重装载寄存器是否开启影子寄存器,也叫做缓冲。

ARPE=1:TIMx_ARR寄存器没有缓冲;即关闭影子寄存器,预装载寄存器的内容直接传送到影子寄存器。

APPE=0:TIMx_ARR寄存器具有缓冲;即开启影子寄存器。当ARR被重新赋值之后,必须在下一次更新事件UEV发生后才能更新影子寄存器的值。(如果想更改完立即同步到影子寄存器,可以通过软件设置UG位产生更新事件)

可以看到图151中ARPE=0时,修改了TIMx_ARR的值为0x36,则计数器在0x36时已产生动作。而在图152中,ARPE=1,在计数器还未达到0x36时,将ARR的修改为0x36,但是在计数器=0x36时却为产生更新,在计数器达到上次ARR的值0xF5产生更新事件之后,ARR的值(影子寄存器)才更新为0x36。

2.2.5.2 TIMx_DIER、TIMx_SR、TIMx_EGR

这些寄存器的标志位有些多且易混杂,在此统一列出,方便分辨。

  • UDE 跟新DMA请求使能;UDE=0,禁止更新DMA请求;UDE=1,使能更新DMA请求。
  • UIE 更新中断使能;UIE=0,禁止更新中断;UIE=1,使能更新中断。
  • UIF 更新中断标志位;UIF=1表示产生更新中断,UIF=0表示未产生更新中断。
  • UG 是否开启软件产生更新事件。UG=1表示由软件产生更新中断。

这么多标志位,除了时基单元的寄存器,实际在我们定时器定时的时候,只需要用到:

        TIMx_CR1->CEN :计数器使能

        TIMx_DIER->UIE:允许中断

        TIMx_SR->UIF:是否产生中断;清除中断标志位

2.3 如何在STM32中进行基本定时器定时

例如若使用TIM6定时器定时1ms产生中断,则需要以下几个步骤

  1. TIM6时钟使能
  2. 初始化定时器参数(自动装载值、预分频系数、计数方式等)
  3. 设置TIM6允许中断(TIMx_DIER->UIE)
  4. 设置NVIC中断优先级
  5. 使能TIM6(TIMx_CR1->CEN )
  6. 编写中断服务函数(判断中断标志位和清楚中断标志位:TIMx_SR->UIF)

通过这几个步骤,就能实现使用基本定时器来定时产生更新中断。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux Polkit 权限提升漏洞:CVE-2021-4034安全分析与修复指南

Linux Polkit 权限提升漏洞:CVE-2021-4034安全分析与修复指南 作为网络安全领域的专家,我对近期发现的影响Linux系统的Polkit权限提升漏洞(CVE-2021-4034)进行了深入分析。Polkit,即PolicyKit,是一个在Lin…

ITK-二值阈值分割

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 什么是二值阈值分割? 二值阈值分割是一种常见的图像处理技术,用于将图像的像素值分成两个类别&#xff1…

【JVM系列】JVM调优

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

量化交易策略:KDJ策略的买入卖出点确认

KDJ指标简介 KDJ指标,全称随机指标(Stochastic Oscillator),是一种非常常用的技术分析指标,用于判断股票价格的超买和超卖状态。KDJ指标由三条线组成:K线、D线和J线。其中,K线代表快速移动平均线,D线代表慢速移动平均线,J线是K线与D线的差值。 KDJ策略的原理 KDJ策…

AT32F425C8T7 开发笔记

目录 0x00 AT32F425C8T7 引脚矩阵映射关系0x01 AT32_Work_Bench 图形化配置指南0x02 AT32串口打印函数0x03 AT32 串口中断函数0x04 AT32 延时函数 0x00 AT32F425C8T7 引脚矩阵映射关系 详情可见AT32手册 AT32的矩阵映射其实也就是开启端口的复用功能,但是它的功能…

HTML-缓动函数-贝萨尔曲线

缓动函数速查表 (easings.net)-cubic-bezier(.06,.44,.94,.7) ✿ cubic-bezier.com 展示了如何使用easeOutSine函数来实现一个元素的平滑移动动画。这个demo创建了一个按钮&#xff0c;当点击它时&#xff0c;会使页面上的一个元素向右平滑移动。 <!DOCTYPE html> <ht…

【Jetpack】Lifecycle之监听LifecycleObserver

关于LifecycleEventObserver Lifecycle可以添加观察者&#xff0c;从而让其它工作与周期变化保持一致 比如我们希望Dialog和Activity的生命周期一致&#xff0c;能够在Activity结束时自动关闭 可以通过如下代码来实现 与Lifecycle同步的Dialog package com.android.codeim…

GPTPDF: 利用 GPT 将 PDF 转为 Markdown

GPTPDF 是一款利用视觉模型&#xff08;GPT-4o&#xff09;将 PDF 转为 MD 文件的开源工具 它利用 PyMuPDF 将 PDF 拆分为图片&#xff0c;再利用 GPT 来判断是否能够转为纯文本&#xff0c;否则直接使用图片&#xff0c;所以能够比较好的还原排版、数学公式、表格、图片、图表…

计算机组成原理——寄存器

文章目录 1. 寄存器 2. 带寄存器的加法器 3. 时钟信号与计算速度 1. 寄存器 上一篇D触发器可以在时钟上沿存储1位数据。如果想存储多个位&#xff08;bit&#xff09;的数据&#xff0c;就需要用多个D触发器并联实现&#xff0c;这种电路称之为寄存器。 寄存器是计算机中央…

深入模拟版图工程师基础学习:CMOS工艺解析

作为模拟版图工程师&#xff0c;了解CMOS&#xff08;互补金属氧化物半导体&#xff09;工艺是非常重要的&#xff0c;以下是我们需要掌握的基本内容&#xff1a; 1.基础理论&#xff1a;理解CMOS工艺的基本原理和结构&#xff0c;包括NMOS和PMOS晶体管的构造及其工作原理。&a…

python 无监督生成模型

无监督生成模型在机器学习中扮演着重要角色&#xff0c;特别是当我们在没有标签数据的情况下想要生成新的样本或理解数据的内在结构时。一种流行的无监督生成模型是生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;。 1.python 无监督生成模型 GA…

使用element-resize-detector监听普通元素

说明&#xff1a;在进行后台系统开发时&#xff0c;经常会用到一些图表展示&#xff0c;当改变浏览大小后&#xff0c;这些图表本身是没有响应式的&#xff0c;可以借助第三方插件element-resize-detector来监听窗口的变化 一、element-resize-detector 安装 npm install elem…

适配手机《植物大战僵尸杂交版》最新整合包,附Android、iOS、Windows保姆级教程和工具合集!

最近&#xff0c;新版的《植物大战僵尸杂交版》火爆全网啊&#xff01;许多小伙伴不知道手机和电脑怎样安装设置才能畅玩《杂交版》&#xff0c;所以今天阿星特意为大家准备了一份安装工具集。 里面有安卓、iOS及电脑端的安装包&#xff0c;包含安装视频教程、修改器、防闪退、…

力扣931. 下降路径最小和

Problem: 931. 下降路径最小和 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义状态&#xff1a;我们定义dp[i][j]为从矩阵的第一行到达位置(i, j)的最小下降路径和。 2.初始化状态&#xff1a;对于矩阵的第一行&#xff0c;即i 0时&#xff0c;dp[0][j]就是矩阵的第一…

密码学:对称加密算法、非对称加密算法、哈希算法

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这一章节我们需…

重生之我要学后端0--HTTP协议和RESTful APIs

http和RESTful APIs HTTP协议RESTful APIs设计RESTful API设计实例 HTTP协议 HTTP&#xff08;超文本传输协议&#xff09;是用于分布式、协作式和超媒体信息系统的应用层协议。它是网页数据通讯的基础。工作原理简述如下&#xff1a; 客户端请求&#xff08;Request&#xf…

【期末速成】计算机操作系统 EP07 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;☀️☀️☀️2.1 考点十八&#xff1a;管程的概念与特征 一、前言&#x1f680;&#x1f680;&#x1f680; ☀️ 回报不在行动之后&#xff0c;回报在行动之中。 本文简介&#xff1a;本人是大二…

docker服务开机自启动设置

在Linux系统中&#xff0c;可以使用systemctl命令来设置Docker服务开机自启。以下是设置Docker开机自启的步骤和示例代码&#xff1a; 确保你已经安装了Docker并且服务正在运行。 sudo systemctl enable docker 使用以下命令来启用Docker服务开机自启&#xff1a; sudo system…

Django项目 - 合并PDF文件

合并PDF文件可以很好将信息做整合。 博主实现了下面功能&#xff1a; 检测上传的文件是否是PDF从本地拖拽PDF文件到该系统显示需合并文件总数对需合并PDF文件进行排序&#xff0c;删除可预览合并PDF文件下载合并好的PDF文件 代码存放在码云&#xff1a;代码 创作不易&#…

vue 组件el-tree添加结构指示线条

效果展示: 注意&#xff1a;组件中需要添加:indent"0" 进行子级缩进处理&#xff0c;否则会出现子级缩进逐级递增 :expand-on-click-node"false" 设置点击箭头图标才会展开或者收起 代码&#xff1a; <el-tree class"tree filter-tree" :da…