
前言 本文档:$ i% G+ Y' x( T" X% a ● 概述了 STM32F1xx、STM32F2xx、STM32F4xx、STM32L1xx 和 STM32F30/31/37/38x微控制器系列的定时器外设; ● 介绍了定时器的多种模式和特殊功能,如时钟源;2 v4 I+ }$ s* Y4 I ● 介绍了如何使用各种可用模式与功能; ● 介绍了如何计算各种配置下的时基;- T" B) w2 Z& N0 h' D: ~ ● 除基本定时器模式外,还介绍了定时器同步序列以及用于电机控制应用的高级功能。5 _5 _) B) W) } 本文档针对各模式提供了典型配置以及使用方法的示例。* f# L" e% E9 H& W1 |3 ] 除非另外说明,本文档余下部分中的术语 STM32xx 均用于指代 STM32F1xx、STM32F2xx、/ Q8 J1 }# g# }1 Y7 r% c3 Y/ f STM32F4xx、 STM32L1xx 和 STM32F30/31/37/38x 微控制器系列。 . O' E$ n* q( N- M% U ![]() 1概述 STM 32 器件使用多种类型的定时器,各种定时器特点如下: ●通用定时器:可用于输出比较(时序和延迟生成)、单脉冲模式、输入捕捉(用于测量外部信号频率)、传感器接口(编码器和霍尔传感器)等各种场合。" o" g; f1 d; {5 x1 r ●高级定时器:此类定时器的功能最多。除通用功能外,它们还包含一些与电机控制和数字能量转换应用相关的功能:三个带死区控制的互补信号以及紧急关断输入。 ●单通道或双通道定时器:用作通用定时器,通道数有限。0 x. h) K% }& y |5 B ●带互补输出的单通道或双通道定时器:与上一类型相同,只是其中一个通道上具有死区发生器。这样可得到时基与高级定时器无关的互补信号。$ e6 _% X( I+ b5 [* f ●基本定时器:没有任何输入/输出,既可用作时基定时器,也可用于触发 DAC 外设。9 Y' U- b5 w( l" h 表 2 汇总了 STM32 系列定时器。8 b8 ]& e8 E/ {/ a 表 3 给出了定时器特性的总览。文档 ID 022500 第 2 版 7 S) Y6 e- a) j ![]() ![]() 2基本定时器模式 基本定时器经过编程可在以下其中一种配置下工作。! a, W8 O X! v- q% K/ L 2.1时钟输入源4 k! ]8 \8 E$ @! X& S0 O6 n 定时器可同时与多个时钟同步:' U9 F* W, E) _6 j$ L. p) X( d ●内部时钟 ●外部时钟 —外部时钟模式 1(TI1 或 TI2 引脚)1 P, I% m* p, q" x$ w8 G —外部时钟模式 2(ETR 引脚) —内部触发时钟 (ITRx) 2.1.1内部时钟 默认情况下,定时器由 RCC 提供的内部时钟驱动。要选择该时钟源,应该将 SMCR_SMS(如果存在)位复位。+ n: E0 N0 a7 @, \ # e! N# w7 [% v# p 2.1.2外部时钟 外部时钟定时器分为两类: ●连接到 TI1 或 TI2 引脚的外部时钟 ●连接到 ETR 引脚的外部时钟 在上述情况下,通过与 TIx 引脚或 ETR 引脚连接的外部信号提供时钟。并且应该验证最大外部时钟频率。 注: + O3 W" W: W( F1 W7 @3 k( f5 ^ 1除以上所有时钟源外,定时器还应该通过 APBx 时钟驱动。 2外部时钟并非直接馈送预分频器,而是首先通过专用逻辑块与 APBx 时钟同步。, d% j: @9 d" G / z5 f9 Z2 \0 Q* ^0 b5 I* I' T. Q 外部时钟模式 1(TI1 或 TI2 引脚) 在此模式下,外部时钟将施加到定时器的输入引脚 TI1 或 TI2 上。为此:/ K5 J5 b. Y& d2 v( O" w 1.配置定时器将 TIx 引脚用作输入: a) 通过对 TIMx_CCMR1 寄存器中的 CCxS 位执行写操作,选择要使用的引脚。 b) 选择输入的极性:+ {/ h, J6 s' x+ d- q3 ` 对于 STM32F10x 系列:通过对 TIMx_CCER 寄存器中的 CCxP 位执行写操作,选择上升沿触发或下降沿触发; 对于其它系列:通过对 TIMx_CCER 寄存器中的 CCxP 和 CCxNP 位执行写操作,选择上升/下降沿触发,或者边沿触发(a)。 c)根据需要,通过对 TIMx_CCMR1 寄存器中的 ICxF[3:0] 位执行写操作配置滤波器和预分频器: 通过对 TIMx_SMCR 寄存器的 TS 位执行写操作,将定时器 TIx 选为触发输入源。 通过对 TIMx_SMCR 寄存器写入 SMS=111 选择外部时钟模式 1。通过将8 z; |# X; q8 x TIMx_CCER 寄存器中的 CCEx 位置 1 使能相应的通道。: w4 U* n" o& G 2.通过对 TIMx_SMCR 寄存器中的 TS 位执行写操作,将定时器 TIx 选为触发输入源。 3.通过对 TIMx_SMCR 寄存器写入 SMS=111 选择外部时钟模式 1。+ {6 W% s" L7 F2 Z, k " T( ]) J9 v3 f+ m3 f# ` % w6 H6 H+ q, U! E9 h" g2 K" @' p+ t 外部时钟模式 2(ETR 引脚) 外部时钟模式 2 将 ETR 引脚用作定时器输入时钟。要使用该功能: 1.通过对 TIMx_SMCR 寄存器写入 ECE = 1 选择外部时钟模式 2。 2.根据需要,通过对 TIMx_SMCR 寄存器中的 ETPS [1:0]、ETF [3:0] 和 ETP 位执行写操作配置预分频器、滤波器和极性。 . k4 }1 j$ v, C+ g% ]& K7 W, N7 x 内部触发时钟 (ITRx) 这是一个特殊的定时器同步模式。当将一个定时器用作另一个定时器的预分频器时,第一个定时器的更新事件或输出比较信号将用作第二个定时器的时钟。 2 ^& _; Z' C. _: e' R) s 2.2时基发生器9 _, w: u% o0 i8 w# h9 b6 ? 定时器可用作时基发生器。根据时钟、预分频器和自动重载、以及重复计数器(如果存在)的参数,16 位定时器可生成 1 纳秒到数分钟的更新事件。对于 32 位定时器,时间范围更大。 ) e7 s1 ?: R- E; z5 ]6 M% a . C* i- X$ Y9 R- d7 s 更新事件周期示例 b7 ^; r+ d6 W8 Z" b r 更新事件周期按如下公式计算: Update_event = TIM_CLK/((PSC + 1)*(ARR + 1)*(RCR + 1)) / v7 I4 ~# A2 A/ G4 j; b- S - X# z0 a: }# m9 x 其中: TIM_CLK = 定时器时钟输入 PSC = 16 位预分频器寄存器 ARR = 16/32 位自动重载寄存器 RCR = 16 位重复计数器8 {5 H4 H1 b. |4 F/ D3 T# f / d; z( S1 l9 E# K0 ^) G5 o$ }; Q& k4 r2 G ) n9 [% @1 D9 b; N) V8 w8 \ TIM_CLK = 72 MHz1 i4 p& D1 Z; g" Y1 q0 Z6 k 预分频比 = 11 N- e1 ^4 S* I s D. F 自动重载值 = 655353 e$ z& O ]6 R3 k 无重复计数器 RCR = 0 Update_event = 72*106/((1 + 1)*(65535 + 1)*(1)) Update_event = 549.3 Hz : s8 j6 t; _. J1 t. E 1 S2 A3 [ k) H O 外部时钟模式 2 示例) o2 P! I9 U6 \$ i5 H/ j$ y; T4 B 在此模式下,更新事件周期按如下公式计算:( ^* Q3 S5 ~7 ^. r. s; @ Update_event = ETR_CLK/((ETR_PSC)*(PSC + 1)*(ARR + 1)*(RCR + 1)) 其中:ETR_CLK = 连接到 ETR 引脚的外部时钟频率。7 d( e0 T# [/ D8 B8 J ETR_CLK = 100 kHz/ U: A% W. h* c5 k$ T/ E: Z6 V 预分频比 = 1 ETR_PSC = 2# g+ u, Q( j: N4 q$ Q 自动重载值 = 2559 l/ V2 C [% B1 a; U 重复计数器 = 2" {* D- B- y( F4 p+ I s8 ? Update_event= 100*103/((2 + 1)* (1+ 1)*((255 + 1)*(2 + 1)) Update_event = 21.7 Hz " w5 S7 [ n# Z* a; c& H6 H4 K" |. t 外部时钟模式 1 示例2 b0 e( `9 e; s 在此模式下,更新事件周期按如下公式计算: Update_event = TIx_CLK/((PSC + 1)*(ARR + 1)*(RCR +1)) 其中:TIx_CLK = 连接到 TI1 引脚或 TI2 引脚的外部时钟频率。 TIx_CLK = 50 kHz 预分频比 = 16 s" O! ]9 F2 |- K! C 自动重载值 = 2555 l$ ~2 M! p* R. v A6 m3 ? 重复计数器 = 2 Update_event = 50 000/((1+ 1)*((255 + 1)*(2 + 1)) Update_event = 32.55 Hz + M) N. M; r' z* ~& d ! @0 l8 C' ]6 \: Y- b% s, ?6 l: v, Z 内部触发时钟 (ITRx) 模式 1 示例 在此模式下,更新事件周期按如下公式计算:( E' W( Q; f$ o8 I* V: C4 p% ~ Update_event = ITRx_CLK/((PSC + 1)*(ARR + 1)*(RCR + 1))# k7 j6 @8 u: B; x 其中 ITRx_CLK = 映射到定时器触发输入 (TRGI) 的内部触发频率 ITRx_CLK = 8 kHz 预分频比 = 1" J! }0 z0 u' n5 {# U* [ 自动重载值 = 255 重复计数器 = 1$ p' o$ V. ?4 ?0 q3 T Update_event = 8000/((1+ 1)*((255 + 1)*(1 + 1)) Update_event = 7.8 Hz" o2 x5 |- }7 J2 M: v$ x 根据计数器模式的不同,更新事件通常在以下情况产生: ?+ f V5 e! G1 @- A" e ●每次上溢(如果使用递增计数模式):TIMx_CR1 寄存器中的 DIR 位复位 ●每次下溢(如果使用递减计数模式):TIMx_CR1 寄存器中的 DIR 位置 11 }5 |& c( r- B% v0 D, L" ] ●每次上溢和下溢(如果使用中心对齐模式):CMS 位不为零。 还可以通过以下方式生成更新事件:# [ ?4 B7 p2 o' U% o$ p4 } ●通过软件生成更新事件(如果 TIM_EGR 寄存器中的 UG(更新生成)位置 1)。 ●通过从模式控制器生成更新事件 因为缓冲的寄存器(ARR、PSC 和 CCRx)需要一个装载预装载值的更新事件,因此将URS(更新请求源)置 1 可避免每次装载这些值时触发更新标志位。这样,只有当计数器发生上溢/下溢时才会生成更新事件。; O9 h- R- c( g9 m% q1 [ R S3 W 此外,可以通过将 CR1 寄存器中的 UDIS(更新禁止)位置 1 以禁止更新事件。这样,便不会生成更新事件,而各影子寄存器(ARR、PSC 和 CCRx)的值会保持不变。但如果将 UG位置 1,或者从从模式控制器接收到硬件复位,则会重新初始化计数器和预分频器。 当 DIER 寄存器中的 UIE 位或/和 UDE 位置 1 时,会产生中断或/和 DMA 请求。# B7 Y2 P) I: A* h 有关在此模式下使用定时器的详细信息,请参见 /Project/STM32xx_StdPeriph_Examples/TIM/TimeBase 文件夹中 STM32xx 标准外设库提供的示例。1 H! r, }; r! [' y7 D 4 `( F7 Q4 o2 `" a 完整版请查看:附件 2 B+ @" M& }$ y5 N* Q. j |
DM00042534_ZHV2.pdf
下载815.27 KB, 下载次数: 7