STM32定时器
目录
STM32定时器概述
STM32基本定时器
基本定时器的功能
STM32基本定时器的寄存器
STM32通用定时器
STM32定时器HAL库函数
STM32定时器概述
从本质上讲定时器就是“数字电路”课程中学过的计数器(Counter),它像“闹钟”一样忠实地为处理器完成定时或计数任务,几乎是所有现代微处理器必备的一种片上外设。 定时与计数的应用十分广泛。在实际生产过程中,许多场合都需要定时或者计数操作。例如产生精确的时间,对流水线上的产品进行计数等。因此,定时/计数器在嵌入式微控制器中十分重要。定时和计数可以通过以下方式实现:
1. 软件延时 单片机是在一定时钟下运行的,可以根据代码所需的时钟周期完成延时操作,软件延时会导致CPU利用率低。因此主要用于短时间延时,如高速A/D转换器。 延时的纯软件方式实现起来非常简单,但具有以下缺点: (1)对于不同的微控制器,每条指令的执行时间不同,很难做到精确延时。例如,在上面讲到的LED闪烁应用案例中,如果要使LED点亮和熄灭的时间精确到各为500ms,对应软件实现的循环语句中决定延时时间的变量nCount的具体取值很难由计算准确 得出。 (2)延时过程中CPU始终被占用,CPU利用率不高。 虽然纯软件定时/计数方式有以上缺点,但由于其简单方便、易于实现等优点,在当今的嵌入式应用中,尤其在短延时和不精确延时中,被频繁地使用。例如,高速ADC的转换时间可能只需要几个时钟周期,这种情况下,使用软件延时反而效率更高。
2. 可编程定时/计数器 微控制器中的可编程定时/计数器可以实现定时和计数操作,定时/计数器功能由程序灵活设置,重复利用。设置好后由硬件与CPU并行工作,不占用CPU时间,这样在软件的控制下,可以实现多个精密定时/计数。嵌入式处理器为了适应多种应用,通常集成多个高性能的定时/计数器。 微控制器中的定时器本质上是一个计数器,可以对内部脉冲或外部输入进行计数,不仅具有基本的延时/计数功能,还具有输入捕获、输出比较和PWM波形输出等高级功能。在嵌入式开发中,充分利用定时器的强大功能,可以显著提高外设驱动的编程效率和CPU利用率,增强系统的实时性
STM32内部集成了多个定时/计数器。根据型号不同,STM32 系列芯片最多包含8个定时/计数器。其中,TIM6和TIM7为基本定时器,TIM2~TIM5为通用定时器,TIM1和TIM8为高级控制定时器,功能最强。三种定时器具备的功能如表所示。此外,在STM32中还有两个看门狗定时器和一个系统滴答定时器。

可编程定时/计数器(简称定时器)是当代微控制器标配的片上外设和功能模块。它不仅可以实现延时,而且还完成其他功能: (1)如果时钟源来自内部系统时钟,那么可编程定时/计数器可以实现精确的定时。此时的定时器工作于普通模式、比较输出或PWM输出模式,通常用于延时、输出指定波形、驱动电机等应用中。 (2)如果时钟源来自外部输入信号,那么可编程定时/计数器可以完成对外部信号的计数。此时的定时器工作于输入捕获模式,通常用于测量输入信号的频率和占空比、测量外部事件的发生次数和时间间隔等应用中。
在嵌入式系统应用中,使用定时器可以完成以下功能:
(1)在多任务的分时系统中用作中断实现任务的切换。
(2)周期性执行某个任务,如每隔固定时间完成一次A/D采集。
(3)延时一定时间执行某个任务,如交通灯信号变化。
(4)显示实时时间,如万年历。
(5)产生不同频率的波形,如MP3播放器。
(6)产生不同脉宽的波形,如驱动伺服电机。
(7)测量脉冲的个数,如测量转速。
(8)测量脉冲的宽度,如测量频率。 从图看出,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器。

