STM32 通用定时器基本原理(基于 STM32F1)

参考资料:STM32F1xx官方资料:《STM32中文参考手册V10》-第14章通用定时器

STM32 定时器分类

STM32F103 系列共有三类定时器:
在这里插入图片描述

🔎 通用定时器(TIM2~TIM5)是我们学习和使用最多的定时器。

STM32定时器:STM32F10x系列总共最多有8个定时器:
在这里插入图片描述

通用定时器主要特点

STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5) 定时器功能特点包括:

位于低速的APB1总线上(APB1)16位计数器(TIMx_CNT): [计数模式灵活:向上、向下、中心对齐]16 位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)。可配置预分频器(TIMx_PSC):1~65535 :16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数 为 1~65535 之间的任意数值。4个捕获/比较通道(TIMx_CH1~CH4):4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:1. 输入捕获 2. 输出比较3. PWM 生成(边缘或中间对齐模式) 4. 单脉冲模式输出 支持外部触发(ETR、ITRx):可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)的同步电路。支持中断/DMA :如下事件发生时产生中断/DMA(6个独立的IRQ/DMA请求生成器): ① 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ② 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) ③ 输入捕获 ④ 输出比较 ⑤ 支持针对定位的增量(正交)编码器和霍尔传感器电路 ⑥ 触发输入作为外部时钟或者按周期的电流管理

STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获) 或者 产生输出波形 (输出比较和 PWM) 等。
使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。

计数模式详解

通用定时器可以向上计数、向下计数、向上向下双向计数模式。

① 向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。
② 向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。
③ 中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。

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

模式描述
向上计数模式CNT 从 0 计到 ARR,溢出后回到 0,触发更新事件
向下计数模式CNT 从 ARR 计到 0,再跳回 ARR
中心对齐模式CNT ↑ 到 ARR,再 ↓ 到 0,形成对称三角波计数

更新事件(UEV)在溢出/下溢时触发,可以用于控制中断、PWM更新等等。

通用定时器工作过程:

在这里插入图片描述

通用定时器结构图:
在这里插入图片描述

各个寄存器功能汇总

定时器结构主要包括以上几个模块:

1. 时基单元(定时器核心)计数器(CNT)预分频器(PSC)自动重装载寄存器(ARR)更新事件(UEV)
用于产生周期性事件(如中断、PWM更新等)2. 输入捕获单元(IC)检测外部引脚电平变化(上升/下降沿)记录 CNT 值,实现精确计时3. 输出比较单元(OC)当 CNT = CCRx 时,产生比较事件可输出特定脉冲、PWM、高低电平等4. PWM输出单元通过改变 ARR(周期)和 CCRx(占空比)实现 PWM 波形输出核心寄存器有:
TIMx_CNT		当前计数值
TIMx_PSC		预分频值(决定定时器时钟频率)
TIMx_ARR		自动重装载值(决定计数上限)
TIMx_CCRx		捕获/比较寄存器,用于输入捕获或 PWM 输出占空比
TIMx_CR1		控制寄存器,配置使能、计数模式等
TIMx_DIER		中断使能寄存器
TIMx_SR			状态寄存器,标志中断源

通用定时器工作过程:
1️⃣ 时钟源选定
定时器时钟 = 外设总线时钟(APB1) × 倍频因子(如2)
例如:APB1 = 36MHz,TIM2~5 定时器频率为 72MHz
2️⃣ 预分频器(TIMx_PSC)
将定时器时钟进一步分频,比如设置为 7199,就变成了 10kHz
3️⃣ 自动重装载(TIMx_ARR)
决定了 CNT 的最大值。例如 ARR = 999,计数从 0~999,共 1000 次
4️⃣ 更新事件(UEV)
每次 CNT 溢出都会触发更新事件,可用于中断、PWM刷新等

计数时钟的选择:

在这里插入图片描述

时基单元:

在这里插入图片描述

更新事件:

在这里插入图片描述

捕捉比较阵列:

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

PWM模式:

在这里插入图片描述

不同功能模块分别适用的场景:

场景功能模块说明
周期中断时基单元通过 CNT+ARR+PSC 实现 1ms、1s 等周期事件
PWM 输出输出比较控制电机、LED 亮度等
输入捕获捕获比较测量波形周期、频率、脉宽
单脉冲输出输出比较产生一次性脉冲(如超声测距)

