TIM定时器

一、TIM定时器

STM32高级定时器实战:PWM、捕获与死区控制详解-CSDN博客

玩转STM32_rivencode的博客-CSDN博客

二、相关函数

1.TIM_TimeBaseInitTypeDef结构体讲解

typedef struct
{uint16_t TIM_Prescaler;         // 预分频器,用于设置定时器计数频率uint16_t TIM_CounterMode;       // 计数模式:向上、向下或中心对齐模式
// 自动重装载寄存器值,定时周期 = (TIM_Period + 1) * (Prescaler + 1) / Timer_Clockuint16_t TIM_Period;            uint16_t TIM_ClockDivision;     // 时钟分频(用于滤波器),对输入捕获/死区时间等有影响uint8_t  TIM_RepetitionCounter; // 重复计数器(高级定时器)
} TIM_TimeBaseInitTypeDef;

2.基本、通用、高级定时器

类型举例PWM输入捕获/输出比较死区控制互补输出重复计数器主从同步中断/定时功能
基本定时器TIM6、TIM7✅ 支持中断、定时
通用定时器TIM2~TIM5✅ 支持多种模式
高级定时器TIM1、TIM8✅ 功能最强大
分类功能特性常见用途
基本定时器只支持定时和中断简单定时中断、DAC 触发
通用定时器支持 PWM、输入捕获、输出比较等电机控制、PWM、信号测量
高级定时器通用功能 + 死区 + 互补 + 重复计数器等高级电机控制、逆变器、功率控制

3.TIM_ClearFlag函数讲解

用于 清除定时器中断/状态标志位。它的本质就是将 TIMx->SR 中某些标志位置 0。

void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_IT);
参数说明
TIMx要操作的定时器(如 TIM2, TIM3 等)
TIM_IT要清除的中断标志位,可以是以下值之一或它们的组合:
- TIM_IT_Update (更新中断)
- TIM_IT_CC1 ~ TIM_IT_CC4(通道中断)
- TIM_IT_Trigger(触发中断)
- TIM_IT_COM(通讯中断)
  • 必须清除标志位,否则定时器中断会不断重复进入。

  • 清除标志位 应该在中断处理函数中进行

  • 可以组合多个标志一起清除:

4.TIM_ITConfig函数讲解

开启或关闭指定的定时器中断源(如更新中断、捕获比较中断、触发中断等)。

void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
参数名含义
TIMx要配置的定时器,例如 TIM1 ~ TIM17(取决于芯片型号)
TIM_IT中断类型
NewStateENABLEDISABLE,表示启用或关闭该中断
宏定义含义
TIM_IT_Update更新中断(即计数器溢出)
TIM_IT_CC1捕获/比较 1 中断
TIM_IT_CC2捕获/比较 2 中断
TIM_IT_CC3捕获/比较 3 中断
TIM_IT_CC4捕获/比较 4 中断
TIM_IT_Trigger触发中断
TIM_IT_COM通讯中断(高级定时器)
TIM_IT_Break断路器中断(高级定时器)

此函数 不会 配置 NVIC,必须另外调用 NVIC_Init() 注册中断号;

TIM_ITConfig() 会设置 TIMx->DIER(DMA/中断使能寄存器) 中对应中断的使能位;

5.TIM_GetITStatus函数讲解

用于 查询某个定时器中断是否触发 的函数。

ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
参数说明
TIMx要查询的定时器(如 TIM1 ~ TIM17,具体取决于芯片型号)
TIM_IT要查询的中断源(如 TIM_IT_UpdateTIM_IT_CC1 等)

🔁 返回值:

  • SET:指定的中断标志已经被置位,即中断已经触发。

  • RESET:指定的中断标志未被置位。

TIM_GetITStatus() 会检查定时器的以下两个寄存器:

  1. TIMx->SR:状态寄存器,包含中断标志位

  2. TIMx->DIER:中断使能寄存器,对应中断是否使能

⚠️ 只有当中断标志位被置位,并且该中断已使能时,函数才返回 SET

6.TIM_ClearITPendingBit函数讲解

用于 清除定时器中断挂起标志位(Pending Bit)

void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);

