stm32定时器的输出比较功能如何理解

2019-08-14 06:57发布

STM32定时器之输出比较功能:按照PDF的描述,输出比较是当计数器的值与比较寄存器的值匹配时,产生事件。其实我不太明白,这个模块有什么用,要实现这样的功能,使用定时器,在定时器中断里面计数,外加一个if语句就能实现所谓的"将计数值与比较值进行匹配"。而输出比较功能,匹配事件发生的时候,可以触发中断,同样的,我编程也可以实现啊,我把中断程序放在if语句里面不就可以了嘛。
就是说,定时器中断进行计数,用if语句判断计数匹配到达没有,并且在if语句里面写程序(这个程序就是输出比较事件发生时,进入中断里面的中断程序)。

按照这样的思想也能实现pdf中描述的功能啊,那为什么st要多弄一个所谓的输出比较呢?请版主和各位朋友解答一下,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
jiaozhu
1楼-- · 2019-08-14 07:07
一个是硬件实现   一个是软件实现   这两者有本质的差别     软件的实现是需要占用CPU时间的    但硬件就不占用了       还有响应速度面    都有差别的   
745021926
2楼-- · 2019-08-14 10:09
如果需要输出频率很高的PWM,那是不是得频繁中断,来翻转IO口电平?
林春霞
3楼-- · 2019-08-14 14:51
745021926 发表于 2016-6-5 13:32
如果需要输出频率很高的PWM,那是不是得频繁中断,来翻转IO口电平?

       谢谢您,我后来查阅了一些资料,当我们要用到PWM输出的时候,这个输出比较就是用来产生PWM波的,也就是应用这个外设功能去实现的。我明白您说为什么说频率很高的pwm就要频繁中断去翻转了。使用这个输出比较功能就可以从硬件上去实现从而节约cpu时间,提高效率。
       有点像28335里面的epwm模块,PBRD和COMPA、COMPB做比较,发生匹配时,产生事件。而在32里面,PBRD就是这里ARR的值,就是说我们计数器计数的峰值,而CMP在32这里就是TIM_CCR捕获比较寄存器里面的值,就是通过这两个值不同,从而比较事件发生的时间不同,控制频率跟占空比的。跟28335一样可以工作在up、down、up&dowmm模式。
       使用捕获功能的时候,会将CNT的值放到TIM_CCR寄存器里面,供我们读出,统计脉冲的宽度,但如果单纯捕获外部电平变化,只需要利用捕获中断进行处理,而不必理会此时保存在CCR寄存器的值。
————————————————————————————
请您评价一下这样说对不对呢?
745021926
4楼-- · 2019-08-14 18:31
对的
林春霞
5楼-- · 2019-08-14 19:01
745021926 发表于 2016-6-5 19:05
对的

太好了。并且我还有一个小的疑惑,stm32的IO口有很多都是复用的,而且是好几个功能复用一个引脚。我参考了一些资料,其实是不是这样子,先将GPIO口,配置成复用(输入或者输出),然后对应的将某外设使能,比如说103rct6的PA口,同一个口可以复用为ADC,也可以是TIM,那么闲将GPIO使能为复用,然后使能ADC模块,那就默认为将ADC口配置到PA口上了,此时就不能使能PAx口别的复用外设了。在DSP里就是这样子的,我不太清楚32里面是否也如此。
————————————————————
假如说真是这样的话,就有一定的局限了,某些外设的使用会占用别的外设的IO,就不能同时使用了(如果不进行端口重映射的话)
745021926
6楼-- · 2019-08-15 00:06
 精彩回答 2  元偷偷看……

一周热门 更多>