STM32 定时器(输出模式)

⚙️ ​一、输出模式总览

STM32定时器的输出比较模式通过比较计数器(CNT)与捕获/比较寄存器(CCRx)的值,控制输出引脚(OCx)的电平状态。六种模式定义如下:

模式宏触发动作​(CNT = CCRx时)输出波形特点典型应用
TIM_OCMode_Timing无动作(引脚冻结)保持原电平纯定时中断
TIM_OCMode_Active强制输出高电平​(有效电平)单次高脉冲单脉冲生成
TIM_OCMode_Inactive强制输出低电平​(无效电平)单次低脉冲单脉冲生成
TIM_OCMode_Toggle电平翻转周期为 2×ARR 的方波(占空比50%)方波时钟源
TIM_OCMode_PWM1自动生成PWM(见下文详述)占空比可调(0%-100%)电机/LED控制
TIM_OCMode_PWM2自动生成PWM(极性相反)占空比可调(0%-100%)电机/LED控制

🔧 ​二、各模式详解

1. ​冻结模式​ (TIM_OCMode_Timing)
  • 工作原理​:CNT与CCRx匹配时不改变引脚状态,仅触发中断或DMA请求。
  • 应用场景​:精确计时任务(如周期性传感器采样),无需物理输出。
2. ​单次动作模式​ (TIM_OCMode_Active/Inactive)
  • 工作流程​:
    • Active:匹配时引脚置高,​保持至下次重载或手动修改​。
    • Inactive:匹配时引脚置低,行为同上。
  • 特点​:​仅触发一次电平变化,需手动重置计数器才能再次触发。
  • 应用场景​:生成单脉冲信号(如步进电机单步驱动)。
3. ​翻转模式​ (TIM_OCMode_Toggle)
  • 工作流程​:每次CNT=CCRx时,​引脚电平翻转一次​。
  • 输出波形​:
    • 周期 = 2 × (ARR + 1) / CK_CNT
    • 固定50%占空比​(例如CCRx设为ARR的一半)。
  • 应用场景​:生成方波时钟(如驱动无源蜂鸣器)。
4. ​PWM模式​ (PWM1/PWM2)
  • 核心区别​:

    模式向上计数行为向下计数行为
    PWM1

    CNT < CCRx → 高电平;

    CNT ≥ CCRx → 低电平

    CNT > CCRx → 低电平;

    CNT ≤ CCRx → 高电平

    PWM2

    CNT < CCRx → 低电平;

    CNT ≥ CCRx → 高电平

    CNT > CCRx → 高电平;

    CNT ≤ CCRx → 低电平

    ​:有效电平由TIM_OCPolarity进一步配置。

  • 参数计算​:

    • 频率​ = CK_PSC / (PSC + 1) / (ARR + 1)
    • 占空比​ = CCRx / (ARR + 1)(PWM1模式)。
  • 高级功能​:

    • 互补输出​(高级定时器TIM1/TIM8):可生成带死区的互补PWM,用于H桥驱动。
    • 预装载寄存器​:通过TIM_OCxPreloadConfig()使能,避免占空比更新时的毛刺。

⚡ ​三、PWM模式的配置示例(STM32F103)​

以TIM1通道1生成PWM1波形为例:

// 1. 初始化GPIO(PA8为TIM1_CH1)
GPIO_InitTypeDef GPIO_InitStruct = {.GPIO_Pin = GPIO_Pin_8,.GPIO_Mode = GPIO_Mode_AF_PP,  // 复用推挽输出.GPIO_Speed = GPIO_Speed_50MHz
};
GPIO_Init(GPIOA, &GPIO_InitStruct);// 2. 配置时基单元(72MHz时钟,1kHz PWM)
TIM_TimeBaseInitTypeDef TIM_TimeBase = {.TIM_Period = 720 - 1,       // ARR = 719 → 周期720.TIM_Prescaler = 0,          // PSC = 0 → 无分频.TIM_CounterMode = TIM_CounterMode_Up
};
TIM_TimeBaseInit(TIM1, &TIM_TimeBase);// 3. 配置PWM模式(占空比50%)
TIM_OCInitTypeDef TIM_OCInit = {.TIM_OCMode = TIM_OCMode_PWM1,     // PWM模式1.TIM_OutputState = TIM_OutputState_Enable,.TIM_Pulse = 360,                  // CCRx = 360 (50%占空比).TIM_OCPolarity = TIM_OCPolarity_High  // 高电平有效
};
TIM_OC1Init(TIM1, &TIM_OCInit);// 4. 使能高级定时器主输出
TIM_CtrlPWMOutputs(TIM1, ENABLE);  // 必需!否则无输出[5](@ref)
TIM_Cmd(TIM1, ENABLE);             // 启动定时器