当某个定时器中断发生时,标志位(比如 UIF)会在 SR 寄存器中置位,表示该中断事件已发生。如果不清除该标志位,下一次进入中断时,标志位仍然为1,会导致反复进入中断,造成“死循环”现象。因此,需要在中断服务函数中调用此函数清除中断标志位。该函数本质上就是对 TIMx->SR 寄存器中某些位写 0 来清除挂起标志。

void TIM3_IRQHandler(void)
{// 判断是否为更新中断if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  // 清除中断标志位// 执行你的中断处理逻辑}
}

7.TIM_ClearITPendingBit与TIM_ClearFlag有何区别

其实重点在Flag和IT,前者是外设的状态标志,而后者是外设的中断标志。状态标志就是一个外设它有自身的一些标志位(Flag),来表明它处于什么状态。中断标志就是使能外设的中断后,每次发生一次中断,它会表明发生了什么样的中断,同样中断也有相应的标记。两者分别靠函数TIM_GetFlagStatus()和函数TIM_GetITStatus()来获取。

TIM_ClearITPendingBit一般用于 中断服务函数中,防止中断反复进入。

TIM_ClearFlag通常用于轮询模式下清除标志位。

可以看出两个函数的实现基本一致。

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

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

相关文章

Python 小练习系列 | Vol.14:掌握偏函数 partial,用函数更丝滑!

🧩 Python 小练习系列 | Vol.14:掌握偏函数 partial,用函数更丝滑! 本节的 Python 小练习系列我们将聚焦一个 冷门但高能 的工具 —— functools.partial。它的作用类似于“函数的预设模板”,能帮你写出更加灵活、优雅…

开源 PDF.js 文件编辑操作

一、PDF.js PDF.js 是 Mozilla 基金会推出的一个使用 HTML5 构建的 PDF 阅读器,它完全使用 JavaScript 编写。作为 Firefox 浏览器的默认 PDF 查看器,PDF.js 具有强大的兼容性和稳定性。它不仅支持 PDF 文件的查看和渲染,还提供了丰富的交互…

3D珠宝渲染用什么软件比较好?渲染100邀请码1a12

印度珠宝商 Mohar Fine Jewels 和英国宝石商 Gemfields 在今年推出了合作珠宝系列——「Emeralds in Full Bloom」,它的灵感源自花草绽放的春季田野,共有 39 件作品,下面这个以植物为主题的开口手镯就是其中一件。 在数字时代,像这…

增益调度控制 —— 理论、案例与交互式 GUI 实现

目录 增益调度控制 —— 理论、案例与交互式 GUI 实现一、引言二、增益调度控制的基本原理三、数学模型与公式推导四、增益调度控制的优势与局限4.1 优势4.2 局限五、典型案例分析5.1 案例一:航空飞行控制中的增益调度5.2 案例二:发动机推力控制中的增益调度5.3 案例三:化工…

PyTorch数据加载流程解析

1. 定义最简单的Dataset import torch from torch.utils.data import Dataset, DataLoaderclass MyDataset(Dataset):def __init__(self, data):self.data data # 假设data是一个列表,如[10, 20, 30, 40]def __len__(self):return len(self.data) # 返回数据总量…

xsync脚本是一个基于rsync的工具

xsync脚本是一个基于rsync的工具,用于在集群间高效同步文件或目录。以下是xsync脚本的详细使用方法和配置步骤: 一、xsync脚本的作用 xsync脚本可以快速将文件或目录分发到集群中的多个节点,避免了手动逐台复制文件的繁琐操作。它利用rsync…

250408_解决加载大量数据集速度过慢,耗时过长的问题

250408_解决加载Cifar10等大量数据集速度过慢,耗时过长的问题(加载数据时多线程的坑) 在做Cifar10图像分类任务时,发现每个step时间过长,且在资源管理器中查看显卡资源调用异常,主要表现为,显卡…

Ansible的使用2

#### 一、Ansible变量 ##### facts变量 > facts组件是Ansible用于采集被控节点机器的设备信息,比如IP地址、操作系统、以太网设备、mac 地址、时间/日期相关数据,硬件信息等 - setup模块 - 用于获取所有facts信息 shell ## 常用参数 filter…

多模态大语言模型arxiv论文略读(六)

