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

news2025/1/19 11:33:18

目录

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.coloradmin.cn/o/1881032.html

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

相关文章

零刻SER8 8845HS设置RAID磁盘阵列教程

SER8内置两个NVme硬盘位,支持硬盘RAID功能,目前支持以下几种RAID模式。 Volume(卷):将多块硬盘拼接成一个大硬盘,也称为JBOD(Just a Bunch Of Disks)。它不要求硬盘容量相同&#xf…

设计模式 - 桥接模式,就要这样学!

目录 开始 为什么引入桥接模式 桥接模式概述 桥接模式实现 桥接模式的扩展性 开始 为什么引入桥接模式 问题:针对 不同品牌 的 不同类型手机 实现 open、close、call 操作. 如果将来新增一个手机类型,例如 IPhone,就需要继续写对应的三…

项目如何整合sentinel

1、添加依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifact…

嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间

目录 1 进程时间概念 2 times 函数 2.1 times 函数介绍 2.2 示例程序 3 clock 函数 3.1 clock 函数介绍 3.2 示例程序 1 进程时间概念 进程时间指的是进程从创建后&#xff08;也就是程序运行后&#xff09;到目前为止这段时间内使用 CPU 资源的时间总数&#xff0c;出…

音视频入门基础:H.264专题(7)——FFmpeg源码中 指数哥伦布编码的解码实现

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

【Apache Doris】周FAQ集锦:第 9 期

【Apache Doris】周FAQ集锦&#xff1a;第 9 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…

2024 InForSec@BCS网络空间安全国际学术研究交流会,同探网安技术创新与应用前沿

6月6日&#xff0c;2024年InForSecBCS网络空间安全国际学术研究交流会在北京国家会议中心成功举办&#xff0c;线上线下近千人参加了本次研讨会。 本次学术研究交流会主题为“网络安全技术创新与应用前沿”&#xff0c;邀请了国内从事人工智能安全、互联网基础设施安全、电磁安…

APP逆向 day7 JAVA基础2

一.前言 昨天我们讲了点java基础&#xff0c;大家是不是觉得就特别简单&#xff0c;今天讲点稍微难一丢丢的基础&#xff0c;也就是java基础2.0&#xff0c;今天我要和大家说的内容十分的重要&#xff0c;直接关乎到下一节的内容&#xff0c;所以&#xff0c;好好学&#xff0…

Python基础小知识问答系列-随机数相关

1. 问题&#xff1a; 如何生成x-y之间的随机整数&#xff1f; 如何生成0-1之间的随机浮点数&#xff1f; 如何生成x-y之间的随机浮点数&#xff1f; 如何从列表中随机获取一个元素&#xff1f; 如何从列表中随机获取多个元素&#xff1f; 如…

VQVAE:Neural Discrete Representation Learning

论文名称&#xff1a;Neural Discrete Representation Learning 开源地址 发表时间&#xff1a;NIPS2017 作者及组织&#xff1a;Aaron van den Oord,Oriol Vinyals和Koray Kavukcuoglu, 来自DeepMind。 1、VAE 简单回顾下VAE的损失函数&#xff0c;ELBO的下界为&#xff1a; …

qt for android 使用打包sqlite数据库文件方法

1.在使用sqlite数据库时&#xff0c;先将数据库文件打包&#xff0c;放置在assets中如下图: 将文件放置下android中的assets下的所有文件都会打包在APK中&#xff0c;可以用7zip查看apk文件 2.在qt代码读取数据文件&#xff0c;注意在assets下的文件都是Read-Only&#xff0c;需…

初阶数据结构之堆讲解

本篇文章带大家学习的是堆&#xff0c;还请各位观众老爷给个三连 正片开始 堆的概念 如果有一个关键码的集合 K { &#xff0c; &#xff0c; &#xff0c; … &#xff0c; } &#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中&#xff0c;并满…

HarmonyOS开发实战:加密类组件使用方法-API

加密类组件 模块介绍RSA提RSA供生成密钥加解密验签等系列方法(基于HarmonyOS API)AES提供AES生成密钥加解密等系列方法(基于HarmonyOS API)DES提供3DES生成密钥加解密等系列方法(基于HarmonyOS API)SM2提供SM2生成密钥加解密等系列方法(基于HarmonyOS API)SM3提供SM3生成摘要,…

vue 自定义组件 实现跟使用

新建文件组件 选择器作用 ~ 波浪线这个是选择 li 后面的所有 a标签 调用 到使用的文件下引入 使用 效果

类似李跳跳的软件有什么,强烈推荐所有安卓手机安装!!!

今天阿星分享一款让安卓手机更顺滑的神器——智慧岛。你问我李跳跳&#xff1f;由于大家都知道的原因&#xff0c;那是个曾经让广告无处遁形的神兵利器&#xff0c;可惜现在它已经退休了。不过别担心&#xff0c;智慧岛接过了接力棒&#xff0c;继续为我们的安卓体验保驾护航。…

爱情再启:庄国栋笑谈“玫瑰人生”爱情觉悟

庄国栋&#xff0c;这位电视剧《玫瑰的故事》中的男主角&#xff0c; 最近在一次采访中坦言&#xff1a;“如果给我一次重来的机会&#xff0c; 我绝对会毫不犹豫地选择爱情&#xff01;” 听到这话&#xff0c; 我不禁想&#xff0c;庄先生&#xff0c;您是不是被剧里的玫瑰…

42.HOOK引擎核心代码

上一个内容&#xff1a;41.HOOK引擎设计原理 以 40.设计HOOK引擎的好处 它的代码为基础进行修改 主要做的是读写寄存器 效果图 添加一个类 htdHook.h文件中的实现 #pragma once class htdHook { public:htdHook(); };htdHook.cpp文件中的实现&#xff1a; #include "…

Java并发编程基础知识点

目录 Java并发编程基础知识点1、线程&#xff0c;进程概念及二者的关系进程相关概念线程相关概念进程与线程的关系补充小知识点&#xff1a; 2、线程的状态Java线程的状态&#xff1a;Java线程不同状态之间的切换图示 3、Java程序中如何创建线程&#xff1f;①、继承Thread类②…

深入解析Java和Go语言中String与byte数组的转换原理

1.Java String与byte[]互相转换存在的问题 java中&#xff0c;按照byte[] 》string 》byte[]的流程转换后&#xff0c;byte数据与最初的byte不一致。 多说无益&#xff0c;上代码&#xff0c;本地macos机器执行&#xff0c;统一使用的UTF-8编码。 import java.nio.charset.S…

办理河南公司企业信用等级3A证书流程和条件

企业信用等级3A证书属于一种荣誉资质&#xff0c;是提升企业公信力和影响力保障的一项资质。信用等级是信用 (资信)评估机构根据企业资信评估结果对企业信用度划分的等级类别&#xff0c;它反映了企业信用度的高低。AAA信用等级是一种等级划分。代指企业的信用经过行业、机构评…