OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3032|回复: 1

定时器浅析

[复制链接]

14

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2013-10-19
在线时间
1 小时
发表于 2016-3-16 14:14:27 | 显示全部楼层 |阅读模式
经常有人被定时器溢出时间搞糊涂,看完技术手册对定时器这里也是糊里糊涂的,不知道到底TIM_Period和TIM_Prescaler到底怎么赋值,ARR,PSC等等到底怎么回事。
搜狗截图20160316135106.png
我决定对定时器这里浅析一下,方便搞懂定时器这两个重要参数。当然定时器的具体基本理论就不叙述了(给大家个连接学习:http://blog.sina.com.cn/s/blog_49cb42490100s6ud.html)我直接从定时器溢出时间公式开始说起:
      Tout={(ARR+1)*(PSC+1)}/Tclk
    其中Tout代表定时器溢出时间,Tclk代表定时器的时钟频率,ARR是自动重装载值,PSC是分频系数。

    通过这个公式可以得到我们想要的定时器溢出时间,也就是定时器更新时间,如果开启了定时器中断,那么Tout时间到了我们就可以在定时器中断做一些事情。可以会有人问这个ARR的意思不就是自动装载计数值吗,每计数到我们设定的自动重装载值就产生一个溢出时间,或者也可以叫更新时间。STM32中文参考手册上明明写着向上计数到自动加载值就会溢出了啊,也就是如果选择了向上计数模式,从0计数到了我设置的ARR就会溢出了啊,为什么还要有其他的参数呢?
搜狗截图20160316135453.png
那你可能忽略了一个问题,你要明确你所说的计数所依据的这个脉冲是哪一个?是外来的时钟脉冲没有经过我们处理过的吗?答案显然是错的,我们得到的脉冲是外部时钟脉冲经过分频系数PSC分频后得到的,所以我们所计数的脉冲也是分频系数分频后得到的脉冲。
搜狗截图20160316135757.png
     这里我们再来分析一下上面的公式:
       Tout={(ARR+1)*(PSC+1)}/Tclk
       ARR:自动重装载值,每计数到我们设定的脉冲数值就产生一个更新事件,在这之前我们赋值都是ARR-1PSC-1,所以这里赋值完就是APPPSC了。
我们都知道求这段溢出时间是多少,只要知道:多少个脉冲数X每个脉冲的时间,就可以了
那用上边的多少个脉冲ARR乘以每个脉冲的时间不就是溢出时间了吗?那么每个脉冲时间是多少呢,我们知道频率的倒数就是时间,也就是1/f,即1/Tclk,当然我们使用的脉冲是分频过的,变成了每PSC个外部脉冲产生一个我们定时器的脉冲,也就是脉冲周期被改变了,变成了(PSC+1)}/Tclk

到这里我们就可以总结一下了,定时器的外部时钟脉冲来了会被分频系数PSC改造成我们想要周期的时钟脉冲,然后接着自动重装载数值ARR就自动装载数值,计数到了ARR,就会产生更新事件也就是溢出时间到了。
   

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

354

主题

1475

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
8095
金钱
8095
注册时间
2015-10-15
在线时间
2919 小时
发表于 2016-3-16 21:55:52 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 23:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表