This is an old revision of the document!
Basic Timer
Programming Example
The code snippet bellow shows how to configure and use a GPIO pin as input.
#include "reg_stm32f4xx.h" RCC->APB1ENR |= (0x1 << 0u); /* Enable TIM2 clock. */ /* configure timer */ TIM2->PSC = 84000u - 1u; /* Counting with f = 84MHz / 84000 = 1kHz */ TIM2->ARR = 512u; /* Count to 512 */ TIM2->CR1 |= (0x1 << 0u); /* Start timer */
Configuration Registers
CR1
Configuration register 1
DIR* | 0 | Counter used as upcounter (reset state) |
1 | Counter used as downcounter | |
OPM | 0 | Counter is not stopped at update event (reset state) |
1 | Counter stops at the next update event | |
CEN | 0 | Counter disabled (reset state) |
1 | Counter enabled |
*This bit is readonly in center-aligned or encoder mode
DIER
DMA / Interrupt enable register
UDE | 0 | Update DMA request disabled (reset state) |
1 | Update DMA request enabled | |
CC1IE | 0 | CC1 interrupt disabled (reset state) |
1 | CC1 interrupt enabled | |
UIE | 0 | Update interrupt disabled (reset state) |
1 | Update interrupt enabled |
SMCR
Slave mode control register
ECE | 0 | External clock mode 2 disabled (reset state) | ||
1 | External clock mode 2 enabled. Clock enabled by any active edge on ETRF | |||
ETF | 0000 | No filter, fDTS (reset state) | 1000 | fsampling ⇒ fDTS / 8, N=6 |
0001 | fsampling ⇒ fCKINT, N=2 | 1001 | fsampling ⇒ fDTS / 8, N=8 | |
0010 | fsampling ⇒ fCKINT, N=4 | 1010 | fsampling ⇒ fDTS / 16, N=5 | |
0011 | fsampling ⇒ fCKINT, N=8 | 1011 | fsampling ⇒ fDTS / 16, N=6 | |
0100 | fsampling ⇒ fDTS / 2, N=6 | 1100 | fsampling ⇒ fDTS / 16, N=8 | |
0101 | fsampling ⇒ fDTS / 2, N=8 | 1101 | fsampling ⇒ fDTS / 32, N=5 | |
0110 | fsampling ⇒ fDTS / 4, N=6 | 1110 | fsampling ⇒ fDTS / 32, N=6 | |
0111 | fsampling ⇒ fDTS / 4, N=8 | 1111 | fsampling ⇒ fDTS / 32, N=8 | |
SMS | 000 | Slave mode disabled (reset state) | 100 | Reset mode |
001 | Encoder mode 1 | 101 | Gated mode | |
010 | Encoder mode 2 | 110 | Trigger mode | |
011 | Encoder mode 3 | 111 | External clock mode 1 |