
01. 通用定时器简介 通用定时器包含一个 16 位或 32 位自动重载计数器,该计数器由可编程预分频器驱动。/ W6 x+ L" A* \) F0 k$ ]7 G & o8 |5 I* G* A" X- F 它们可用于多种用途,包括测量输入信号的脉冲宽度( 输入捕获 )或生成输出波形( 输出比较和 PWM)。 使用定时器预分频器和 RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从几微秒调制到几毫秒。, w0 d. k3 w- {( J0 O7 O- w 4 A+ U- `* t5 }* Y5 g) v: O 这些定时器彼此完全独立,不共享任何资源。5 i( Y3 d5 x1 J 02. TIM2到TIM5主要特性 通用 TIMx 定时器具有以下特性: ● 16 位(TIM3 和 TIM4)或 32 位(TIM2 和 TIM5) 递增、递减和递增/递减自动重载计数器。 ● 16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数介于 1 到 65536 之间。, O. e, ~" M5 s! [1 ~ ● 多达 4 个独立通道,可用于:6 q! s9 @0 [! w$ q0 g/ G7 J — 输入捕获: D* i: d8 x4 C/ N- m$ P; F/ \( Y — 输出比较$ D- y' z4 O/ k — PWM 生成(边沿和中心对齐模式) — 单脉冲模式输出 ● 使用外部信号控制定时器且可实现多个定时器互连的同步电路。 ● 发生如下事件时生成中断/DMA 请求: — 更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发). Q! }/ }8 E. `/ O) ~$ C — 触发事件(计数器启动、停止、初始化或通过内部/外部触发计数); h) v$ C0 r' r+ Z$ n — 输入捕获 — 输出比较 ● 支持定位用增量(正交)编码器和霍尔传感器电路3 i$ [% B2 b( h2 i; a |3 t ● 外部时钟触发输入或逐周期电流管理 6 `$ b9 X6 t5 j4 P( h- Z 03. TIM2到TIM5功能说明 时基单元2 x' o8 _% V: a6 @" R! E( _$ v 可编程定时器的主要模块由一个 16 位/32 位计数器及其相关的自动重装寄存器组成。此计数器可采用递增方式计数。计数器的时钟可通过预分频器进行分频。) j! x( F& i; K & l5 s2 i: x( Z; { 计数器、自动重载寄存器和预分频器寄存器可通过软件进行读写。即使在计数器运行时也可执行读写操作。 6 V+ n6 i, ^, f8 ?' w3 } 时基单元包括:; |. [1 q8 p: B ● 计数器寄存器 (TIMx_CNT) : ]! k1 k* P2 q5 w) M! Q ● 预分频器寄存器 (TIMx_PSC) 1 r, w" p r' K" e. o ● 自动重载寄存器 (TIMx_ARR)# B5 {1 ^- m D / s1 H. I8 }5 {. U7 x1 R1 [) d 自动重载寄存器是预装载的。对自动重载寄存器执行写入或读取操作时会访问预装载寄存器。预装载寄存器的内容既可以直接传送到影子寄存器,也可以在每次发生更新事件 (UEV)时传送到影子寄存器,这取决于 TIMx_CR1 寄存器中的自动重载预装载使能位 (ARPE)。当计数器达到上溢值(或者在递减计数时达到下溢值)并且 TIMx_CR1 寄存器中的 UDIS 位为0 时,将发送更新事件。该更新事件也可由软件产生。下文将针对各配置的更新事件的产生进行详细介绍。' s* }& M2 q4 n2 U5 ^. o 计数器由预分频器输出 CK_CNT 提供时钟,仅当 TIMx_CR1 寄存器中的计数器启动位 (CEN)置 1 时,才会启动计数器(有关计数器使能的更多详细信息,另请参见从模式控制器的相关说明)。 请注意,真正的计数器使能信号 CNT_EN 在 CEN 置 1 的一个时钟周期后被置 1。 预分频器说明% B( z( m% m) e - M9 X2 k+ l5 P' n i: X. Z: U, K5 i 预分频器可对计数器时钟频率进行分频,分频系数介于 1 到 65536 之间。该预分频器基于16 位/32 位寄存器(TIMx_PSC 寄存器)所控 制的 16 位计数器。由于该控制寄存器具有缓冲功能,因此预分频器可实现实时更改。而新的预分频比将在下一更新事件发生时被采用。 . P+ N6 C0 Y, R" `0 G. u5 n 图 120 和 图 121 给出了在预分频比发生实时变化时一些计数器行为的示例:8 r# P {# S' `" ~ 4 S9 @9 H5 G/ F7 M0 W3 E 预分频器分频由 1 变为 2 时的计数器时序图4 d# s/ k' k$ _+ z) f ![]() 0 H" `1 I9 J" j/ x- m 预分频器分频由 1 变为 4 时的计数器时序图7 I' C) C$ v$ {0 L ![]() : I( h' u' G: Z4 I; v7 U) S 计数器模式 9 Q+ ~4 O g, m! T8 W 递增计数模式0 A6 Z* i# K9 v2 d) D9 P , J0 J# H9 \* k 在递增计数模式下,计数器从 0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新从 0 开始计数并生成计数器上溢事件。. w0 \7 c% `) q 递减计数模式 在递减计数模式下,计数器从自动重载值(TIMx_ARR 寄存器的内容)开始递减计数到 0,然后重新从自动重载值开始计数并生成计数器5 L1 Y0 g. v3 k/ G7 f 下溢事件。" X$ O% r3 |% X W1 i, n 3 k! u C8 x0 u! U0 o9 @ 中心对齐模式(递增/ 递减计数) R* n5 c0 V. r 在中心对齐模式下,计数器从 0 开始计数到自动重载值(TIMx_ARR 寄存器的内容)— 1,生成计数器上溢事件;然后从自动重载值开始 向下计数到 1 并生成计数器下溢事件。之后从0 开始重新计数。* S8 }9 M% G; {, _' p5 g2 n& w# x% B8 F3 g 04. 时钟选择 计数器时钟可由下列时钟源提供: 4 b% ]; G' P6 X5 [ ● 内部时钟 (CK_INT)9 j( w/ N6 M/ ? E$ ? ' G; h' U2 E; e7 _, P* L/ w; r ● 外部时钟模式 1:外部输入引脚 (TIx)% S( K1 I! k3 t2 Z" ]. R k * ]$ _5 f7 v4 p ● 外部时钟模式 2:外部触发输入 (ETR),仅适用于 TIM2、TIM3 和 TIM4。 3 q, ^4 r0 V) [" }5 V ● 内部触发输入 (ITRx):使用一个定时器作为另一个定时器的预分频器,例如可以将定时器配置为定时器 2 的预分频器。+ I+ [' N) D l' V* Y * o _% w0 B3 S: A; r 05. 寄存器 5.1 TIMx 控制寄存器 1 (TIMx_CR1) TIMx control register 1 偏移地址:0x00 复位值:0x0000 ![]() 5.2 TIMx 控制寄存器 2 (TIMx_CR2) TIMx control register 2* V/ e) ~% h" Q5 [ 偏移地址:0x04 复位值:0x0000 ![]() 5.3 TIMx 从模式控制寄存器 (TIMx_SMCR)* y' w% w: n1 N; k TIMx slave mode control register 偏移地址:0x08& q1 J! m2 Q; E9 t4 r0 j; b v, \ 复位值:0x0000" F! Y, U" P5 r1 W/ C9 ] ![]() 5.4 TIMx DMA/ 中断使能寄存器 (TIMx_DIER) TIMx DMA/Interrupt enable register. J5 d; u7 \: l5 P 偏移地址:0x0C7 ^! P# H& d& q5 q" E 复位值:0x0000. K; J9 F I! ^ ' l/ ^2 }4 @- w0 g( p7 B ![]() 5.5 TIMx 状态寄存器 (TIMx_SR)+ ~; p- {* B: g- H" e- e4 Y9 ] TIMx status register 偏移地址:0x10 复位值:0x0000 ![]() 5.6 TIMx 事件生成寄存器 (TIMx_EGR)6 r0 [7 ~8 z' a+ ~ TIMx event generation register) |# e+ p4 [6 i0 z7 d" c8 o. `, B" c" T 偏移地址:0x14' A0 x/ ~4 t9 B+ { 复位值:0x00006 O. e: r5 X/ B) d! b ![]() & X$ }6 i6 L9 Z% a$ r, ^, L 5.7 TIMx 捕获/ 比较模式寄存器 1 (TIMx_CCMR1)& h/ Q* C+ E+ t$ w- N# u" C( o9 V TIMx capture/compare mode register 1 偏移地址:0x184 U0 d9 H! G* E6 t& N 复位值:0x0000! ~" b( I0 ?- D0 F$ _( i- Q3 ^ U , K% z/ p" ^$ w1 G0 I& j0 j; l% R- ` ![]() 5.8 TIMx 捕获/ 比较模式寄存器 2 (TIMx_CCMR2)/ M: y+ {5 L) t3 i( ^* h$ P! j TIMx capture/compare mode register 2 偏移地址:0x1C# i" m( t8 `7 h- j9 n 复位值:0x0000 N1 O$ P8 j; [: J4 K* P8 a9 e ![]() 3 Q" e1 O" P1 H/ L 5.9 TIMx 捕获/ 比较使能寄存器 (TIMx_CCER) TIMx capture/compare enable register+ _; ~+ |" P/ F 偏移地址:0x20& r7 Z; d- l9 e( @ 复位值:0x00008 `3 ]* a, l' ]; H8 c ( z- W& u+ z0 K. J9 V8 z' d& O ![]() ) R0 o B- A/ w8 z" @ 5.10 TIMx 计数器 (TIMx_CNT)% ~" G4 d" i' s A, x# S2 t2 L9 H TIMx counter 偏移地址:0x24 复位值:0x0000 ![]() " c& {1 N. m; ]. O) Y8 m 5.11 TIMx 预分频器 (TIMx_PSC) TIMx prescaler: l0 `" W" e5 m& @5 ~! @. w* o9 | 偏移地址:0x28 复位值:0x0000% F6 C7 y+ l4 J+ C0 n# t9 j5 d ![]() 5.12 TIMx 自动重载寄存器 (TIMx_ARR)$ z0 ]8 f. ?) ?7 \+ d TIMx auto-reload register 偏移地址:0x2C 复位值:0x0000 ![]() " w$ V) E4 i+ d. V' N 5.13 TIMx 捕获/ 比较寄存器 1 (TIMx_CCR1)6 V4 c& H5 P" Q% q2 r TIMx capture/compare register 1 偏移地址:0x34# ?% Z, ^! z* y% t8 K1 o6 Z 复位值:0x0000 000: l. |$ f. a7 D. M 5.14 TIMx 捕获/ 比较寄存器 2 (TIMx_CCR2) TIMx capture/compare register 2 偏移地址:0x38 复位值:0x0000 0000 |; {& J0 {2 _; S- a! h2 z ![]() 8 t2 n1 H# P v3 G& G, s 5.15 TIMx 捕获/ 比较寄存器 3 (TIMx_CCR3)! z l1 O# o3 k1 Y( o6 A& V TIMx capture/compare register 3 偏移地址:0x3C 复位值:0x0000 0000 4 m5 h B( v# _/ _ k% C ![]() ' ~0 h8 G6 l' K$ z 5.16 TIMx 捕获/ 比较寄存器 4 (TIMx_CCR4) TIMx capture/compare register 4 偏移地址:0x40# Q7 {1 @* r: ~: y/ n# c 复位值:0x0000 0000, r& e% U2 g3 x; j ![]() , K# ~( p8 [0 I5 a 5.17 TIMx DMA 控制寄存器 (TIMx_DCR) TIMx DMA control register 偏移地址:0x48* |: a# t8 h0 L9 [) E% ~1 t 复位值:0x0000) i! h1 |% D8 H7 T: r ' h1 H6 m4 @! C1 B) M- `6 N) X ![]() 5.18 TIMx 全传输 DMA 地址 (TIMx_DMAR)+ @% e9 z1 k; f/ e2 t2 ?% R TIMx DMA address for full transfer! Z) F- T" `' i q9 ` 偏移地址:0x4C 复位值:0x0000 ![]() 9 O: d3 e9 c2 G) U4 v& O, H: R 5.19 TIM2 选项寄存器 (TIM2_OR) TIM2 option register: }3 Z* z4 G) X- t0 S 偏移地址:0x50 复位值:0x0000 : H$ A3 ?2 u2 u: J2 b ![]() 0 x n! F7 ]) V9 ^/ i; z 5.20 TIM5 选项寄存器 (TIM5_OR) TIM5 option register 偏移地址:0x50 复位值:0x0000 ![]() 1 m! k* g9 H0 [- m3 ?3 x1 [ ( y4 q5 |& ^+ n) Z4 T7 T, ~ |
基于定时器捕获测量脉宽的应用示例
狂欢三】STM32C031使用TIM定时器DMA方式实现WS2812彩灯输出(三)
【狂欢三】STM32C031使用TIM定时器DMA方式实现PWM输出(二)
【狂欢三】STM32C031使用TIM定时器PWM输出
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
定时器剩余通道是否可以做PWM输出呢?
基于STM32双定时器+ADC+DMA实战经验分享
基于STM32的定时器触发ADC时可能遇到的情形
【NUCLEO-U545RE-Q评测】5. 基本计时器
基于STM32的定时器不按设定超时产生中断