⚠️ ​四、模式选择与常见问题

  1. 模式选择建议​:

    • 电机控制/调光 → ​PWM1/PWM2
    • 精确时间中断 → ​Timing
    • 简单方波 → ​Toggle
    • 单脉冲指令 → ​Active/Inactive​ 。
  2. 关键注意事项​:

    • PWM无输出​:检查高级定时器的MOE位(TIM_CtrlPWMOutputs())。
    • 占空比异常​:确保CCRx ≤ ARR,否则PWM不生效。
    • 电平极性混淆​:PWM1+HighPWM2+Low等效,需结合外设需求选择。

💎 ​总结

STM32定时器的输出模式覆盖了从基础定时到复杂PWM生成的各类场景:

  • 冻结/单次模式适用于事件驱动型任务;
  • 翻转模式提供简单方波;
  • PWM模式​(占主导地位)通过硬件自动生成可调占空比信号,结合互补输出死区插入,可满足电机驱动、电源转换等工业级需求。
    配置时需严格匹配时基参数(ARR/PSC)与极性设置,并善用预装载功能确保波形稳定性。

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

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

相关文章

嵌入式硬件篇---手柄

手柄原理&#xff1a;手柄遥控的原理其实可以简单理解为 “信号的发送与接收”&#xff0c;就像两个人用对讲机聊天&#xff0c;一方说话&#xff08;发送信号&#xff09;&#xff0c;另一方听话&#xff08;接收信号&#xff09;&#xff0c;然后根据内容行动。下面用通俗的方…

数据库架构开发知识库体系

摘要面向初创与企业团队&#xff0c;系统梳理数据库与数据平台从采集、传输、存储、处理、服务化到治理与安全的全链路。覆盖 OLTP/OLAP/HTAP、湖仓一体与实时数据栈&#xff0c;结合国内外工具与方法论&#xff0c;给出架构选型、性能优化、可靠性与合规要点&#xff0c;以及可…

在Excel和WPS表格中合并多个单元格这样最快

如果要把WPS表格和Excel中多个单元格的数据合成到一个单元格中&#xff0c;不用函数&#xff0c;只需要先写输入公式&#xff0c;然后在各个单元格之间输入&符号即可。&#xff08;当然&#xff0c;&符号不只是连接单元格的数据&#xff0c;也可以直接输入内容连接&…

在嵌入式上用 C++14实现简单HSM状态机

文章目录概述为什么要迁移到 C&#xff0c;以及 C 的陷阱目标与挑战为什么不能直接使用 std::function&#xff1f;解决方案&#xff1a;POD 回调与模板 Trampoline核心设计模板 trampoline 实现两种成员函数绑定策略1. **Per-Transition Context&#xff08;每个状态转移绑定一…

【unity】Obfuz加固混淆日志还原解析方案ObfuzResolver

Github | Gitee ObfuzResolver是基于obfuz-tools针对Obfuz的一项辅助工具&#xff0c;方便开发者在unity编辑器中或者运行时快捷将使用Obfuz混淆加固后的日志信息还原为原始信息&#xff0c;以辅助开发者快速定位Bug。 特性 支持unity编辑器模式下还原被加固混淆的日志信息&a…

2025DevOps平台趋势解读:哪些DevOps工具正在引领行业变革?

DevOps平台已成为企业提升研发效能、实现敏捷交付的核心支柱。2025年DevOps领域正经历深刻变革&#xff0c;平台能力正从“工具链整合”向“价值流智能中枢”跃升。01. 2025Devops平台趋势解读“全栈式”与“模块化/可组合”的平衡&#xff1a;企业既需要能覆盖开发、测试、部署…

第二阶段Winform-4:MDI窗口,布局控件,分页

1_MDI窗口 &#xff08;1&#xff09;MDI是指将多控件窗体在同一窗体中打开,可以设置重叠打开&#xff0c;平捕打开等&#xff0c;MDI窗体&#xff08;Multiple-Document Interface&#xff0c;多文档界面&#xff09;用于同时显示多个文档。在项目中使用MDI窗体时&#xff0c…

实用R语言机器学习指南:从数据预处理到模型实战(附配套学习资源)

一、为什么需要掌握机器学习建模&#xff1f;在科研与项目实践中&#xff0c;机器学习已成为数据挖掘的核心工具。本文手把手带你在R语言中实现7大常用模型&#xff1a;逻辑回归/正则化回归决策树/随机森林SVM支持向量机XGBoost梯度提升神经网络全程包含数据标准化→模型训练→…

