当前位置: 首页 > news >正文

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.dtcms.com/a/339022.html

相关文章:

  • 开源游戏引擎Bevy 和 Godot
  • 开源AI工具Midscene.js
  • 第9章 React与TypeScript
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(17):文法+单词第5回3-复习
  • 指针的应用学习日记
  • GraphQL 与 REST 在微服务架构中的对比与设计实践
  • RadioIrqProcess函数详细分析与流程图
  • C#语言的语法(数据类型)
  • 清空 github 仓库的历史提交记录(创建新分支)
  • 神经网络中的那些关键设计:从输入输出到参数更新
  • STranslate:一键聚合翻译+OCR,效率翻倍
  • 云端赋能,智慧运维:分布式光伏电站一体化监控平台研究
  • 卫生许可证识别技术:通过OCR与NLP实现高效合规管理,提升审核准确性与效率
  • Git#revert
  • 如何解析PDF中的复杂表格数据
  • 星链之供应链:SpaceX供应链韧性密码,70%内部制造+模块化设计,传统航天企业如何追赶?
  • 四大常用排序算法
  • 【线性基】P4301 [CQOI2013] 新Nim游戏|省选-
  • Voice Agents:下一代语音交互智能体的架构革命与产业落地
  • 大语言模型中的归一化实现解析
  • elasticsearch8.12.0安装分词
  • 【Spring Boot把日志记录到文件里面】
  • 郑州续面事件的技术视角:网络传播机制与舆情应对技术方案
  • Git+Jenkins实战(一)
  • Windows系统维护,核心要点与解决方案
  • Spring Boot 4 的 11 项重大变更全面解析!
  • 企业级 RN Android 完整 CI/CD 自动化解决方案
  • 从《捕风追影》看地理信息大屏可视化:不止于电影的 “天眼” 黑科技
  • 笔试——Day43
  • 2.Kotlin 集合 List 所有方法