FashionLOGO: Prompting Multimodal Large Language Models for Fashion Logo Embeddings ➡️ 论文标题:FashionLOGO: Prompting Multimodal Large Language Models for Fashion Logo Embeddings ➡️ 论文作者:Zhen Wang, Da Li, Yulin Su, Min Yang,…

MySQL深入

体系结构 连接层:主要处理客户端的连接进行授权认证、校验权限等相关操作 服务层:如sql的接口、解析、优化在这里完成,所有跨存储引擎的操作在这里完成 引擎层:索引是在存储引擎层实现的,所以不同的存储引擎他的索引…

智能 SQL 优化工具 PawSQL 月度更新 | 2025年3月

📌 更新速览 本月更新包含 21项功能增强 和 9项问题修复,重点提升SQL解析精度与优化建议覆盖率。 一、SQL解析能力扩展 ✨ 新增SQL语法解析支持 SELECT...INTO TABLE 语法解析(3/26) ALTER INDEX RENAME/VISIBLE 语句解析&#…

数组划分使元素总和最接近

0划分 - 蓝桥云课 将一个数组划分为两个元素总和最接近的两个数组 要使得两组权值的乘积最大,根据数学原理,当两组权值越接近时,它们的乘积就越大。因此,可以将这个问题转化为一个 0 - 1 背包问题,把所有数的总和的一…

多线程代码案例(线程池)- 4

目录 引入 标准库中的线程池 -- ThreadPoolExecutor 研究一下这个方法的几个参数 1. int corePoolSize 2. int maximumPoolSize 3. long keepAliveTime 4. TimeUnit unit 5. BolckingQueue workQueue 6. ThreadFactory threadFactory 7. RejectedExecutionHandler h…

C,C++,C#

C、C 和 C# 是三种不同的编程语言,虽然它们名称相似,但在设计目标、语法特性、运行环境和应用场景上有显著区别。以下是它们的核心区别: 1. 设计目标和历史 语言诞生时间设计目标特点C1972(贝尔实验室)面向过程&#…

nginx 代理 https 接口

代码中需要真实访问的接口是:https://sdk2.028lk.com/application-localizationdev.yml文件中配置: url: http:/111.34.80.138:18100/sdk2.028lk.com/该服务器111.34.80.138上 18100端口监听,配置信息为: location /sdk2.028lk.c…

数据结构实验3.1:顺序栈的基本操作与进制转换

文章目录 一,问题描述二,基本要求三,算法分析四,示例代码五,实验操作六,运行效果 一,问题描述 在数据处理中,常常会遇到需要对链接存储的线性表进行操作的情况。本次任务聚焦于将链…

经典频域分析法(Bode图、Nyquist判据) —— 理论、案例与交互式 GUI 实现

目录 经典频域分析法(Bode图、Nyquist判据) —— 理论、案例与交互式 GUI 实现一、引言二、经典频域分析方法的基本原理2.1 Bode 图分析2.2 Nyquist 判据三、数学建模与公式推导3.1 一阶系统的频域响应3.2 多极系统的 Bode 图绘制3.3 Nyquist 判据的数学描述四、经典频域分析…

Vue知识点(5)-- 动画

CSS 动画是 Vue3 中实现组件动画效果的高效方式,主要通过 CSS transitions 和 keyframes 动画 CSS Keyframes(关键帧动画) 用来创建复杂的动画序列,可以精确控制动画的各个阶段。 核心语法: keyframes animationNa…

小型园区网实验

划分VLAN SW3 [sw3]vlan batch 2 3 20 30 [sw3]interface GigabitEthernet 0/0/1 [sw3-GigabitEthernet0/0/1]port link-type access [sw3-GigabitEthernet0/0/1]port default vlan 2 [sw3-GigabitEthernet0/0/1]int g0/0/2 [sw3-GigabitEthernet0/0/2]port link-type acces…

使用LangChain Agents构建Gradio及Gradio Tools(6)——创建自己的GradioTool

使用LangChain Agents构建Gradio及Gradio Tools(6)——创建自己的GradioTool 本篇摘要16. 使用LangChain Agents构建Gradio及Gradio Tool16.6 创建自己的GradioTool16.6.1 创建步骤16.6.2 创建示例StableDiffusionTool参考文献本章目录如下: 《使用LangChain Agents构建Grad…