STM32 TIM_SelectInputTrigger()函数

一、函数功能与定位

TIM_SelectInputTrigger()是STM32定时器外设的关键配置函数,用于设置从模式定时器的触发源(Trigger Source)​。其核心作用是将定时器的内部事件或外部信号映射为触发信号(TRGI),进而控制从定时器的计数行为(如启动/停止/复位等)。该函数属于STM32标准外设库(SPL)或HAL库的底层配置接口。


二、函数原型与参数解析

1. 函数原型
void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
  • TIMx:目标定时器指针(如TIM1TIM3)。
  • TIM_InputTriggerSource​:触发源类型,可选值见下表:
触发源类型功能描述
TIM_TS_ITR0 ~ ITR3内部触发源,用于定时器级联(如TIM2触发TIM3)
TIM_TS_TI1F_EDTI1引脚边沿检测器(上升沿+下降沿)
TIM_TS_TI1FP1通道1滤波后输入信号(TI1FP1),可配置单边沿
TIM_TS_TI2FP2通道2滤波后输入信号(TI2FP2)
TIM_TS_ETRF外部触发输入(ETR引脚信号)
2. 参数选择规则
  • 内部触发(ITRx)​​:用于定时器同步(如TIM1更新事件触发TIM2计数)。
    连接规则​:
    • ITR0:TIM1 → TIM2
    • ITR1:TIM1 → TIM3
    • ITR2:TIM1 → TIM4
    • (具体映射需查芯片参考手册)
  • 外部引脚触发​:需结合GPIO配置:
    • TI1FP1/TI2FP2需初始化对应通道引脚(如TIM3_CH1对应PA6)。
    • ETRF需使能ETR引脚(如TIM1_ETR对应PA12)。

三、底层机制:触发源与从模式的协同

1. 从模式控制器(Slave Mode Controller)​

触发源信号(TRGI)输入至定时器的从模式控制器,通过配置从模式(Slave Mode)​​ 决定响应行为:

从模式功能典型应用
TIM_SlaveMode_Reset触发时复位计数器CNT信号周期测量
TIM_SlaveMode_Gated触发信号高电平时计数脉冲宽度测量
TIM_SlaveMode_Trigger触发信号作为计数器时钟外部时钟同步
TIM_SlaveMode_External1ETR引脚上升沿计数编码器接口
2. 协同配置流程
// 步骤1:选择触发源
TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);  // 使用TIM3_CH1的滤波信号// 步骤2:设置从模式行为
TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); // 上升沿复位CNT

四、典型应用场景与代码实现

场景1:精确频率测量(复位模式)​

原理​:信号上升沿触发CNT复位,CCR直接存储周期计数值,无需计算差值。
配置代码​:

void TIM3_FreqMeasurement_Init(void) 
{// 时基配置(1MHz计数频率)TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;TIM_TimeBaseStruct.TIM_Period = 0xFFFF;TIM_TimeBaseStruct.TIM_Prescaler = 72 - 1;  // 72MHz/72 = 1MHzTIM_TimeBaseInit(TIM3, &TIM_TimeBaseStruct);// 输入捕获(通道1,上升沿)TIM_ICInitTypeDef TIM_ICStruct;TIM_ICStruct.TIM_Channel = TIM_Channel_1;TIM_ICStruct.TIM_ICPolarity = TIM_ICPolarity_Rising;TIM_ICStruct.TIM_ICFilter = 0x0;  // 无滤波TIM_ICInit(TIM3, &TIM_ICStruct);// 关键配置:触发源+从模式TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);TIM_Cmd(TIM3, ENABLE);
}// 读取频率(单位:Hz)
float Get_Signal_Frequency(void) {uint16_t capture = TIM_GetCapture1(TIM3);return 1000000.0f / capture;  // 1MHz时钟 → 周期 = capture μs
}

优势​:避免手动计算current_capture - last_capture,消除计数器溢出风险。


场景2:定时器级联(内部触发)​

原理​:主定时器更新事件触发从定时器计数,扩展定时范围。
配置代码​:

// TIM2为主,TIM3为从
void TIM2_Master_TIM3_Slave_Init(void) 
{// TIM2配置(输出触发信号)TIM_TimeBaseInit(TIM2, ...);TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);  // 更新事件触发TRGO// TIM3配置(从模式)TIM_TimeBaseInit(TIM3, ...);TIM_SelectInputTrigger(TIM3, TIM_TS_ITR2);  // TIM2→TIM3的触发源为ITR2TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Trigger);  // TRGI作为时钟
}

效果​:TIM3的计数器在TIM2每次更新时递增,实现32位定时器扩展。


场景3:PWM输入模式(双通道捕获)​

原理​:单信号同时触发两个通道,分别捕获周期(CCR1)和占空比(CCR2)。
配置代码​:

void TIM3_PWMI_Init(void) 
{// 时基配置(略)// 通道1:上升沿捕获周期(直连)TIM_ICInitTypeDef IC1 = {TIM_Channel_1, TIM_ICPolarity_Rising, TIM_ICSelection_DirectTI};TIM_ICInit(TIM3, &IC1);// 通道2:下降沿捕获占空比(交叉)TIM_ICInitTypeDef IC2 = {TIM_Channel_2, TIM_ICPolarity_Falling, TIM_ICSelection_IndirectTI};TIM_ICInit(TIM3, &IC2);// 复位模式触发源(TI1FP1)TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);
}// 计算占空比
uint8_t Get_PWM_Duty(void) 
{uint16_t period = TIM_GetCapture1(TIM3);  // 周期值uint16_t pulse = TIM_GetCapture2(TIM3);   // 高电平时间return (pulse * 100) / period;            // 占空比%
}

五、高级技巧与注意事项

1. 滤波器配置优化
  • 作用​:抑制信号抖动(如按键抖动、噪声)。
  • 配置​:TIM_ICInitTypeDef.TIM_ICFilter(0x0~0xF),值越大滤波效果越强。
    TIM_ICStruct.TIM_ICFilter = 0x0F;  // 最大滤波(16个时钟事件)
2. 通道与触发源限制
  • 通道依赖性​:
    • TI1FP1仅支持通道1,TI2FP2仅支持通道2。
    • 通道3/4不支持自动复位模式(需中断手动清零CNT)。
  • ETR引脚复用​:需开启AFIO时钟并重映射。
3. 中断协同

尽管从模式可硬件自动运行,但结合中断可提高实时性:

// 使能更新中断
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
NVIC_EnableIRQ(TIM3_IRQn);// 中断服务函数
void TIM3_IRQHandler(void) 
{if (TIM_GetITStatus(TIM3, TIM_IT_Update)) {// 处理捕获完成事件(如计算频率)TIM_ClearITPendingBit(TIM3, TIM_IT_Update);}
}

六、常见问题解答(FAQ)​

  1. Q:一个定时器能否同时使用多个触发源?​
    A:否,一次只能选择一个触发源,但可通过分时复用或组合模式实现复杂功能。

  2. Q:触发源配置后无响应?​
    A:检查步骤:

    • GPIO是否正确初始化为复用功能
    • 从模式是否使能(TIM_SelectSlaveMode
    • 滤波器是否过度抑制信号
  3. Q:如何测量非周期性信号?​
    A:改用普通输入捕获模式(手动记录两次捕获值差值)。

  4. Q:ETR触发时计数器不递增?​
    A:确认从模式设置为TIM_SlaveMode_External1


七、总结

TIM_SelectInputTrigger()是STM32定时器主从模式的核心配置函数,通过灵活选择内部事件外部信号作为触发源,配合复位/门控/触发等从模式,可显著优化信号测量、定时器同步等应用的效率和精度。其关键优势在于硬件自动处理计数逻辑,减轻CPU负担并提升系统可靠性。实际开发中需注意通道与触发源的匹配关系、滤波器配置及中断协同策略。

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

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

相关文章

Lecture 6 Kernels, Triton 课程笔记

本讲座:基准测试/分析 编写内核 总结 编程模型(PyTorch、Triton、PTX)与硬件之间的差距 > 性能奥秘 理解扩展的基准测试 用于理解 PyTorch 函数内部结构的分析(用内核触底) 看 PTX 汇编,了解 CUDA 内核…

Spring Boot 整合网易163邮箱发送邮件实现找回密码功能

在开发用户系统时,发送邮件是一项常见需求,例如用户忘记密码时,通过邮箱发送验证码来验证身份并重置密码。本文将结合 Spring Boot 和 163 邮箱,演示如何实现邮件发送功能。 一、前提条件 普通用户的 163 邮箱可以在 Spring Boot…

如何在mac玩windows游戏?3个工具推荐,不用换电脑!

Mac电脑虽然很流畅,但它也存在局限性,其中一点游戏玩家应该深有体会,那就是无法直接玩Windows专属游戏,只能对着琳琅满目的游戏望眼欲穿。别急,我有办法让你在mac玩windows游戏,下面就来分享我的经验。一、…

自回归(Auto-Regressive, AR),自回归图像生成过程

根据论文中“**T2I Generation via Next-Token Prediction**”一节,自回归(Auto-Regressive, AR)文本到图像(T2I)模型的图像生成过程可分为三个主要步骤,其原理和损失函数如下:---### &#x1f…

在mysql中,modify ,change ,rename to的作用是什么

在 MySQL 中,MODIFY、CHANGE 和 RENAME TO 都是 ALTER TABLE 语句的一部分,用于修改表的结构,但它们的作用和使用场景有所不同。1. MODIFY作用:用于修改表中现有列的定义,但不能修改列名。你可以使用 MODIFY 来更改列的…

【JVM】JVM的内存结构是怎样的?

JVM的内存结构是Java程序运行时内存管理的核心,不同区域有明确的职责。 一、整体划分 包括两大部分,分为线程私有区域(随线程创建/销毁,无需垃圾回收)和线程共享区域(所有线程共用,需要垃圾回收管理)。 线程私有区域:程…

青少年软件编程(python五级)等级考试试卷-客观题(2023年12月)

更多内容和历年真题请查看网站:【试卷中心 -----> 电子学会 ----> 机器人技术 ----> 五级】 网站链接 青少年软件编程历年真题模拟题实时更新 青少年软件编程(python五级)等级考试试卷-客观题(2023年12月&#xff0…

网络编程-创建TCP协议服务器

int socket(int domain, int type, int protocol);头文件&#xff1a; #include <sys/socket.h>#include <netinet/in.h> #include <netinet/ip.h>int skt_tcpfd;int domain;skt_tcpfdsocket(AF_INET,SOCK_STREAM,0);int bind(int sockfd, const struct soc…

ruoyi框架角色分配用户

分配用户&#xff0c;不要将当前正在登录的用户绑定。否则&#xff0c;在加入当前用户之后&#xff0c;取消或者添加其他用户时会被注销当前登录。

Java Stream常见函数与应用案例

1. Java Stream核心概念与基础函数 1.1 Stream API的设计哲学与核心特性 Java Stream API的设计哲学源于函数式编程范式&#xff0c;其核心特性体现在数据处理模式的转变上。与传统集合操作相比&#xff0c;Stream API采用声明式编程风格&#xff0c;支持链式调用&#xff0c;显…

【Canvas与徽章】中国制造金色玻璃光徽章

【成图】【代码】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>中国制造金色玻璃光徽章 Draft1</title><style type"tex…

终结系统裸奔:Debian老旧版本安全加固终极指南

核心警示:Debian 8与10已结束官方支持,暴露于0day漏洞风险中。本文提供的加固方案仅为迁移前的临时防护措施,非长久之计。 一、老旧Debian系统的致命隐患 支持状态: Debian 8(Jessie):2018年终止安全更新 Debian 10(Buster):2024年7月结束主流支持 风险清单: 无补…

Ape.Volo项目源码学习(1:源码下载及运行)

Ape.Volo项目是基于 .Net 8 、SqlSugar、Vue2.x、RBAC、前后端分离开箱则用的中后台快速开发框架&#xff0c;其使用Async/Await异步编程&#xff0c;支持CodeFirst模式、RabbitMQ/RedisMQ消息队列、CORS 跨域配置、数据库操作&#xff08;读写分离、多库、分表&#xff09;、支…

2-4.Python 编码基础 - 流程控制(判断语句、循环语句、break 语句与 continue 语句)

一、判断语句 1、if 语句 &#xff08;1&#xff09;基本格式 if 【判断条件】:【满足条件时执行的代码块】&#xff08;2&#xff09;演示 number 10if number > 0:print("这个数是正数")# 输出结果这个数是正数2、if - else 语句 &#xff08;1&#xff09;基本…

大模型自我进化框架SE-Agent:开启软件工程自动化新时代

一、引言&#xff1a;当大模型学会“自我进化” 在软件开发领域&#xff0c;传统模式下人类工程师面对复杂任务时&#xff0c;往往需要经历反复调试、多轮迭代才能产出高质量代码。而随着大语言模型&#xff08;LLM&#xff09;的兴起&#xff0c;一种名为**SE-Agent&#xff…

UE官方文档学习 C++ TAarry 查询(四)多种查询方式

一.IndexofByKey 返回索引通过值&#xff0c;返回来查找键。二IndexOfByPredicate通过定义二元谓词&#xff0c;来判定是否有符合谓词判定的元素。符合条件True的&#xff0c;才返回Index。这里所谓Lamda,函数就是 把函数当作参数输入&#xff0c;里面的参数值传递前加个[]。这…

根据Wireshark捕获数据包时间和长度绘制电脑发射信号波形

下一期&#xff1a; 根据Wireshark捕获数据包时间和长度绘制路由器发送给电脑数据的信号波形-CSDN博客 一、Wireshark采集数据 数据格式&#xff1a; 在我的另一篇博客中详细介绍了怎么导出数据&#xff1a; Wireshark导出数据包时间和长度-CSDN博客 通过MATLAB加载数据&a…

Suno API 接入指南:快速上手与高效集成

随着 AI 技术的发展&#xff0c;音乐生成已经逐渐成为开发者和创作者探索的新方向。Suno API 提供了一套简洁的接口&#xff0c;让我们能够通过代码快速生成音乐、歌词&#xff0c;甚至旋律。本文将带你从零开始&#xff0c;完成 Suno API 的接入与调用&#xff0c;并分享一些高…

React Hooks原理深潜:从「黑魔法」到「可观测」的蜕变之旅

文章目录【技术栈深潜计划】React Hooks原理深潜&#xff1a;从「黑魔法」到「可观测」的蜕变之旅一、引言&#xff1a;为什么我们需要“深潜”Hooks&#xff1f;二、基石&#xff1a;没有JavaScript闭包&#xff0c;就没有Hooks2.1 闭包的精简回顾2.2 Hooks与闭包的关联三、核…

MySql知识梳理之DDL语句

例子&#xff1a;为emp表增加一个新的字段”昵称”为nickname&#xff0c;类型为varchar(20)alter table emp add nickname varchar(20) comment 昵称;例子&#xff1a;将emp表的nickname字段修改为username&#xff0c;类型为varchar(30)ALTER TABLE emp CHANGE nickname us…