打印
[STM32F1]

【转】基于stm32f103zet6的定时器的学习1(理论知识)

[复制链接]
714|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一代掌门|  楼主 | 2016-11-12 23:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
之前就听到网友说定时器这部分比较复杂,难搞,实验室里有个同学也搞了一段时间,不过它属于哪种专研型的人!学着学者,我也来到了定时器这章。

在网上查看了一下,也翻阅了一些书籍,高级定时器,通用定时器,普通定时器这三种就从通用的开始学吧!
一、首先还是将定时器框图分解一下吧,那么令人窒息的框图着实让人恐怖!虽然窒息,但是还是有必要贴上去!

对上面框图中的寄存器名字解释如下
TIMx_ETR:TIMER外部触发引脚ETR:外部触发输入ETRP:分频后的外部触发输入ETRF:滤波后的外部触发输入
ITRx:内部触发x(由另外的定时器触发)TI1F_ED:TI1的边沿检测器。TI1FP1/2:滤波后定时器1/2的输入 TRGI:触发输入
TRGO:触发输出  CK_PSC:应该叫分频器时钟输入CK_CNT:定时器时钟。(定时周期的计算就靠它)
TIMx_CHx:TIMER的输入脚  TIx:应该叫做定时器输入信号xICx:输入比较x ICxPS:分频后的ICx
OCx:输出捕获x OCxREF:输出参考信号

沙发
一代掌门|  楼主 | 2016-11-12 23:23 | 只看该作者
1、通用定时器的主要部分是一个【16位计数器】和与其相关的【自动装载寄存器】。
可以实现三种计数方式:
a、【增计数】
b、【减计数】
c、【同时进行增减计数】(注意理解这里的同时,从同时非彼同时)
datasheet上关于计数模式的解释如下!
在向上计数模式中,计数器从0 计数到自动加载值(TIMx_ARR计数器的内容) ,然后重新从0 开始
计数并且产生一个计数器溢出事件。
在向下模式中,计数器从自动装入的值(TIMx_ARR计数器的值)开始向下计数到0,然后从自动
装入的值重新开始并且产生一个计数器向下溢出事件。
在中央对齐模式,计数器从0 开始计数到自动加载的值(TIMx_ARR寄存器)−1 ,产生一个计数器
溢出事件,然后向下计数到1并且产生一个计数器下溢事件;然后再从0开始重新计数。
对于中央对齐模式,开始不怎么了解,现在我个人的理解就是相当于:如果初值是3的话,那么它的计数方式就是
3、2、1、0、1、2、3这样,先进性-1操作,后进行+1操作!
完毕!
2、那么首先就引进时钟单元:定时器是由什么提供时钟节拍的呢?
先来看一下几种时钟模式:
计数器时钟可以由下列时钟源提供:
·内部时钟(CK_INT)
·外部时钟模式1:外部输入脚(TIx)
·外部时钟模式2:外部触发输入(ETR)
·内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。
由于定时器功能实在过于强大,所以采用内部时钟模式,其它的等有空在说吧!实在扛不住啊!那么什么是内部时钟模式呢??
截取网上的一张图,你就会相当清晰了

TIM1和TIM8是由APB2分频提供的,而TIM2--TIM7是由分频APB1提供的,从时钟来源,我们是否就可以猜测到定时器1和定时器8更加高级呢?
APB2提供,最高可以到72M呀!至少我是这样猜想的!截取某网友对定时器时钟设置这部分的详解,如果你看了,你定会豁然开朗的,我把他的话整理了一下!
1、从图中可以看出,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器,图中的蓝色部分,注意了是倍频器,不是分频器,继续看!!

2、下面以定时器2~7的时钟说明这个倍频器的作用:(当然定时器和定时器8也是这样的原理)
a、当APB1的预分频系数为1时,这个倍频器不起作用(也就是倍频系数为1),定时器的时钟频率等于APB1的频率;
b、当 APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍(倍频系数为2)。

使用特权

评论回复
板凳
一代掌门|  楼主 | 2016-11-12 23:25 | 只看该作者
3、可以通过这几个例子来叙述(对于定时器2至定时器7)

a、假定AHB=36MHz,因为APB1允许的最大频率为36MHz,所以APB1的预分频系数可以取任意数值;
b、当APB1预分频系数=1 时,APB1=36MHz,TIM2~7的时钟频率=36MHz(倍频器不起作用);当APB1预分频系数=2时,APB1=18MHz,在倍频器的作用下,TIM2~7的时钟频率=36MHz。

总结:有人会问,既然需要TIM2~7的时钟频率=36MHz,为什么不直接取APB1的预分频系数=1?
答案是:APB1不但要为TIM2~7提供时钟,而且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时,TIM2~7仍能得到较高的时钟频率。

再举个例子:当AHB=72MHz时,APB1的预分频系数必须大于2,因为APB1的最大频率只能为36MHz。如果APB1的预分频系数=2,则因为这个倍频器,TIM2~7仍然能够得到72MHz的时钟频率。能够使用更高的时钟频率,无疑提高了定时器的分辨率,这也正是设计这个倍频器的初衷。
相信到这里,我们都可以熟悉的操作定时器的时钟了,但是这只是其中的一个模式,也就是内部时钟的模式!
还有其它三种模式暂时不做讨论。
3、跟着时钟有个大概的了解之后,继续看一个难点
所谓的带阴影的寄存器就出来了,看到上图那5个带阴影的寄存器没有,千万别以为是印刷或者扫描的问题file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/TempPic/S1KS3$JHNUY%7B59%7B$3%7BD~O%25X.tmp,下面一起来看看对这个阴影寄存器的通俗解释:有阴影的寄存器,表示在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器);正如手册上的14.3.1节所说,根据TIMx_CR1寄存器中APRE位的设置,preload register的内容可以随时传送到shadow register,即两者是连通的(permanently),或者在每一次更新事件(UEV)时才把preload register的内容传送到shadow register !
现在估计是明白了这个特点了,我的理解 也就是一个复杂的自动重装过程。
4、到这里你一定还发现了大写的 U和那个小箭头了!再看下面的分析:
表示对应寄存器的影子寄存器可以在发生更新事件时,被更新为它的preload register的内容;而图中UI部分,表示对应的Autoreload register可以产生一个更新事件(U)或更新事件中断(UI)。

所谓的时间U ,事件中断UI就是这么来的!
5、这样设计的好处是什么呢?
设计preload register和shadow register的好处是,所有真正需要起作用的寄存器(shadow register)可以在同一个时间(发生更新事件时)被更新为所对应的preload register的内容,这样可以保证多个通道的操作能够准确地同步。如果没有shadow register,或者preload register和shadow register

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

191

帖子

4

粉丝