STM32基本定时器
STM32F103 基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。它们可以作为通用定时器提供时间基准,特别是可以为数模转换器(DAC)提供时钟。实际上,它们在芯片内部在直接连接到DAC并通过触发输出直接驱动DAC,这2个定时器是互相独立的,不共享任何资源。
TIM6和TIM7定时器的主要功能包括: (1)16位自动重装载累加计数器。 (2)16位可编程(可实时修改)预分额器,用于对输入的时钟按系数为1~65536之间的任意数值分频。 (3)触发DAC的同步电路。 (4)在更新事件(计数器溢出)时产生中断/DMA请求。 基本定时器内部结构如图所示。

基本定时器的功能
1. 时基单元 可编程通用定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器。这个计数器可以向上计数、向下计数或者向上向下双向计数。 计数器、自动装载寄存器和预分频器寄存器可以由软件读写,在计数器运行时仍可以读写。时基单元包含:计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)和自动装载寄存器(TIMx_ARR)。 时基单元包含:
(1)计数器寄存器(TIMx_CNT)。
(2)预分频寄存器(TIMx_PSC)。
(3)自动重装载寄存器(TIMx_ARR)。
2. 时钟源 从STM32F103基本定时器内部结构图可以看出,基本定时器TIM6和TIM7只有一个时钟源,即内部时钟CK_INT。 对于STM32F103所有的定时器,内部时钟CK_INT都来自RCC的TIMxCLK,但对于不同的定时器,TIMxCLK的来源不同。基本定时器TIM6和TIM7的TIMxCLK来源于APB1预分频器的输出,系统默认情况下,APB1的时钟频率为72MHz。 3. 预分频器 预分频可以以系数介于1~65536之间的任意数值对计数器时钟分频。它是通过一个16位寄存器(TIMx_PSC)的计数实现分频。因为TIMx_PSC控制寄存器具有缓冲作用,可以在运行过程中改变它的数值,新的预分频数值将在下一个更新事件时起作用。

4. 计数模式 STM32F103基本定时器只有向上计数工作模式,其工作过程如图所示,其中↑表示产生溢出事件。

基本定时器工作时,脉冲计数器TIMx_CNT从0累加计数到自动重装载数值(TIMx_ARR寄存器),然后重新从0开始计数并产生一个计数器溢出事件。由此可见,如果使用基本定时器进行延时,延时时间可以由以下公式计算: 延时时间=(TIMx_ARR+1) (TIMx_PSC+1)/TIMxCLK 当发生一次更新事件时,所有寄存器会被更新并设置更新标志:传送预装载值(TIMx_PSC寄存器的内容)至预分频器的缓冲区,自动重装载影子寄存器被更新为预装载值(TIMx_ARR)。以下是一些在TIMx_ARR=0x36时不同时钟频率下计数器工作的图示例子
STM32基本定时器的寄存器
现将STM32F103基本定时器相关寄存器名称介绍如下,可以用半字(16位)或字(32位)的方式操作这些外设寄存器,由于是采用库函数方式编程,故不作进一步的探讨。
(1)TIM6和TIM7控制寄存器1(TIMx_CR1)。
(2)TIM6和TIM7控制寄存器2(TIMx_CR2)。
(3)TIM6和TIM7 DMA/中断使能寄存器(TIMx_DIER)。
(4)TIM6和TIM7状态寄存器(TIMx_SR)。
(5)TIM6和TIM7事件产生寄存器(TIMx_EGR)。
(6)TIM6和TIM7计数器(TIMx_CNT).
(7)TIM6和TIM7 预分频器(TIMx_PSC)。
(8)TIM6和TIM7 自动重装载寄存器(TIMx_ARR)
STM32通用定时器
STM32内置4个可同步运行的通用定时器(TIM2、TIM3、TIM4、TIM5),每个定时都有1个16位自动加载的进加/递减计数器、1个16位的预分频器和4个独立的通道,通道都可用于输入捕获、输出比较、PWM和单脉冲模式输出。 每个定时器都有独立的DMA请求机制。通过定时器链接功能与高级控制定时器共同工作,提供同步或事件链接功能。 通用TIMx(TIM2、TIM3、TIM4和TIM5)定时器功能包括:
(1)16位向上、向下、向上/向下自动装载计数器。
(2)16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值。
(3)4个独立通道: ①输入捕获。 ②输出比较。 ③PWM生成(边缘或中间对齐模式)。 ④单脉冲模式输出。
(4)使用外部信号控制定时器和定时器互连的同步电路。
(5)如下事件发生时产生中断/DMA:
① 更新,计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)。 ② 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)。 ③ 输入捕获。 ④ 输出比较。 (6)支持针对定位的增量(正交)编码器和霍尔传感器电路。
(7)触发输入作为外部时钟或者按周期的电流管理。
STM32定时器HAL库函数

