
01. 通用定时器简介 通用定时器包含一个 16 位或 32 位自动重载计数器,该计数器由可编程预分频器驱动。9 H/ O g. ?2 C8 W# n 它们可用于多种用途,包括测量输入信号的脉冲宽度( 输入捕获 )或生成输出波形( 输出比较和 PWM)。5 D8 [) T- f; `2 [ 3 o+ X3 ]+ o" W. C; `! a% s7 ~" U 使用定时器预分频器和 RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从几微秒调制到几毫秒。 7 |: _, V' z! I& F 这些定时器彼此完全独立,不共享任何资源。- l/ M) R# _+ d5 W 02. TIM2到TIM5主要特性 通用 TIMx 定时器具有以下特性: ● 16 位(TIM3 和 TIM4)或 32 位(TIM2 和 TIM5) 递增、递减和递增/递减自动重载计数器。 ● 16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数介于 1 到 65536 之间。 ● 多达 4 个独立通道,可用于: — 输入捕获 — 输出比较 — PWM 生成(边沿和中心对齐模式)% [* A7 a2 l7 }; p$ i — 单脉冲模式输出 ● 使用外部信号控制定时器且可实现多个定时器互连的同步电路。9 H4 m) b# U( v* z) F5 Z2 v ● 发生如下事件时生成中断/DMA 请求:* U) n' t7 g7 S+ U — 更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)' j7 L9 q* X& w& r: ^# ]& o — 触发事件(计数器启动、停止、初始化或通过内部/外部触发计数)/ X* k/ R8 m5 }+ R6 y" U8 D — 输入捕获 — 输出比较 ● 支持定位用增量(正交)编码器和霍尔传感器电路: M7 d1 r( @1 e3 x ● 外部时钟触发输入或逐周期电流管理, i+ Z1 R+ L4 ^! t+ K , j" s; g4 W* i 03. TIM2到TIM5功能说明) t+ Z4 ^8 [3 ~' }: {; c( a& D/ k# w 时基单元 可编程定时器的主要模块由一个 16 位/32 位计数器及其相关的自动重装寄存器组成。此计数器可采用递增方式计数。计数器的时钟可通过预分频器进行分频。 计数器、自动重载寄存器和预分频器寄存器可通过软件进行读写。即使在计数器运行时也可执行读写操作。 时基单元包括: ● 计数器寄存器 (TIMx_CNT)8 J9 c5 Q- S1 V4 f( E ; w$ o& a$ c, Q2 S3 d$ j8 H' }+ O7 P ● 预分频器寄存器 (TIMx_PSC)1 F4 }5 ?6 E- k$ B# s$ v ● 自动重载寄存器 (TIMx_ARR) + U# L3 a) o2 [! U6 ]1 {$ J 自动重载寄存器是预装载的。对自动重载寄存器执行写入或读取操作时会访问预装载寄存器。预装载寄存器的内容既可以直接传送到影子寄存器,也可以在每次发生更新事件 (UEV)时传送到影子寄存器,这取决于 TIMx_CR1 寄存器中的自动重载预装载使能位 (ARPE)。当计数器达到上溢值(或者在递减计数时达到下溢值)并且 TIMx_CR1 寄存器中的 UDIS 位为0 时,将发送更新事件。该更新事件也可由软件产生。下文将针对各配置的更新事件的产生进行详细介绍。 计数器由预分频器输出 CK_CNT 提供时钟,仅当 TIMx_CR1 寄存器中的计数器启动位 (CEN)置 1 时,才会启动计数器(有关计数器使能的更多详细信息,另请参见从模式控制器的相关说明)。 " [+ ^1 b1 w$ ]" ~! _ 请注意,真正的计数器使能信号 CNT_EN 在 CEN 置 1 的一个时钟周期后被置 1。" M8 M, l+ l- l$ q& Y- @: l . p" P4 n; z( s( N9 @+ `( I 预分频器说明 $ e1 u) r) |9 }5 W 预分频器可对计数器时钟频率进行分频,分频系数介于 1 到 65536 之间。该预分频器基于16 位/32 位寄存器(TIMx_PSC 寄存器)所控 制的 16 位计数器。由于该控制寄存器具有缓冲功能,因此预分频器可实现实时更改。而新的预分频比将在下一更新事件发生时被采用。2 U9 }% j- {) Y! o# V5 K 图 120 和 图 121 给出了在预分频比发生实时变化时一些计数器行为的示例: 预分频器分频由 1 变为 2 时的计数器时序图 J) H3 X5 @2 g/ Q0 O: a3 `" A' D + ?/ x7 R! E" j6 e% P ![]() 预分频器分频由 1 变为 4 时的计数器时序图* e' U5 f7 E+ J: X; k3 l ![]() 计数器模式 递增计数模式5 X$ o6 d% u8 S- L ) G# Y+ r: X2 D* L; y7 O 在递增计数模式下,计数器从 0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新从 0 开始计数并生成计数器上溢事件。9 O6 K* k$ `1 i- L+ Z' D 1 K+ l/ H! T+ Y$ l 递减计数模式9 T; ]! [& Y7 d$ @ / f& h9 L- \! b! H3 R 在递减计数模式下,计数器从自动重载值(TIMx_ARR 寄存器的内容)开始递减计数到 0,然后重新从自动重载值开始计数并生成计数器0 _9 e! X/ @" ^5 J q( u 4 o7 |* m0 W1 `* |# S' C 下溢事件。' D# h# ^' u( W 2 ]/ x% _" s# U( }0 s& s 中心对齐模式(递增/ 递减计数) 1 N7 |# H& v; E2 G0 R8 q 在中心对齐模式下,计数器从 0 开始计数到自动重载值(TIMx_ARR 寄存器的内容)— 1,生成计数器上溢事件;然后从自动重载值开始: e. H1 B! y8 M 9 V% H8 t. g7 i C+ j 向下计数到 1 并生成计数器下溢事件。之后从0 开始重新计数。- O- H' S0 M9 I: e( v* F8 `6 U# D! l . ^1 p: D/ Z+ I" ]( ` 04. 时钟选择 计数器时钟可由下列时钟源提供:+ g! v/ d+ S4 x2 p+ w; e+ V+ W ● 内部时钟 (CK_INT) ; y9 \9 ]! l* A9 i* A ● 外部时钟模式 1:外部输入引脚 (TIx) ● 外部时钟模式 2:外部触发输入 (ETR),仅适用于 TIM2、TIM3 和 TIM4。 6 J; A" i `- u6 H5 n8 ~ ● 内部触发输入 (ITRx):使用一个定时器作为另一个定时器的预分频器,例如可以将定时器配置为定时器 2 的预分频器。 ; N$ N" D+ P% G% ?$ _ 05. 寄存器3 h: p2 D9 w+ D, w+ |% ] 5.1 TIMx 控制寄存器 1 (TIMx_CR1), j3 U( X4 }; A* `. i% k _ TIMx control register 1" [2 Z7 C, U9 i/ l9 K T( Q$ g 偏移地址:0x00 复位值:0x0000 ![]() 5.2 TIMx 控制寄存器 2 (TIMx_CR2) TIMx control register 2 偏移地址:0x04( [% b$ D7 X' y* E7 j6 L 复位值:0x0000 ![]() 3 G4 \" G+ Q3 v% y( H+ M, W5 B 5.3 TIMx 从模式控制寄存器 (TIMx_SMCR)5 I0 v/ a) R T2 y! C& Z TIMx slave mode control register 偏移地址:0x08$ {6 }2 R, m$ q2 l 复位值:0x00001 ^: D4 ]: _4 Q, l* e9 g! ~ ![]() + q' g5 _7 T: |/ ?# @* x 5.4 TIMx DMA/ 中断使能寄存器 (TIMx_DIER); i. \, w' R# l TIMx DMA/Interrupt enable register3 |6 c% v9 Z2 ?6 a2 d U( i 偏移地址:0x0C) f6 i7 H* F" e6 N- O' }! Q 复位值:0x0000; l: I& O1 r% T: O5 W5 \7 U ![]() , f/ B; R2 s% n' K+ W" C 5.5 TIMx 状态寄存器 (TIMx_SR) t- l( v9 T6 M l* g. m3 c+ a TIMx status register 偏移地址:0x10" t0 T, Q- P) Q 复位值:0x0000 : ^: R; K$ C# C ![]() 5.6 TIMx 事件生成寄存器 (TIMx_EGR)4 T1 e$ S5 T/ o8 @' v' O3 C- _ TIMx event generation register 偏移地址:0x14 复位值:0x0000 3 S1 C" g, L0 G! g. } ![]() 5.7 TIMx 捕获/ 比较模式寄存器 1 (TIMx_CCMR1)8 ?' K& }6 y' b0 t: |' \# N: P TIMx capture/compare mode register 10 W" C# V' P0 v 偏移地址:0x18 复位值:0x0000 ![]() 7 T- x5 J+ T! g6 J; A 5.8 TIMx 捕获/ 比较模式寄存器 2 (TIMx_CCMR2)+ a8 {9 i* s0 w; V( G* L TIMx capture/compare mode register 2 偏移地址:0x1C 复位值:0x00005 [+ e& n x" m, m9 n7 P # n5 M; v$ c$ k' ?' S2 g* o ![]() - J2 }+ O1 M* g$ s6 s 5.9 TIMx 捕获/ 比较使能寄存器 (TIMx_CCER)) K# P- V/ N, ] q9 N0 @ TIMx capture/compare enable register0 g- E* w! u# m- [7 B, Y9 U 偏移地址:0x200 x5 V4 P) h- o/ b 复位值:0x0000 ![]() 5.10 TIMx 计数器 (TIMx_CNT)7 O$ d9 A" w* x2 z. ?/ @+ X, h TIMx counter; v, u3 j- C' ^" q# I+ U: c 偏移地址:0x24 复位值:0x0000 ![]() 5.11 TIMx 预分频器 (TIMx_PSC)% p/ {' E/ ]1 A# p0 r. a TIMx prescaler 偏移地址:0x28- W' s3 y) L; R. S+ l6 p5 a 复位值:0x0000, }/ J! M% M' t+ a0 R# U6 G7 N. e ![]() 5.12 TIMx 自动重载寄存器 (TIMx_ARR) TIMx auto-reload register 偏移地址:0x2C 复位值:0x0000: B$ ]+ z+ H2 t7 j$ u ![]() 5.13 TIMx 捕获/ 比较寄存器 1 (TIMx_CCR1) TIMx capture/compare register 1 偏移地址:0x34 复位值:0x0000 0006 U% e+ ~2 {# H; V+ | f 5.14 TIMx 捕获/ 比较寄存器 2 (TIMx_CCR2)5 _% B7 J1 w/ y# n# @" T7 x TIMx capture/compare register 2$ M7 u1 j6 a7 d% [# Z: n 偏移地址:0x38! y. W2 a" c3 T. V T 复位值:0x0000 0000 ' K4 h) Z; u( c F# d; C ![]() 5.15 TIMx 捕获/ 比较寄存器 3 (TIMx_CCR3) TIMx capture/compare register 3% L- M! }4 D7 t" B* Q, W# _ 偏移地址:0x3C9 [4 {( b1 A# ^* v" Z3 K$ R$ [1 A# L 复位值:0x0000 0000+ \$ q2 h8 O. t F ![]() 5.16 TIMx 捕获/ 比较寄存器 4 (TIMx_CCR4) ?; G- J1 F& h7 m7 z0 b TIMx capture/compare register 4; ?: m0 r, m" @" @! _0 Z( D" e 偏移地址:0x40$ N8 F) x$ E5 H, ^: @ 复位值:0x0000 00008 [1 _# _ d. { 1 [+ r& R c% U2 U9 X1 l1 K ![]() 5.17 TIMx DMA 控制寄存器 (TIMx_DCR)0 A1 [9 h" N: k+ e# S TIMx DMA control register2 d& r: R8 n1 J8 q 偏移地址:0x48 复位值:0x00006 o2 s- } A) X4 l$ @- b7 W6 t . a7 t4 y/ K# |& ] ![]() : E# ]1 Z+ W* u# N 5.18 TIMx 全传输 DMA 地址 (TIMx_DMAR)( g0 d% X: h% u, O TIMx DMA address for full transfer/ b) {# M% S! r! x7 N8 d 偏移地址:0x4C9 Q1 Z. s8 L4 W- b7 m4 U7 c9 _ 复位值:0x0000 ![]() 5.19 TIM2 选项寄存器 (TIM2_OR)9 r! ?- ^( D9 d: M/ ]/ w TIM2 option register 偏移地址:0x50 复位值:0x0000$ [' I5 X$ b7 \. q% j% } ![]() 5.20 TIM5 选项寄存器 (TIM5_OR)0 z, W1 M! `. |) f2 b TIM5 option register; ] e9 m% P) ^8 ` 偏移地址:0x50 复位值:0x0000 ![]() ! |# t! j6 j7 z& l1 ` . o3 y4 H* u( Z1 g/ @ |
基于定时器捕获测量脉宽的应用示例
狂欢三】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的定时器不按设定超时产生中断