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

  • 格式:pdf
  • 大小:325.50 KB
  • 文档页数:15

下载文档原格式

  / 15
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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(影子寄存器);(详细请参考版主博客

/STM32/401461/message.aspx)

2、输入滤波机制

在ETR何TIx输入端有个输入滤波器,它的作用是以采样频率

Fdts来采样N次进行滤波的。(具体也请参考版主博客

/STM32/263170/message.aspx

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

二、时基单元

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

三、时钟源的选择

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

1、内部时钟。

也就是选择CK_INT做时钟,这个简单,但是有一点要注意,定

时器的时钟不是直接来自APB1或APB2,而是来自于输入为

APB1或APB2的一个倍频器,当APB1的预分频系数为1时,

这个倍频器不起作用,定时器的时钟频率等于APB1的频率;

当APB1的预分频系数为其它数值(即预分频系数为2、4、8或

16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频

率两倍。

例如AHP 72M,APB12分频36M,那么TIMER就是APB1

的2倍频,即72M。

怎么选择时钟模式1呢?只要将SMCR中SMS[2:0]弄成000

就好了

SMCR

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

2、外部时钟模式1

这个比较麻烦,时钟源选择的其实就是TRGI(触发输入),但触

发输入选择挺多的,共8个……。看框图,他们是:ITRx、TI1F_ED、

TI1FP1、TI2FP2、ETRF

ITRx的东西跟定时器的级联有关,暂时不管他。要进入这种时

钟模式首先置SMS为111,当然这还没完,不像内部时钟那样,

什么都配好了,这里你还得配置一下别的参数,比如选择TI1FP1,

自然要对输入通道1的参数配置好,这样时钟才能按你需要的方

式进来。就是配框图这块

相关寄存器

CCMR1(输入)

CCER

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

SMCR

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

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

通道配好就可以了。

3、外部时钟模式2

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

从图上可以看出ETR可以直接作为时钟输入也可以通过触发输入

(TRGI)来作为时钟输入即在时钟模式1中触发源选择为ETR,两个

效果上是一样的,看起来好像这个外部时钟模式2没什么用处,实际上

不是的,他可以跟一些从模式(复位、触发、门控)进行组合。比如当

从模式选为触发时,我们不可能再通过触发源选择ETR了,因为从模

式控制器被占了,好在有外部时钟模式2,我们选择这种模式后就可以

把两者组合在一起完成一些功能了。

总结一下,STM32的时钟选择比较特别,在SFR中关于时钟选择配置

位不再一块,不是说两个位在一起00、01、11就选择了而是由

SMCR中SMS和ECE 来控制,这样感觉可以吧内部时钟与外部模式2

同时打开(SMS:000,ECE:1),也可以吧外部模式1和外部模式2同时

打开(SMS:111,ECE:1),实际上上述两种方式用的都是外部时钟2.

四、捕获比较通道