按键控制pwm波的频率,如何实现在不改变占空比的前提下改变频率,且每次按下按键频率的步进相同
按键按下,ARR和CCRx按比例增加/减少
长话短说,我就只分两个部分了。
脉冲宽度调制(PWM)->(Pulse Width Modulation),STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样, STM32 最多可以同时产生 30 路 PWM 输出!这样的话就可以想象一下可以做些什么事情了。
比较水的思路就是定时器产生pwm波然后通过改变占空比来改变给予led的能量大小,从大的框架往下套。其实我就是简单的将我的感想写下来,来看的人应该也只是为了寻找思路或者其中关于细节的注意事项,以下便是提炼:
(1) 巨牛的学长曾经说,一个东西你只知道如何使用它是没有灵魂的,你得有能力去改变它。我深感其中的道理,怎奈资质欠缺,很艰难。所以第一个就是关于寄存器的知识,如果你看的是这个,那么定时器的相关知识需要掌握一下,重要的在于定时器中断。这里就着资料的 捕获 /比较模式寄存器(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR1~4) 拿出来说,都是关于实际用的
◆ 捕获/比较模式寄存器(TIMx_CCMR1/2),该寄存器总共有 2 个, TIMx _CCMR1和 TIMx _CCMR2。 TIMx_CCMR1 控制 CH1 和 2,而 TIMx_CCMR2 控制 CH3 和 4。记住这个
该寄存器的有些位在不同模式下,功能不一样,图中显示寄存器分为 2层,上面一层对应输出而下面的则对应输入。需要注意的是模式设置位 OCxM,此部分由 3 位组成。总共可以配置成 7 种模式,我们使用的是 PWM 模式,所以这 3 位必须设置为 110/111。这两种PWM 模式的区别就是输出电平的极性相反。
◆ 捕获/比较使能寄存器(TIMx_CCER),该寄存器控制着各个输入输出通道的开关。
这是从stm32参考手册14.4.9截下来的关于CCER的解释,每一位都有不同的意义,就像这里我们的目的是通过定时器产生pwm波,就对应了相应的输入/捕获输出使能位,要想PWM 从 IO 口输出,这个位必须设置为 1,所以我们需要设置该位为 1。
◆ 捕获/比较寄存器(TIMx_CCR1~4),该寄存器总共有 4 个,对应 4 个输通道 CH1~4。记住了,是对应的,和CCMR比较记忆即可
在输出模式下,该寄存器的值与 CNT 的值比较,根据比较结果产生相应动作。所以我们通过修改对应寄存器的值,就可以控制 PWM 的输出脉宽了,再直接说吧,什么叫对应寄存器的值,TIMx_CCR1~4就对应你利用哪个定时器哪个通道,很直接干脆。
(2) 涉及到端口的复用和映射,就像各种资料所说,讲的很直接,实现呼吸灯,你需要将pwm波输送至led灯所在的位置,所以,要么你就用原来的通道固定端口,要么就映射,工程量少差不多,前面也讲了端口复用和重映射,这就不赘述了
(3) 我这里就不贴代码了,代码你们也不缺,各种大佬都分享的有,所以,下面才是重点,惊喜不