lsjt 发表于 2018-5-13 16:16:09

定时器中断迷惑

       大神们好,最近才接触STM32,学到定时器中断,我想问下,为什么教程里的72M时钟,就要除以36000,得数为2000,表示1秒计数2000次?那除以72000得数为1000,不也是1秒计数到1000?这个2000,1000的数是初值吗?初值不应该是从该数计数到65536?为何是从0计数到该数呢?实在不明白,希望大神们指点!万分感谢!

与龙共舞 发表于 2018-5-14 17:07:23

你的问题我也遇到过
1楼@toofree说的很好 但是看不懂 我知道你在问什么 但是说不好
请一楼看下

72M是72 000 000MHZ
先分频(也就是找一个分母拿去等分)比如72 00(楼主数据有误 这里最大是65535)
得到的结果是72 000000/72 00=1 0000HZ
频率和周期互为倒数 所以T=1/10000=0.0001s也就是0.1ms记一个数。
现在在设置一个初值,比如向上计数器(从0开始)初值设为1000
那就是记了1000个数 它的溢出时机是1000*0.1ms=0.1s也就是100ms
所以这个定时器就是100ms的
这就是定时器的两个参数。
其实可以直接72M/(7200*1000)获得

toofree 发表于 2018-5-13 23:36:32

这个得看手册呀有部分定时器最快72M时钟,还有部分宝器最快36M时钟。


你说的36000和72000应该是预分频寄存器,但是寄存器是16位的,不可能出现72000,最大只有65535.


你说的2000或1000,应该是捕获/比较寄存器


具体计数的时候,应该是计数寄存器,这个寄存器什在变。


具体计数的时候,可以上计数,也可以下计数。


另外STM32F1系列参考手册RM0008,你值得拥有。

黑皮男 发表于 2018-5-13 17:30:48

这个是定时器的计数频率,而36000这样的是分频值,定时器的输入时钟频率是72M,但是一般都会进行分频来改变定时器的计数频率,这样定时器就可以工作在不同频率了

wenyangzeng 发表于 2018-5-13 19:21:51

本帖最后由 wenyangzeng 于 2018-5-13 19:24 编辑

1000和2000与最大计数65535不是一回事,也就是说同样计数值到65535,计数速度的慢或快。

lvpeng-1619958 发表于 2018-5-14 09:53:02

本帖最后由 lvpeng-1619958 于 2018-5-14 09:58 编辑

你仔细看一看,36000是不是代表36KHz?为了得到36Khz的中断频率,所以2000写入TIMx_ARR寄存器里面。一秒计数多少次 还得看你的timer的分频系数,72Mhz不分频那1秒还是会计数72000000次,1000分频就计数72000次。
所以2000只是为了配置中断频率,每秒计数多少次看分频系数

stm1024 发表于 2018-5-14 16:02:26

仔细阅读时钟树,STM32内部的时钟很多,最明显的是APB1和APB2的时钟频率都不一样

与龙共舞 发表于 2018-5-14 17:08:52

toofree 发表于 2018-5-13 23:36
这个得看手册呀有部分定时器最快72M时钟,还有部分宝器最快36M时钟。




看下7楼吧
页: [1]
查看完整版本: 定时器中断迷惑