嵌入式开发之STM32学习笔记day11

 STM32F103C8T6 TIM定时器输入捕获

1 定时器输入捕获Input Capture

  • 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数
  • 每个高级定时器和通用定时器都拥有4个输入捕获通道
  • 可配置为PWMI模式,同时测量频率和占空比
  • 可配合主从触发模式,实现硬件全自动测量

2 频率测量 

误差分析:

  • 测频法误差:主要来源于闸门时间的精度和计数误差,适用于高频信号测量。
  • 测周法误差:主要受标准频率精度和计时分辨率影响,适用于低频信号测量。
  • 选择依据:当信号频率高于中界频率时,优先使用测频法;低于中界频率时,优先使用测周法。

3 输入捕获通道

        图中是 STM32 定时器的输入捕获通道(以通道1为例) 的功能框图,展示了捕获比较模块输入部分的工作流程。下面逐步分析:

3.1 信号路径概述

        输入信号为 TI1(外部引脚输入),其经过多个处理模块后生成最终的捕获值(IC1PS 输出)。各模块的作用如下:


1️⃣ 滤波器 + 向下计数器(fDTS 频率)

  • 对 TI1 信号进行滤波,以消除毛刺。

  • 输出信号为 TI1F,供后续模块使用。

  • 控制位:ICF[3:0](在寄存器 TIMx_CCMR1 中)


2️⃣ 边沿检测器

  • 检测 TI1F 的上升沿或下降沿。

  • 输出两个信号:TI1F_RisingTI1F_Falling


3️⃣ 边沿选择器(异或门)

  • 根据选择,上升或下降沿触发有效。

  • 如果都选,输出为边沿变化(XOR结果)

  • 最终输出信号为 TI1F_ED → 用于 从模式控制器


4️⃣ TI1FP1 与 TI2FP1

  • TI1FP1 是选择后的通道1输入。

  • TI2FP1 是通道2输入(与 TI2F_rising/falling 有关)。


5️⃣ 多路选择器(MUX)

用于确定最终捕获值 IC1 的来源:

  • 01:TI1FP1

  • 10:TI2FP1

  • 11:TRC(从模式控制器输出)

CC1S[1:0] 控制(TIMx_CCMR1 中配置)