go.uber.org/zap 日志库高性能写入

使用 go.uber.org/zap 实现日志分割功能 实现按照单个文件最大MB自动分割,最多保留多少天的文件,是否启用压缩,按天自动分割日志 核心依赖 go.uber.org/zap:核心日志库 lumberjack.v2:日志轮转工具(实现按大小/时间分割) 时间处理依赖标准库 time 实现步骤 1. 初始化…

电脑端完全免费的动态壁纸和屏保软件(真正免费、无广告、无会员)

✅ 1. Lively Wallpaper&#xff08;强烈推荐&#xff09; 特点&#xff1a;完全免费、开源、无广告&#xff0c;支持本地视频/GIF/网页作为动态壁纸内置资源&#xff1a;12个高质量动态壁纸&#xff08;可自定义&#xff09;屏保功能&#xff1a;支持将动态壁纸一键设为屏保系…

C#_组合优于继承的实际应用

2.2 Composition over Inheritance&#xff1a;组合优于继承的实际应用 继承&#xff08;Inheritance&#xff09;是面向对象编程中最容易被过度使用和误用的特性之一。传统的教学往往让人们优先选择继承来实现代码复用和建立“是一个&#xff08;is-a&#xff09;”的关系。然…

Kafka消息丢失的场景有哪些

生产者在生产过程中的消息丢失 broker在故障后的消息丢失 消费者在消费过程中的消息丢失ACK机制 ack有3个可选值&#xff0c;分别是1&#xff0c;0&#xff0c;-1。 ack0&#xff1a;生产者在生产过程中的消息丢失 简单来说就是&#xff0c;producer发送一次就不再发送了&#…

盼之代售 231滑块 csessionid 分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 部分python代码 url "…

STL关联式容器解析:map与set详解

目录 1. 关联式容器 2. 键值对 3. 树形结构的关联式容器 3.1 set 3.1.2 set的使用 3.2 map 3.2.1 map的介绍 3.2.2 map的使用 3.3 multiset 3.3.1 multiset的介绍 3.3.2 multiset的使用 3.4 multimap 3.4.1 multimap的介绍 3.4.2 multimap的使用 4.红黑树模拟实现…

贪吃蛇--C++实战项目(零基础)

视频地址&#xff1a;C语言必学项目&#xff1a;贪吃蛇&#xff01; 贪吃蛇游戏框架 ├── 基础框架 │ ├── 头文件引入 │ ├── 常量和宏定义 │ └── 窗口初始化 │ ├── 数据结构系统 │ ├── Pos结构体(位置和颜色) │ ├── Snake结构体(蛇的属性) │ ├──…

unity资源领取反作弊工具加密器

https://assetstore.unity.com/packages/tools/utilities/anti-cheat-pro-2025-3006260元购码GUARDINGPEARSOFTWARE

FPGA设计中的信号完整性量化与优化:探索高速数字系统的关键路径

在高速FPGA设计中&#xff0c;信号完整性&#xff08;Signal Integrity, SI&#xff09;已成为确保系统稳定、可靠运行的核心要素之一。随着数据传输速率的不断提升和电路规模的日益复杂&#xff0c;信号在传输过程中受到的干扰和畸变问题日益凸显。因此&#xff0c;如何有效量…

`strncasecmp` 字符串比较函数

1) 函数的概念与用途 strncasecmp 是 C 语言中一个非常实用的字符串处理函数&#xff0c;它执行不区分大小写的字符串比较&#xff0c;但只比较前 n 个字符。这个函数的名字来源于"string n case-compare"&#xff08;字符串前n个字符不区分大小写比较&#xff09;。…

软件安装教程(一):Visual Studio Code安装与配置(Windows)

文章目录前言一、Visual Studio Code下载二、安装步骤&#xff08;Windows&#xff09;1. GUI安装2. 命令行安装三、首次启动后建议的快速配置&#xff08;几分钟完成&#xff09;四、常见问题 & 小贴士总结前言 Visual Studio Code&#xff08;VS Code&#xff09;是一款…

JavaSSM框架从入门到精通!第三天(MyBatis(二))!

四、Mapper 的动态代理1. 引入 在上面的 CURD 例子中&#xff0c;我们发现&#xff1a;Dao 层的实现类的每一个方法仅仅是通过 SqlSession 对象的相关 API 定位到映射文件 mapper 中的 SQL 语句&#xff0c;真正对数据库操作的工作实际上是有 Mybatis 框架通过 mapper 中的 SQL…