相关文章:
STM32定时器
目录 STM32定时器概述 STM32基本定时器 基本定时器的功能 STM32基本定时器的寄存器 STM32通用定时器 STM32定时器HAL库函数 STM32定时器概述 从本质上讲定时器就是“数字电路”课程中学过的计数器(Counter),它像“闹钟”一样忠实地为处…...
第七课 Vue中的v-for遍历指令
Vue中的v-for遍历指令 v-for用于对象遍历(数组/JSON),渲染数据列表 基础示例: <div id"app"><ul><li v-for"val in arr">{{val}}</li></ul></div><script>new V…...
【NTN 卫星通信】卫星通信的专利
1 概述 好久没有看书了,最近买了本讲低轨卫星专利的书,也可以说是一个分析报告。推荐给喜欢的朋友。 2 书籍截图 图1 封面 图2 波音低轨卫星专利演进 图3 低轨卫星关键技术专利发展阶段 图4 第一页 3 参考文献 产业专利分析报告–低轨卫星通信技术...
vue3 element table 插槽外的数据更新,插槽内的数据未更新。
在使用element table组件时候,有时候需要对table内部的header插槽进行单独的列的数据操作,比如在列头增加一个筛选功能,对指定范围的值进行一个筛选,需要对input的值进行v-model的绑定,对绑定的值进行清空时候…...
飞凌嵌入式FET527N-C核心板已适配OpenHarmony4.1
近期,飞凌嵌入式为FET527N-C核心板适配了OpenHarmony4.1系统——进一步提升了核心板的兼容性、稳定性和安全性。 OpenHarmony4.1在应用开发方面展现了全新的开放能力,以更加清晰的逻辑和场景化视角提供给开发者丰富的API接口,应用开发能力得…...
CVPR 2024最佳论文候选-pixelSplat论文解读
目录 一、概述 二、相关工作 1、单场景下的视角合成 2、基于先验的三维重建和视图合成 3、多视图几何测量 三、3DGS的缺点 1、容易陷入最小值 2、需要大量输入图像 3、尺度模糊性 四、pixelSplat 1、解决尺度模糊性(深度信息生成) 2、编码器…...
在Android中如何切割一张图片中的不规则“消息体/图片/表情包等等”?
在Android应用中,判断一张图片中“消息体”的大小,可以通过图像处理技术来实现。主要的步骤包括:将图像转换为灰度图,进行二值化处理,接着使用轮廓检测或边缘检测来识别消息体的边界,最后计算消息体的大小。…...
Jenkins+Ant+Jmeter接口自动化集成测试
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、Jenkins安装配置 1、安装配置JDK1.6环境变量; 2、下载jenkins.war,放入C:\jenkins目录下,目录位置随意; J…...
JavaSE——集合4:List接口实现类—LinkedList
目录 一、LinkedList的全面说明 二、LinkedList的底层操作机制 (一)LinkedList添加结点源码 (二)LinkedList删除结点源码 三、LinkedList常用方法 四、ArrayList与LinkedList的选择 一、LinkedList的全面说明 LinkedList底层实现了双向链表和双端队列的特点可以添加任意…...
FPGA图像处理之三行缓存
文章目录 一、前言二、FPGA实现三行缓存的架构三、Verilog代码实现四、仿真验证五、输入图像数据进行仿真验证 一、前言 在 FPGA 做图像处理时,行缓存是一个非常重要的一个步骤,因为图像输入还有输出都是一行一行进行的,即处理完一行后再处理…...
10月15日,每日信息差
第一、《哈利・波特与魔法石》在中国内地总票房突破 3 亿元,包括 2002 年首映的 5600 万,2020 年重映的 1.923 亿,以及 2024 年重映的 5170 万。 第二、全国铁路实施新货物列车运行图,增开城际班列至 131 列,多式联运…...
4G、5G通信中,“网络侧“含义
在5G通信中,"网络侧"这个术语可以指代不同的网络元素,具体取决于上下文。通常,网络侧可以包括以下两个主要部分: 基站(gNB): 基站是无线接入网(RAN)的一部分&a…...
spring boot核心理解-各种starter
理解 Spring Boot 的 Starter 机制以及如何选择和使用各种 starter,是开发 Spring Boot 应用的重要一环。Spring Boot Starter 是一组方便的依赖组合,用于简化 Spring 项目中的依赖管理。它们可以帮助开发者快速引入所需的库和自动配置,从而加…...
解决海外社媒风控问题的工具——云手机
随着中国企业逐步进入海外市场,海外社交媒体的风控问题严重影响了企业的推广效果与账号运营。这种背景下,云手机作为一种新型技术解决方案,正日益成为企业应对海外社媒风控的重要工具。 由于海外社媒的严格监控,企业经常面临账号流…...
全能PDF工具集 | PDF Shaper Ultimate v14.6 便携版
软件简介 PDF Shaper是一款功能强大的PDF工具集,它提供了一系列用于处理PDF文档的工具。这款软件使用户能够轻松地转换、分割、合并、提取页面以及旋转和加密PDF文件。PDF Shaper的界面简洁直观,使得即使是新手用户也能快速上手。它支持广泛的功能&…...
Maven入门
Maven Maven Wrapper 版本一致性: Maven Wrapper 允许你在项目中指定一个特定的 Maven 版本。这意味着所有开发人员和 CI/CD 环境都将使用相同版本的 Maven,从而避免由于版本不一致导致的问题。 简化设置: 新开发者克隆项目时,…...
Chromium 中window.DOMParser接口说明c++
一、DOMParser DOMParser 可以将存储在字符串中的 XML 或 HTML 源代码解析为一个 DOM Document。 备注: XMLHttpRequest 支持从 URL 可寻址资源解析 XML 和 HTML,在其response 属性中返回Document。 你可以使用XMLSerializer 接口执行相反的操作 - 将…...
linux 安装gitlab
安装环境 CentOS 7.7 (centos6.10会报错)2g内存防火墙关闭 安装步骤: 1 安装gitlab # yum install -y git curl policycoreutils-python openssh-server # 安装依赖 # wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.2-ce…...
java基础(5)继承与多态
目录 编辑 1.前言 2.正文 2.1继承 2.1.1继承概念 2.1.2继承语法 2.1.3子类访问父类 2.1.4super关键字 2.2多态 2.2.1多态概念 2.2.2多态条件 2.2.3重写 2.2.4向上转型与向下转型 2.2.5为什么要使用多态 3.小结 1.前言 哈喽大家好啊,今天继续来为大…...
Flink消费Kafka实时写入Doris
本文模拟实际生产环境,通过FileBeat采集日志信息到Kafka,再通过Flink消费Kafka实时写入Doris。 文章目录 Filebeat采集日志到KafkaFlink消费Kafka实时写入Doris总结 Filebeat采集日志到Kafka 常见的日志采集工具有以下几种:Flume、Logstash和…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
