STM32入门篇之通用定时器彻底研究

 STM32的定时器功能很强大,学习起来也很费劲儿,本人在这卡了5天才算看明白。写下下面的文字送给后来者,希望能带给你点启发。在此声明,本人也是刚入门,接触STM32不足10天,所以有失误的地方请以手册为准,欢迎大家拍砖。

   其实手册讲的还是挺全面的,只是无奈TIMER的功能太复杂,所以显得手册很难懂,我就是通过这样看手册:while(!SUCCESS){看手册}才搞明白的!所以接下来我以手册的顺序为主线,增加一些自己的理解,并通过11个例程对TIMER做个剖析。实验环境是STM103V100的实验板,MDK3.2 +Library2.东西都不怎么新,凑合用……

   TIMER主要是由三部分组成:

1、           时基单元。

2、           输入捕获。

3、           输出比较。

还有两种模式控制功能:从模式控制和主模式控制。

一、 框图

让我们看下手册,一开始是定时器的框图,这里面几乎包含了所有定时器的信息,您要是能看明白,那么接下来就不用再看别的了

为了方便的看图,我对里面出现的名词和符号做个注解:

  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:应该叫做定时器输入信号x

ICx:输入比较x  ICxPS:分频后的ICx

OCx:输出捕获x  OCxREF:输出参考信号

关于框图还有以下几点要注意:

1、           影子寄存器。

有阴影的寄存器,表示在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器);(详细请参考版主博客http://blog.ednchina.com/STM32/401461/message.aspx

2、           输入滤波机制

ETRTIx输入端有个输入滤波器,它的作用是以采样频率Fdts来采样N次进行滤波的。(具体也请参考版主博客http://blog.ednchina.com/STM32/263170/message.aspx

3、           输入引脚和输出引脚是相同的。

   

 

 二、时基单元

       时基单元有三个部分:CNTPSCARRCNT的计数方式分三种:向上、向下、中央对齐。通俗的说就是0ARRARR00(ARR-1)ARR1.

    

 三、时钟源的选择

       这个是难点之一。从手册上我们看到共有三种时钟源:

1、           内部时钟。

也就是选择CK_INT做时钟,这个简单,但是有一点要注意,定时器的时钟不是直接来自APB1APB2,而是来自于输入为APB1APB2的一个倍频器,当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当 APB1的预分频系数为其它数值(即预分频系数为24816)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。

例如AHP 72MAPB12分频36M,那么TIMER就是APB12倍频,即72M

怎么选择时钟模式1呢?只要将SMCRSMS[2:0]弄成000就好了

SMCR

15    14      13   12       11 10  9  8      7    6    5   4   3    2   1  0

ETP 

ECE

ETPS[1:0]

ETF[3:0]

MSM

TS[2:0]

 

SMS[2:0]

 

2、           外部时钟模式1

这个比较麻烦,时钟源选择的其实就是TRGI(触发输入),但触发输入选择挺多的,共8……。看框图,他们是:ITRxTI1F_ED

TI1FP1TI2FP2ETRF

ITRx的东西跟定时器的级联有关,暂时不管他。要进入这种时钟模式首先置SMS111,当然这还没完,不像内部时钟那样,什么都配好了,这里你还得配置一下别的参数,比如选择TI1FP1,自然要对输入通道1的参数配置好,这样时钟才能按你需要的方式进来。就是配框图这块

 

相关寄存器

CCMR1(输入)

 IC2F[3:0]

IC2PSC[1:0]

CC2S[1:0]

IC1F[3:0]

IC1PSC[1:0]

CC1S[1:0]

 

CCER

15 14   13    12 11 10   9             5     4   3 2    1    0

 

 

CC4P

CC4E

 

 

CC3P

CC3E

 

 

CC2P

CC2E

 

 

CC1P

CC1E

SMCR

15    14      13   12       11 10  9  8      7    6    5   4   3    2   1  0

ETP 

ECE

ETPS[1:0]

ETF[3:0]

MSM

TS[2:0]

 

SMS[2:0]

CCMR1寄存器里选择好相应的输入(CC1S)和滤波(IC1F)后再配置好输入极性(CCIP)然后在SMCR中选择触发源(TS[2:0])为TI1这样输入通道就配好了!最后选择SMS111,开启时钟(CR1中的CEN)。现在时钟就是从TI1上的输入了,可以接个时钟源进行计数之类的。同理,如果要用ETR就把它相关通道配好就可以了

3、           外部时钟模式2

  选择外部输入作为时钟,看框图:

 

从图上可以看出ETR可以直接作为时钟输入也可以通过触发输入(TRGI)来作为时钟输入即在时钟模式1中触发源选择为ETR,两个效果上是一样的,看起来好像这个外部时钟模式2没什么用处,实际上不是的,他可以跟一些从模式(复位、触发、门控)进行组合。比如当从模式选为触发时,我们不可能再通过触发源选择ETR了,因为从模式控制器被占了,好在有外部时钟模式2,我们选择这种模式后就可以把两者组合在一起完成一些功能了。

总结一下,STM32的时钟选择比较特别,在SFR中关于时钟选择配置位不再一块,不是说两个位在一起000111就选择了而是由

SMCRSMSECE 来控制,这样感觉可以吧内部时钟与外部模式2同时打开(SMS:000,ECE:1),也可以吧外部模式1和外部模式2同时打开(SMS:111,ECE1),实际上上述两种方式用的都是外部时钟2.

 

四、捕获比较通道

               

这就是我说的定时器三个组成部分中的两个部分了。核心是那个捕获比较寄存器。

 看框图

 

 

   异或那块先不管他,好像跟编码器有关,输入有个特色就是可以把TI的输入搞到CC1上去,也可以把T2的输入搞到CC1上去,其实也可以把T1搞到CC1上去同时把T1搞到CC2上去,这样就有了后来的PWM输入。

输出上的特色是不直接输出,而是有个OC1REF,这样可以定义高有效还是低有效,输出自己需要的有效电平。



转至http://blog.sina.com.cn/s/blog_6c46cb860100mzgn.html

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值