6️⃣ 分频器

  • 对最终的捕获信号进行分频:/1, /2, /4, /8

  • ICPS[1:0] 控制(TIMx_CCMR1

  • 输出为 IC1PS


7️⃣ 控制位

  • CC1E:使能捕获(在 TIMx_CCER

  • CC1P:捕获极性(上升/下降沿)


3.2 用途总结

该输入捕获路径主要用于:

  • 测量脉冲宽度:通过捕获上升沿和下降沿的计数值,计算高/低电平时间。

  • 频率测量:通过两次上升沿之间的时间差来计算频率。

  • 外部事件同步:结合从模式使用,实现外部事件触发同步。


📘 关键寄存器参考

控制项寄存器/字段
输入捕获滤波TIMx_CCMR1.ICF[3:0]
输入通道选择TIMx_CCMR1.CC1S[1:0]
分频系数设置TIMx_CCMR1.IC1PS[1:0]
捕获极性选择TIMx_CCER.CC1P
捕获使能TIMx_CCER.CC1E

4 主从触发模式

🔧 作用:STM32 定时器的主从模式允许多个定时器同步工作,实现以下目标:

  • 一个定时器作为主定时器(Master),控制一个或多个其他定时器的启动/复位。

  • 另一个定时器作为从定时器(Slave),在接收到触发事件(TRGI)时执行特定操作。


4.1 关键模块组成

1. 主模式控制器(Master Mode)
  • 使用 TIMx_CR2.MMS[2:0] 控制输出触发源 TRGO(Trigger Output)

  • 可以选择以下事件作为触发输出:

    MMS[2:0]TRGO 输出内容
    000复位
    001启动
    010更新事件(最常用)
    011输出比较
    100比较通道1的输出
    101比较通道2的输出
    110比较通道3的输出
    111比较通道4的输出

2. 从模式控制器(Slave Mode)
  • 使用 TIMx_SMCR.SMS[2:0] 配置从模式选择(Slave Mode Selection)

  • 使用 TIMx_SMCR.TS[2:0] 选择触发输入源(Trigger Source)

常见从模式(SMS):

SMS[2:0]模式描述
000关闭定时器独立运行
001编码器模式1计数器方向和增量由 TI1 决定
010编码器模式2TI2
011编码器模式3TI1 和 TI2
100复位模式在触发信号到达时复位计数器
101门控模式触发信号存在期间计数器计数
110触发模式触发信号到达时启动计数器
111外部时钟模式1外部触发信号作为时钟源

触发源选择(TS):

TS[2:0]触发源描述
000Internal Trigger 0 (ITR0)来自其他定时器(如 TIM1 的 TRGO)
001ITR1TIM2 的 TRGO 等
010ITR2
011ITR3
100TI1 Edge Detector来自 TI1 的上升/下降沿
101Filtered Timer Input 1TI1FP1
110Filtered Timer Input 2TI2FP2
111外部触发输入(ETRF)外部引脚

5 输入捕获基本结构

分析:

        当外部信号通过 GPIO 引脚输入后,首先经过滤波器处理,然后进入边沿检测电路,根据设定的极性(上升/下降沿)触发输入捕获单元1。接着,信号经过分频器送入 CCR1 捕获/比较寄存器,同时 CNT(计数器)开始计数。当检测到指定边沿后,CNT 的当前值会被锁存到 CCR1 中,并根据触发源设置决定是否复位 CNT(进入从模式)。PSC 预分频器和 ARR 自动重装载器则协助时基单元对输入信号进行更精确的计时与频率测量,从而完成对输入脉冲周期或高/低电平宽度的捕获与计算。此机制常用于测量信号频率或周期。

6 PWMI基本结构

        PWMI(Pulse Width Measurement Input,脉宽测量输入)模式STM32 定时器的输入捕获模式 的一种常用配置,常用于测量一个周期性PWM信号的 周期高电平时间,从而计算出占空比和频率。

        PWMI 本质上是 利用定时器的两个通道分别捕获PWM信号的上升沿和下降沿,典型结构包括:

  • 通道1(CH1):配置为捕获上升沿(用于测周期)

  • 通道2(CH2):配置为捕获下降沿(用于测高电平时间)

  • 一个计数器(CNT):持续计数,用于计算边沿之间的时间

  • 两个捕获寄存器 CCR1 和 CCR2:分别记录上升沿和下降沿时刻

  • 从模式控制器(SMS):配置定时器在检测到边沿时自动复位计数器,便于周期测量


6.1 🔁PWMI 工作流程

  1. GPIO 输入引脚连接到定时器的 CH1 引脚(PWM 信号接入);

  2. 配置通道1为输入捕获、上升沿触发(测量周期);

  3. 配置通道2为输入捕获、下降沿触发(测量高电平);

  4. 配置定时器为 从模式 + 触发模式为 TI1FP1(通道1输入),在每次上升沿时 自动清零 CNT

  5. 信号开始进入,定时器开始工作:

    • 上升沿 到来时:CNT 被清零,CCR1 捕获此时 CNT=0

    • 下降沿 到来时:CNT 增加了一段时间,CCR2 捕获高电平宽度

    • 在下一次 上升沿 到来时:CNT 值即为 完整周期,再次被捕获到 CCR1;

  6. 占空比计算


6.2 ✅ 总结一句话流程:

        PWMI 模式通过将定时器两个通道配置为分别捕获 PWM 信号的上升沿和下降沿,使定时器在每次上升沿自动清零计数器,从而实现对信号周期和高电平宽度的精确测量,便于计算频率和占空比。

7 编码器接口简介

  • 编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度
  • 每个高级定时器和通用定时器都拥有1个编码器接口
  • 两个输入引脚借用了输入捕获的通道1和通道2

7.1 正交编码器

7.2 编码器接口基本结构

7.3 工作模式

7.3.1 实例(均不反向)

7.3.2 实例(TI1反向)

关注我

<think>好的,我现在需要处理用户关于“3719开发笔记”的查询。首先,用户可能指的是某个特定的项目、技术文档或开发日志,但编号3719看起来比较模糊,没有明确的上下文。我需要考虑几种可能性: 1. **错误编号或项目编号**:可能3719是某个软件、框架或系统中的错误跟踪编号,如GitHub的Issue编号。但搜索常见平台未找到直接相关的结果。 2. **内部项目代号**:有些公司会用数字作为内部项目代号,但具体内容通常不公开,需要用户提供更多背景。 3. **书籍或教程**:可能是一本未广泛传播的开发笔记,但主流平台上未见此名称。 4. **特定技术工具**:如库、插件,但同样没有匹配的信息。 接下来,我会检查是否有拼写错误,比如3719是否应为其他编号,或者是否与其他技术术语相关。例如,HTTP状态码3719不存在,常见的如404。另外,查看技术会议或论文是否有相关主题,但暂时没有线索。 可能的解决方案: - 询问用户更多上下文,如领域、技术栈或来源。 - 推测用户可能指的是某个教程或开源项目,建议用户核实名称。 - 提供一般性开发笔记的建议,如如何记录、工具推荐(如Jupyter、GitHub Wiki)。 需确保回答结构清晰,逐步引导用户补充信息,同时提供有用的通用建议。</think>关于您提到的“3719开发笔记”,目前公开的技术资料中并没有明确的匹配信息。这可能涉及以下几种情况,我们可以逐步分析: --- ### 第一步:确认名称准确性 1. **编号含义** - 若“3719”是项目代号、错误代码或版本号,需结合具体领域(如软件开发框架、硬件型号等)进一步确认。 - 例:某些开源项目会用数字作为问题跟踪编号(如GitHub Issue #3719),但需指定项目名称。 2. **可能的拼写误差** - 检查是否应为其他相近编号(如3179、3720等)或名称拼写差异。 --- ### 第二步:探索可能关联的技术领域 1. **开发工具/框架** - 如涉及物联网开发,可能关联芯片型号(如STM32系列暂无3719型号)。 - 如为前端开发,可能关联HTTP状态码,但3719不在标准状态码范围内。 2. **学术论文或会议** - 可尝试搜索论文数据库(如IEEE Xplore)中是否包含“3719”关键词,但目前未发现直接关联。 --- ### 第三步:建议行动方案 1. **提供更多上下文** - 请补充以下信息: - 领域:嵌入式开发/Web应用/算法等 - 来源:书籍/内部文档/开源项目 - 关键词:如涉及的具体技术(如机器学习、区块链) 2. **通用开发笔记建议** - **记录工具**:推荐使用Markdown + Git管理笔记,或Notion、Obsidian等知识管理工具。 - **内容结构**: ```markdown ## [Day 1] 功能实现 - 目标:完成用户登录模块 - 问题:跨域请求失败(CORS) - 解决:配置Nginx代理规则 `proxy_pass` ``` - **数学公式示例**(遵循您的格式要求): 行内公式:$e^{i\pi} + 1 = 0$ 独立公式: $$ \int_{a}^{b} x^2 dx = \frac{b^3 - a^3}{3} $$ --- ### 第四步:若为自定义笔记 如果您希望创建自己的“3719开发笔记”,可参考以下模板: ```markdown # 项目3719开发日志 ## 模块1:数据采集 - **技术栈**:Python + Kafka - **难点**:数据去重(使用布隆过滤器,误判率 $p \approx (1 - e^{-kn/m})^k$) - **进度**:已完成80% ``` 请补充更多信息,我将进一步协助您!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小程同学>o<

你的鼓励将是小程创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值