单片机
返回首页

STM32 定时器输出PWM的模式

2019-01-30 来源:eefocus

数据手册上TIMx_CCMR1寄存器的6:4位决定了定时器输出PWM的几种模式:


000:冻结。输出比较寄存器TIMx_CCR1与计数器TIMx_CNT间的比较对OC1REF不起作用。即当计数器值与比较值相等时管脚上电平信号保持上一次的信号。


Eg:定时器设置:


TIM_TimeBaseStructure.TIM_Period = 1000; // 设置自动重载周期值

TIM_TimeBaseStructure.TIM_Prescaler = 47; // 设置预分频值48分频

TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 设置时钟分割:TDTS = Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // TIM向上计数模式

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // 初始化TIM3


eg:TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; // 输出比较模式设置为冻结模式


TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 输出使能


TIM_OCInitStructure.TIM_Pulse = 200;  // 设置比较值


TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;  // 有效电平极性为低


TIM_OC1Init(TIM3, &TIM_OCInitStructure);  // 配置参数


输出现象:计数器从0开始计数到200,这段时间通道1管脚输出高电平(无效电平),到200后与比较值一致则锁定当前比较值,所以最终通道1管脚上电平为高电平。


001:匹 配 时 设 置 通 道 1 为 有 效 电 平 。当 计 数 器 TIMx_CNT 的 值 与 捕 获 / 比 较 寄 存 器1(TIMx_CCR1)相同时,强制OC1REF为高。


eg:TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Active; // 输出比较模式设置为冻结模式


TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 输出使能


TIM_OCInitStructure.TIM_Pulse = 200;  // 设置比较值


TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;  // 有效电平极性为低


TIM_OC1Init(TIM3, &TIM_OCInitStructure);  // 配置参数


输出现象:计数器从0开始计数到200,这段时间管脚1输出高电平(无效电平),到200后与比较值一致则输出当前有效电平低电平,最终管脚1上电平为低电平。

010 : 匹 配 时 设 置 通 道 1 为 无 效 电 平 。 当 计 数 器 TIMx_CNT 的 值 与 捕 获 / 比 较 寄 存 器

1(TIMx_CCR1)相同时,强制OC1REF为低。



eg:TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Inactive; // 输出比较模式设置为冻结模式


TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 输出使能


TIM_OCInitStructure.TIM_Pulse = 200;  // 设置比较值


TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;  // 有效电平极性为低


TIM_OC1Init(TIM3, &TIM_OCInitStructure);  // 配置参数


输出现象:计数器从0开始计数到200,这段时间管脚1输出高,到200后与比较值一致输出与设置极性相反的电平。设置有效电平为低,则实际输出高,所以最终通道1管脚一直输出高。

011:翻转。当TIMx_CCR1=TIMx_CNT时,翻转OC1REF的电平。


eg:TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; // 输出比较模式设置为翻转模式


TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 输出使能


TIM_OCInitStructure.TIM_Pulse = 200;  // 设置比较值


TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;  // 有效电平极性为低


TIM_OC1Init(TIM3, &TIM_OCInitStructure);  // 配置参数


输出现象:计数器从0开始计数到200,这段时间管脚1输出高,到200后与比较值一致输出与设置极性一样的电平。设置有效电平为低,则实际输出200高,800低。在中断中不断改变设置值则,可输出不同占空比的波形。

110: PWM模式1- 在向上计数时,一旦TIMx_CNT

无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否

则为有效电平(OC1REF=1)。


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 选择PWM模式2


TIM_OCInitStructure.TIM_Pulse = 200;  // 设置比较值


TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 比较输出使能

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 输出极性高

TIM_OC2Init(TIM3, &TIM_OCInitStructure);


TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); // 使能预装载寄存器


输出现象:计数器从0计数到199时通道输出低电平(无效电平)。到200时与比较值相同,输出有效电平高电平。使能了输出比较预装载值,所以可以稳定输出200脉冲的低800脉冲的高电平。


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 带有短路保护系统的5V直流稳压电源电路图

  • 如何构建一个触摸传感器电路

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章