STM32 定时器输出比较模式和PWM输出模式的区别

搞了好几天的定时器输出方波, 刚开始还行, 后来怎么弄都不行… 我就郁闷了…
经过漫长的示波器观察和摸索, 才发现普通的比较输出模式和pwm模式的 寄存器的作用不一样.

比较输出模式

这个模式的特点是4个通道的输出周期频率是一样的… 频率周期由 预装载寄存器 ARR 的大小确定. Cubmx中叫Counter Period … 这个值越大输出频率越低.

但是这个模式有个特点是, 每个通道的初相位可以通过各通道的CCRx来确定…
这里写图片描述

PWM模式

波形周期频率长度由ARR确定
高电平的时长由各个通道的CCRx确定…

这里写图片描述

两种模式的区别是CCRx在不同模式下的作用是不一样的,
输出比较模式下,CCRx控制的是初相位.
PWM模式下,CCRx控制的是高电平的计数周期.

最近评论里很多朋友都说我写错了。 也许吧! 我单片机也不是非常精通。 我这些数据都是测试得来的。 也有可能是我理解错了。
此文仅供参考。

  • 19
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
STM32中,定时器输出比较模式可以通过以下步骤进行配置: 1. 初始化定时器的时钟和基本设置,如定时器模式、预分频器和计数器方向等。 2. 配置定时器输出比较模式。这可以通过设置定时器输出比较寄存器(CCR)来完成。每个CCR寄存器控制一个输出通道。 3. 配置CCR寄存器的比较值(CCRx)和比较模式(OCxM)。比较值是一个16位的数字,用于与计数器的当前值进行比较比较模式定义了何时输出比较结果。 4. 配置CCR寄存器的输出模式(OCxPE和OCxFE)。OCxPE用于使能CCR寄存器的预装载功能。OCxFE用于使能CCR寄存器的快速输出模式。 下面是一个示例代码,用于配置定时器TIM1的输出比较通道1(CH1): ``` // 初始化定时器TIM1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Period = 999; // 计数器重载值 TIM_TimeBaseStructure.TIM_Prescaler = 719; // 预分频器,得到1ms的计数周期 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分频 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 计数器向上计数 TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); // 配置TIM1的输出比较通道1 TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 输出比较模式PWM1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 使能输出 TIM_OCInitStructure.TIM_Pulse = 500; // 比较值 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 输出极性为高电平 TIM_OC1Init(TIM1, &TIM_OCInitStructure); // 使能TIM1 TIM_Cmd(TIM1, ENABLE); ``` 在这个示例中,定时器TIM1被初始化为一个1kHz的计数器。输出比较通道1被配置为PWM1模式比较值为500(占空比50%),输出极性为高电平。最后,定时器被使能并开始计数。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值