STM32 通用定时器(TIM2~TIM5)是功能最强大、应用最广泛的定时器模块之一,支持定时、PWM、捕获、比较等多种功能,是嵌入式开发中不可或缺的核心外设。其中,STM32 定时器支持多达 8 种计数时钟来源,通过灵活配置选择器、触发器、滤波器等模块,能够实现丰富的定时、计数、同步、捕获等复杂功能;配置 STM32 的 TIM2 定时器 进入 输入捕获模式, 用于 测量脉冲宽度(高电平时间、低电平时间或整个周期);而时基单元是定时器的“心跳引擎”,通过 PSC、ARR 和 CNT 控制定时器的计数行为与中断频率,是实现周期性任务的基础;STM32 的更新事件(UEV)是控制定时器影子寄存器同步、触发中断、启动 DMA 和外设同步的核心机制,支持自动、软件、从模式等多种触发方式,并可通过 URS 精细控制;STM32 通用定时器的捕捉比较阵列(Capture/Compare Array,简称 CC 阵列) :捕捉比较阵列是定时器功能的核心模块,支持灵活配置为输入捕获或输出比较,通过滤波器、分频器、比较器等子模块实现精准的信号测量与控制输出;最后,STM32 的 PWM 模式通过定时器的输出比较功能实现,ARR 控制周期,CCRx 控制占空比,通过边沿/中心对齐实现不同波形特性,是控制电机、LED、蜂鸣器的核心技术。

以上,欢迎有从事同行业的电子信息工程、互联网通信、嵌入式开发的朋友共同探讨与提问,我可以提供实战演示或模板库。希望内容能够对你产生帮助!

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

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

相关文章

【Go语言-Day 14】深入解析 map:创建、增删改查与“键是否存在”的奥秘

Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

Vue脚手架搭建项目+基础知识

1. 使用脚手架创建项目1.1 准备工作winR,在弹出的数据框中输入cmd,数据命令查看node以及npm版本 下载vue cli1.2 创建项目1.2.1 创建一个英文目录文件夹,cmd打开命令命令提示符1.2.2 vue ui命令打开控制台1.2.3 创建项目创建成功1.3 项目结构…

微信小程序下单页—地址列表页—新增地址页 页面交互

新增地址流程: 下单页 → 地址列表页 (1次跳转)地址列表页 → 新增地址页 (1次跳转)保存地址 → 返回地址列表页 (1次返回,自动刷新列表) 选择地址流程: 地址列表页 → 选中地址 → 返回下单页 (1次返回) 更换地址: 下单页 → 地址…

JVM与JMM

为了更清晰地对比JVM和JMM,我们可以采用表格形式,从定义、功能、结构、与多线程关系等方面进行详细比较: 对比项JVM(Java Virtual Machine)JMM(Java Memory Model)定义一种虚构的计算机&#x…

【Docker基础】Docker数据卷管理:docker volume rm及其参数详解

目录 1 引言:Docker Volume 的生命周期管理 2 docker volume rm命令基础 2.1 命令作用 2.2 命令语法 3 参数深度解析 3.1 基础参数表 3.2 高级参数详解 3.2.1 --force(-f) 4 Volume删除前置条件 4.1 可删除状态判断 4.2 常见报错处…

嵌入式系统内核镜像相关(十)

文章目录 前言一、点亮多个led灯的基础实验以及其中的问题1.1 基础流程1.1.1 alinx教程的问题1.1.1.1 驱动程序中的亮/灭逻辑修改!1.1.1.1.1 逻辑错误的修改1.1.1.1.2 多灯亮/灭 1.1.1.2 驱动程序中引脚的问题以及与裸机开发的区别(重要)1.1.…

Word和Excel批量转PDF新方法,操作简单

PDF是一种跨平台的文档格式,无论在任何设备上查看,其排版、字体和图像都不会发生变化。这确保了文档的一致性,避免了由于不同软件版本或操作系统引起的显示问题。这款小巧的工具大小不到2MB,使用起来异常简单。只需要把需要转换的…

AI搜索 MCP最佳实践

背景 那些 LLM 不知道的事 尝试直接询问LLM“今天天气如何”时,会发现LLM无法回答——它既不知道“今天”是哪天,也无法获取地理位置信息。这揭示了LLM的局限:缺乏与外部工具和实时数据的交互能力。 为解决这一问题,MCP&#x…

JVM 简介与作用

🚀 JVM 简介与作用 📚 深入理解 Java 虚拟机的核心概念与重要作用 📖 目录 🤔 什么是 Java 虚拟机(JVM)🌐 JVM 在 Java 生态中的核心地位🔀 JVM 跨平台原理剖析📝 总结 …

