## 基于stm32定时器的不同频率输出(小白第一次发自己的理解,希望大佬多多指教)

基于stm32定时器的不同频率输出(小白第一次发自己的理解,希望大佬多多指教)

**

针对于stm32的定时器,相信很多刚接触到的小白可能会觉得很简单,包括自己实践用了定时器去完成显示实时时间、pwm输出、pwm捕获等一些功能,但是在学这个的一开始,肯定有说过定时器使用时先分频!(当然使用的是自己的板子上的晶振),然后能够有四路输出/捕获,可是这四路不都还是在同一个频率下工作的吗!?那么现在如果我其他的定时器都有用,只剩下一个定时器,可是我还需要输出不同频率的pwm,怎么办!?,也是我昨天看别人的视频再加上从百度上搜了搜,发现解决的办法有大佬已经写了,直接上的源码,我这里就是对大佬的源码再做解释罢了。不废话了

首先就是输出pwm,那么我们肯定要初始化TIM_TimeBaseStructure和TIM_OCInitStructure里面的一些变量,那么与平常不同的是,在TIM_TimeBaseStructure里面period一般我们都会选自己想要记到的数来决定周期(周期=period*【prescaler/时钟晶振】),那么频率=1/周期,这个相信大家都明白,那么现在我们需要改变频率,也就是改变周期,首先计数这里要记到65535(也就是最大值0xfff)
还是直接上源码解释~~注 我用的是F103RBT6的板子,TIM2,通道二、三给大家举的例子
在这里插入图片描述
需要注意的地方我给大家画上了,然后第一个划重点的地方具体是为什么65535我也没再去查,然后在输出模式那里!!一般我们都会选择pwm1或者pwm2,但是那都是起于原始频率,既然咱们要做到不同频率,所以这个模式就更改为比较触发模式(个人理解其实就是溢出之后要取反),那么他就要自己去修改存在ccr1寄存器中的值,所以也就是为什么要让ccr1失能了
在这里插入图片描述
先得到原来的计数周期,再加上自己想要得到的,公式在图片上写了,其中晶振就是你分完频得到的晶振频率。 再具体一点的话就是 先计数,计数到了之后翻转电平进入中断,然后得到这次计数值,将自动装载寄存器的值写进去ccr1,然后等待下一次计数完成,因为一个周期有高电平低电平,所以翻转两次才是一个周期,所以就是为什么500*2,emm就这么多吧,更深层次的理解我还没有那个水平,然后留下我qq吧1015188236,希望和大家共同进步共同学习。

猜你喜欢

转载自blog.csdn.net/qq_43533717/article/details/84699848