stm32——PWM输出

定时器输出比较的应用

1. PWM 输出模式

        PWM输出就是对外输出脉宽(即占空比)可调的方波信号,信号频率由自动重装寄存
器 ARR 的值决定,占空比由比较寄存器 CCR 的值决定。
        PWM 模式分为两种, PWM1 和 PWM2,总得来说是差不多,就看你怎么用而已,具
体的区别见表格

PWM1 和 PWM2 模式的区别
模式计数器 CNT 计算方式   说明
PWM1递增CNT<CCR,通道CH有效,否则为无效
递减CNT>CCR,通道CH无效,否则为有效
PWM2递增CNT<CCR,通道CH无效,否则为有效
递减CNT>CCR,通道CH有效,否则为无效

 1.1 边沿对齐模式

    

         在边沿对齐模式下,计数器 CNT 只工作在一种模式,递增或者递减模式。这里我们以
CNT 工作在递增模式为例,在中, ARR=8, CCR=4, CNT 从 0 开始计数,当 CNT<CCR 的
值 时 , OCxREF 为 有 效 的 高 电 平, 于 此同 时, 比 较 中断 寄 存器 CCxIF 置 位 。 当
CCR=<CNT<=ARR 时, OCxREF为无效的低电平。然后 CNT又从 0开始计数并生成计数器
上溢事件,以此循环往复。

1.2 中心对齐模式

         在中心对齐模式下, 计数器 CNT 是工作做递增/递减模式下。开始的时候, 计数器
CNT 从 0 开始计数到自动重载值减 1(ARR-1),生成计数器上溢事件;然后从自动重载值开
始向下计数到 1 并生成计数器下溢事件。之后从 0 开始重新计数。
        图是 PWM1模式的中心对齐波形, ARR=8, CCR=4。第一阶段计数器 CNT 工作在递增模式下,从 0 开始计数,当 CNT<CCR 的值时, OCxREF 为有效的高电平,当CCR=<CNT<<ARR时, OCxREF为无效的低电平。第二阶段计数器CNT工作在递减模式,从 ARR 的值开始递减,当 CNT>CCR 时, OCxREF 为无效的低电平,当 CCR=>CNT>=1 时,OCxREF 为有效的高电平。
        在波形图上我们把波形分为两个阶段,第一个阶段是计数器 CNT 工作在递增模式的波形,这个阶段我们又分为①和②两个阶段,第二个阶段是计数器 CNT 工作在递减模式的波形,这个阶段我们又分为③和④两个阶段。要说中心对齐模式下的波形有什么特征的话,那就是①和③阶段的时间相等,②和④阶段的时间相等。
        中心对齐模式又分为中心对齐模式 1/2/3 三种,具体由寄存器 CR1 位 CMS[1:0]配置。具体的区别就是比较中断中断标志位 CCxIF 在何时置 1:中心模式 1 在 CNT 递减计数的时候置 1,中心对齐模式 2 在 CNT 递增计数时置 1,中心模式 3 在 CNT 递增和递减计数时都置 1。

2. 定时器初始化结构体详解

2.1 TIM_TimeBaseInitTypeDef

typedef struct
{
  uint16_t TIM_Prescaler;         //预分频器
  uint16_t TIM_CounterMode;       //计数模式
  uint16_t TIM_Period;            //计数器周期
  uint16_t TIM_ClockDivision;     //时钟分频
  uint8_t TIM_RepetitionCounter;  //重复计数器
} TIM_TimeBaseInitTypeDef;   

2.2 TIM_OCInitTypeDef

typedef struct
{
  uint16_t TIM_OCMode;        /*比较输出模式*/

  uint16_t TIM_OutputState;   /*比较输出使能*/

  uint16_t TIM_OutputNState;  /*比较互补输出使能*/

  uint16_t TIM_Pulse;         /*脉冲宽度 */

  uint16_t TIM_OCPolarity;    /*输出极性 */

  uint16_t TIM_OCNPolarity;   /*互补输出极性*/

  uint16_t TIM_OCIdleState;   /*空闲状态下比较输出状态*/

  uint16_t TIM_OCNIdleState;  /*空闲状态下互补比较输出状态*/
} TIM_OCInitTypeDef;

2.3 TIM_ICInitTypeDef

typedef struct
{

  uint16_t TIM_Channel;      /*输入通道选择*/

  uint16_t TIM_ICPolarity;   /*输入捕获触发选择*/

  uint16_t TIM_ICSelection;  /*输入捕获选择 */

  uint16_t TIM_ICPrescaler;  /*输入捕获预分频 */

  uint16_t TIM_ICFilter;     /*输入捕获滤波器*/
} TIM_ICInitTypeDef;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值