✨ OpenAudio S1:影视级文本转语音与语音克隆Mac整合包

✨ OpenAudio S1:影视级文本转语音与语音克隆Mac整合包 🚀 OpenAudio S1 简介 OpenAudio S1 是由 Fish Audio 开发的 Fish Speech 系列的最新一代人工智能语音生成模型。该模型旨在大幅提升 AI 语音生成的技术水平,为用户提供更加自然、富有表…

spring加载外部properties文件属性时,读取到userName变量值和properties文件的值不一致

问题 使用spring DI注入外部properties文件属性时&#xff0c;读取到userName变量值和properties文件的值不一致。 bean属性注入&#xff1a; <!--加载配置文件--> <context:property-placeholder location"classpath:*.properties"/><bean id"…

黑马点评系列问题之基础篇p7 06初识redis无法在虚拟机查到图形化界面存进去的键

问题描述 在RESP中输入了一些键(name,age等这些) 但是在图形化界面里面输入的&#xff0c;在非图形化界面就找不到&#xff0c;在非图形化界面里输入的&#xff0c;在图形化界面里就可以查到。 原因分析及解决 经过多次实验&#xff0c;发现是因为在添加键名的时候&#xff0…

在VMware虚拟机中安装Windows 98时,Explorer提示“该程序执行了非法操作,即将关闭”的解决办法

在使用iso文件&#xff08;MD5: 0E496B5DCC519F550AAF0BCFBB4A11EA&#xff09;安装Windows98时&#xff0c;遇到此提示。 虽然原因未知&#xff0c;也无需深入探究&#xff0c;但是根据网友在 https://www.bilibili.com/opus/435866522585702782 中给出的相似经验&#xff…

在浏览器中使用SQLite(官方sqlite3.wasm)

有人可能会问&#xff1a;既然浏览器里又内置得IndexedDB&#xff0c;而且在IndexedDB里存数据&#xff0c;关了浏览器数据也不会丢&#xff0c;为什么还要在浏览器里用SQLite? 实际上&#xff0c;当 IndexedDB 内的数据量增多&#xff0c;数据和数据之间的关系变得复杂&…

数据结构(Java)--位运算

前言 本文为本小白学习数据结构的笔记&#xff0c;将以算法题为导向&#xff0c;向大家更清晰的介绍数据结构相关知识&#xff08;算法题都出自B站马士兵教育——左老师的课程&#xff0c;讲的很好&#xff0c;对于想入门刷题的人很有帮助&#xff09; 为什么要使用为位运算 位…

秋招Day14 - Redis - 应用

Redis如何实现异步消息队列&#xff1f; List配合LPUSH和RPOP。 另外就是用 Redis 的 Pub/Sub 来实现简单的消息广播和订阅。 但是这两种方式都是不可靠的&#xff0c;因为没有 ACK 机制所以不能保证订阅者一定能收到消息&#xff0c;也不支持消息持久化。 Redis如何实现延时…

因果语言模型、自回归语言模型、仅解码器语言模型都是同一类模型

因果语言模型、自回归语言模型、仅解码器语言模型都是同一类模型 flyfish 因果语言模型&#xff08;causal Language Models&#xff09; 自回归语言模型&#xff08;autoregressive language models&#xff09; 仅解码器语言模型&#xff08;decoder-only language models&am…

jvm架构原理剖析篇

简单题&#xff08;5道&#xff09; 考查内容&#xff1a;JVM运行时数据区域 题干&#xff1a;Java虚拟机栈的主要作用是&#xff1f; A. 存储对象实例 B. 存储方法调用和局部变量 C. 存储静态字段 D. 存储字节码指令 正确答案&#xff1a;B 解析&#xff1a;虚拟机栈用于存储方…

智链万物:人工智能驱动的产业智能化革命

当生成式AI在艺术与创意领域掀起风暴&#xff0c;大型语言模型重塑信息交互方式时&#xff0c;一场更为基础、影响更为深远的变革&#xff0c;正在全球实体经济的根基处悄然发生并加速推进——这就是产业智能化。它并非简单的“机器换人”&#xff0c;而是人工智能&#xff08;…

python中上下文管理器 与 try finally有什么区别

目录 主要区别代码对比何时使用哪种方式 主要区别 语法简洁性 上下文管理器使用 with 语句&#xff0c;语法更简洁优雅try-finally 需要显式编写异常处理代码&#xff0c;更冗长 代码复用性 上下文管理器可以封装为类或函数&#xff0c;便于在多处复用try-finally 通常需要在每…