33. Basic timers (TIM6/TIM7)

33.1 TIM6/TIM7 introduction

The basic timers TIM6 and TIM7 consist of a 16-bit auto-reload counter driven by a programmable prescaler.

They may be used as generic timers for time base generation but they are also specifically used to drive the digital-to-analog converter (DAC). In fact, the timers are internally connected to the DAC and are able to drive it through their trigger outputs.

The timers are completely independent, and do not share any resources.

33.2 TIM6/TIM7 main features

Basic timer (TIM6/TIM7) features include:

Figure 368. Basic timer block diagram

Figure 368. Basic timer block diagram Event symbol Interrupt symbol

The block diagram shows the internal structure of the basic timer. The clock source 'TIMxCLK from RCC' enters the system and becomes the 'Internal clock (CK_INT)'. This clock feeds into a 'Trigger controller' block, which also has a 'Control' input. The Trigger controller outputs 'TRGO' to the DAC and provides 'Reset, enable, Count' signals to the counter logic. The main counter logic consists of three primary blocks: an 'Auto-reload register', a 'PSC prescaler', and a 'CNT counter'. The 'CK_PSC' signal goes into the PSC prescaler, which then outputs 'CK_CNT' to the CNT counter. The CNT counter generates an update event 'U' and an update interrupt 'UI'. The 'U' event triggers the transfer of preload registers to active registers. The diagram includes a legend for symbols: a rectangle with 'Reg' indicates preload registers, a straight arrow with a crossbar indicates an 'Event', and a jagged arrow indicates 'Interrupt & DMA output'.

Notes:

Reg
Preload registers transferred to active registers on U event according to control bit
Event
Interrupt & DMA output

MS33142V1

Figure 368. Basic timer block diagram Event symbol Interrupt symbol

33.3 TIM6/TIM7 functional description

33.3.1 Time-base unit

The main block of the programmable timer is a 16-bit upcounter with its related auto-reload register. The counter clock can be divided by a prescaler.

The counter, the auto-reload register and the prescaler register can be written or read by software. This is true even when the counter is running.

The time-base unit includes:

The auto-reload register is preloaded. The preload register is accessed each time an attempt is made to write or read the auto-reload register. The contents of the preload register are transferred into the shadow register permanently or at each update event UEV, depending on the auto-reload preload enable bit (ARPE) in the TIMx_CR1 register. The update event is sent when the counter reaches the overflow value and if the UDIS bit equals 0 in the TIMx_CR1 register. It can also be generated by software. The generation of the update event is described in detail for each configuration.

The counter is clocked by the prescaler output CK_CNT, which is enabled only when the counter enable bit (CEN) in the TIMx_CR1 register is set.

Note that the actual counter enable signal CNT_EN is set 1 clock cycle after CEN.

Prescaler description

The prescaler can divide the counter clock frequency by any factor between 1 and 65536. It is based on a 16-bit counter controlled through a 16-bit register (in the TIMx_PSC register). It can be changed on the fly as the TIMx_PSC control register is buffered. The new prescaler ratio is taken into account at the next update event.

Figure 369 and Figure 370 give some examples of the counter behavior when the prescaler ratio is changed on the fly.

Figure 369. Counter timing diagram with prescaler division change from 1 to 2

Figure 369: Counter timing diagram with prescaler division change from 1 to 2

This timing diagram illustrates the behavior of a timer when the prescaler is changed from a division of 1 to 2. The signals shown are:

MS31076V2 is noted at the bottom right of the diagram.

Figure 369: Counter timing diagram with prescaler division change from 1 to 2

Figure 370. Counter timing diagram with prescaler division change from 1 to 4

Figure 370: Counter timing diagram with prescaler division change from 1 to 4

This timing diagram illustrates the behavior when the prescaler is changed from a division of 1 to 4. The signals are:

MS31077V2 is noted at the bottom right of the diagram.

Figure 370: Counter timing diagram with prescaler division change from 1 to 4

33.3.2 Counting mode

The counter counts from 0 to the auto-reload value (contents of the TIMx_ARR register), then restarts from 0 and generates a counter overflow event.

An update event can be generated at each counter overflow or by setting the UG bit in the TIMx_EGR register (by software or by using the slave mode controller).

The UEV event can be disabled by software by setting the UDIS bit in the TIMx_CR1 register. This avoids updating the shadow registers while writing new values into the preload registers. In this way, no update event occurs until the UDIS bit has been cleared, however, the counter and the prescaler counter both restart from 0 (but the prescale rate does not change). In addition, if the URS (update request selection) bit in the TIMx_CR1 register is set, setting the UG bit generates an update event UEV, but the UIF flag is not set (so no interrupt or DMA request is sent).

When an update event occurs, all the registers are updated and the update flag (UIF bit in the TIMx_SR register) is set (depending on the URS bit):

The following figures show some examples of the counter behavior for different clock frequencies when TIMx_ARR = 0x36.

Figure 371. Counter timing diagram, internal clock divided by 1

Timing diagram for a counter in counting mode. The diagram shows the relationship between the prescaler clock (CK_PSC), counter enable (CNT_EN), timer clock (Timerclock = CK_CNT), counter register values, counter overflow, update event (UEV), and update interrupt flag (UIF).

The timing diagram illustrates the operation of a counter in counting mode. The signals shown are:

The diagram shows that the counter counts from 31 to 36, then overflows to 00. The overflow event triggers the update event (UEV) and the update interrupt flag (UIF). The counter then continues counting from 01 to 07. The prescaler clock (CK_PSC) and counter clock (CK_CNT) are shown as square waves, with CK_CNT being a divided version of CK_PSC. The counter enable (CNT_EN) signal is shown as a high level, indicating that counting is enabled.

MS31078V2

Timing diagram for a counter in counting mode. The diagram shows the relationship between the prescaler clock (CK_PSC), counter enable (CNT_EN), timer clock (Timerclock = CK_CNT), counter register values, counter overflow, update event (UEV), and update interrupt flag (UIF).

Figure 372. Counter timing diagram, internal clock divided by 2

Timing diagram for internal clock divided by 2. It shows CK_PSC, CNT_EN, Timerclock = CK_CNT, Counter register values (0034, 0035, 0036, 0000, 0001, 0002, 0003), Counter overflow, Update event (UEV), and Update interrupt flag (UIF) over time.

This timing diagram illustrates the operation of a counter with an internal clock divided by 2. The top signal, CK_PSC, is a periodic square wave. Below it, CNT_EN is a horizontal line indicating the counter is enabled. The Timerclock = CK_CNT signal is a square wave with a frequency half that of CK_PSC. The Counter register shows a sequence of values: 0034, 0035, 0036, 0000, 0001, 0002, and 0003. Vertical dashed lines mark specific clock edges. At the edge following 0036, the Counter overflow, Update event (UEV), and Update interrupt flag (UIF) signals all transition from low to high. The Counter register then resets to 0000. The diagram is labeled MS31079V2 in the bottom right corner.

Timing diagram for internal clock divided by 2. It shows CK_PSC, CNT_EN, Timerclock = CK_CNT, Counter register values (0034, 0035, 0036, 0000, 0001, 0002, 0003), Counter overflow, Update event (UEV), and Update interrupt flag (UIF) over time.

Figure 373. Counter timing diagram, internal clock divided by 4

Timing diagram for internal clock divided by 4. It shows CK_PSC, CNT_EN, Timerclock = CK_CNT, Counter register values (0035, 0036, 0000, 0001), Counter overflow, Update event (UEV), and Update interrupt flag (UIF) over time.

This timing diagram illustrates the operation of a counter with an internal clock divided by 4. The top signal, CK_PSC, is a periodic square wave. Below it, CNT_EN is a horizontal line indicating the counter is enabled. The Timerclock = CK_CNT signal is a square wave with a frequency one-quarter that of CK_PSC. The Counter register shows a sequence of values: 0035, 0036, 0000, and 0001. Vertical dashed lines mark specific clock edges. At the edge following 0036, the Counter overflow, Update event (UEV), and Update interrupt flag (UIF) signals all transition from low to high. The Counter register then resets to 0000. The diagram is labeled MS31080V2 in the bottom right corner.

Timing diagram for internal clock divided by 4. It shows CK_PSC, CNT_EN, Timerclock = CK_CNT, Counter register values (0035, 0036, 0000, 0001), Counter overflow, Update event (UEV), and Update interrupt flag (UIF) over time.

Figure 374. Counter timing diagram, internal clock divided by N

Figure 374: Counter timing diagram, internal clock divided by N. Shows CK_PSC, Timerclock = CK_CNT, Counter register (1F, 20, 00), Counter overflow, Update event (UEV), and Update interrupt flag (UIF).

This timing diagram illustrates the operation of a timer when the internal clock is divided by N. The top signal, CK_PSC, is a periodic square wave. Below it, the Timerclock = CK_CNT is shown as a series of pulses. The Counter register starts at value 1F, increments to 20, and then overflows to 00 after a break in the timeline. The Counter overflow signal is a pulse that goes high when the counter reaches 00. The Update event (UEV) and Update interrupt flag (UIF) are also shown as pulses that go high at the overflow point. The diagram is labeled MS31081V2.

Figure 374: Counter timing diagram, internal clock divided by N. Shows CK_PSC, Timerclock = CK_CNT, Counter register (1F, 20, 00), Counter overflow, Update event (UEV), and Update interrupt flag (UIF).

Figure 375. Counter timing diagram, update event when ARPE = 0 (TIMx_ARR not preloaded)

Figure 375: Counter timing diagram, update event when ARPE = 0 (TIMx_ARR not preloaded). Shows CK_PSC, CEN, Timerclock = CK_CNT, Counter register (31 to 07), Counter overflow, Update event (UEV), Update interrupt flag (UIF), and Auto-reload preload register (FF to 36).

This timing diagram shows the timer's behavior when ARPE = 0 and the auto-reload register is not preloaded. It includes signals for CK_PSC, CEN (Counter Enable), Timerclock = CK_CNT, Counter register, Counter overflow, Update event (UEV), Update interrupt flag (UIF), and the Auto-reload preload register. The counter starts at 31, increments through 32, 33, 34, 35, 36, overflows to 00, and continues through 01, 02, 03, 04, 05, 06, 07. The Counter overflow, UEV, and UIF signals are pulses that go high at the 36 to 00 transition. The Auto-reload preload register initially contains FF and is then updated to 36, as indicated by the note 'Write a new value in TIMx_ARR'. The diagram is labeled MS31082V2.

Figure 375: Counter timing diagram, update event when ARPE = 0 (TIMx_ARR not preloaded). Shows CK_PSC, CEN, Timerclock = CK_CNT, Counter register (31 to 07), Counter overflow, Update event (UEV), Update interrupt flag (UIF), and Auto-reload preload register (FF to 36).

Figure 376. Counter timing diagram, update event when ARPE=1 (TIMx_ARR preloaded)

Figure 376: Counter timing diagram showing the relationship between CK_PSC, CEN, Timerclock (CK_CNT), Counter register, Counter overflow, Update event (UEV), Update interrupt flag (UIF), Auto-reload preload register, and Auto-reload shadow register. The diagram illustrates the timing of an update event when ARPE=1 and the auto-reload register is preloaded.

The timing diagram shows the following signals and their states over time:

A note at the bottom left indicates: "Write a new value in TIMx_ARR". A reference code "MS31083V2" is present at the bottom right.

Figure 376: Counter timing diagram showing the relationship between CK_PSC, CEN, Timerclock (CK_CNT), Counter register, Counter overflow, Update event (UEV), Update interrupt flag (UIF), Auto-reload preload register, and Auto-reload shadow register. The diagram illustrates the timing of an update event when ARPE=1 and the auto-reload register is preloaded.

33.3.3 UIF bit remapping

The IUFREMAP bit in the TIMx_CR1 register forces a continuous copy of the Update Interrupt Flag UIF into the timer counter register's bit 31 (TIMxCNT[31]). This allows to atomically read both the counter value and a potential roll-over condition signaled by the UIFCPY flag. In particular cases, it can ease the calculations by avoiding race conditions caused for instance by a processing shared between a background task (counter reading) and an interrupt (Update Interrupt).

There is no latency between the assertions of the UIF and UIFCPY flags.

33.3.4 Clock source

The counter clock is provided by the Internal clock (CK_INT) source.

The CEN (in the TIMx_CR1 register) and UG bits (in the TIMx_EGR register) are actual control bits and can be changed only by software (except for UG that remains cleared automatically). As soon as the CEN bit is written to 1, the prescaler is clocked by the internal clock CK_INT.

Figure 377 shows the behavior of the control circuit and the upcounter in normal mode, without prescaler.

Figure 377. Control circuit in normal mode, internal clock divided by 1

Timing diagram showing the control circuit in normal mode. It displays five waveforms: Internal clock (a continuous square wave), CEN=CNT_EN (a signal that goes high to enable the counter), UG (a pulse that triggers an update), CNT_INIT (a pulse that initializes the counter), and Counter register (showing values 31, 32, 33, 34, 35, 36, 00, 01, 02, 03, 04, 05, 06, 07). The counter clock (CK_CNT = CK_PSC) is shown as a square wave that starts when CEN goes high. Vertical dashed lines indicate key timing points: rising edge of internal clock, rising edge of CEN, rising edge of UG, rising edge of CNT_INIT, and falling edges of the counter register values.

MS31085V2

Timing diagram showing the control circuit in normal mode. It displays five waveforms: Internal clock (a continuous square wave), CEN=CNT_EN (a signal that goes high to enable the counter), UG (a pulse that triggers an update), CNT_INIT (a pulse that initializes the counter), and Counter register (showing values 31, 32, 33, 34, 35, 36, 00, 01, 02, 03, 04, 05, 06, 07). The counter clock (CK_CNT = CK_PSC) is shown as a square wave that starts when CEN goes high. Vertical dashed lines indicate key timing points: rising edge of internal clock, rising edge of CEN, rising edge of UG, rising edge of CNT_INIT, and falling edges of the counter register values.

33.3.5 Debug mode

When the microcontroller enters the debug mode (Cortex®-M4 core - halted), the TIMx counter either continues to work normally or stops, depending on the DBG_TIMx_STOP configuration bit in the DBG module. For more details, refer to Section 48.16.2: Debug support for timers, RTC, watchdog, bxCAN and I 2 C .

33.4 TIM6/TIM7 registers

Refer to Section 1.2 on page 69 for a list of abbreviations used in register descriptions.

The peripheral registers can be accessed by half-words (16-bit) or words (32-bit).

33.4.1 TIMx control register 1 (TIMx_CR1)(x = 6 to 7)

Address offset: 0x00

Reset value: 0x0000

1514131211109876543210
Res.Res.Res.Res.UIFREMAPRes.Res.Res.ARPERes.Res.Res.OPMURSUDISCEN
rwrwrwrwrwrw

Bits 15:12 Reserved, must be kept at reset value.

Bit 11 UIFREMAP : UIF status bit remapping

0: No remapping. UIF status bit is not copied to TIMx_CNT register bit 31.

1: Remapping enabled. UIF status bit is copied to TIMx_CNT register bit 31.

Bits 10:8 Reserved, must be kept at reset value.

Bit 7 ARPE : Auto-reload preload enable

0: TIMx_ARR register is not buffered.

1: TIMx_ARR register is buffered.

Bits 6:4 Reserved, must be kept at reset value.

Bit 3 OPM : One-pulse mode

0: Counter is not stopped at update event

1: Counter stops counting at the next update event (clearing the CEN bit).

Bit 2 URS : Update request source

This bit is set and cleared by software to select the UEV event sources.

0: Any of the following events generates an update interrupt or DMA request if enabled.

These events can be:

1: Only counter overflow/underflow generates an update interrupt or DMA request if enabled.

Bit 1 UDIS : Update disable

This bit is set and cleared by software to enable/disable UEV event generation.

0: UEV enabled. The Update (UEV) event is generated by one of the following events:

Buffered registers are then loaded with their preload values.

1: UEV disabled. The Update event is not generated, shadow registers keep their value (ARR, PSC). However the counter and the prescaler are reinitialized if the UG bit is set or if a hardware reset is received from the slave mode controller.

Bit 0 CEN : Counter enable

0: Counter disabled

1: Counter enabled

Note: Gated mode can work only if the CEN bit has been previously set by software.

However trigger mode can set the CEN bit automatically by hardware.

CEN is cleared automatically in one-pulse mode, when an update event occurs.

33.4.2 TIMx control register 2 (TIMx_CR2)(x = 6 to 7)

Address offset: 0x04

Reset value: 0x0000

1514131211109876543210
Res.Res.Res.Res.Res.Res.Res.Res.Res.MMS[2:0]Res.Res.Res.Res.
rwrwrw

Bits 15:7 Reserved, must be kept at reset value.

Bits 6:4 MMS[2:0] : Master mode selection

These bits are used to select the information to be sent in master mode to slave timers for synchronization (TRGO). The combination is as follows:

000: Reset - the UG bit from the TIMx_EGR register is used as a trigger output (TRGO). If reset is generated by the trigger input (slave mode controller configured in reset mode) then the signal on TRGO is delayed compared to the actual reset.

001: Enable - the Counter enable signal, CNT_EN, is used as a trigger output (TRGO). It is useful to start several timers at the same time or to control a window in which a slave timer is enabled. The Counter Enable signal is generated by a logic OR between CEN control bit and the trigger input when configured in gated mode.

When the Counter Enable signal is controlled by the trigger input, there is a delay on TRGO, except if the master/slave mode is selected (see the MSM bit description in the TIMx_SMCR register).

010: Update - The update event is selected as a trigger output (TRGO). For instance a master timer can then be used as a prescaler for a slave timer.

Note: The clock of the slave timer or ADC must be enabled prior to receive events from the master timer, and must not be changed on-the-fly while triggers are received from the master timer.

Bits 3:0 Reserved, must be kept at reset value.

33.4.3 TIMx DMA/Interrupt enable register (TIMx_DIER)(x = 6 to 7)

Address offset: 0x0C

Reset value: 0x0000

1514131211109876543210
Res.Res.Res.Res.Res.Res.Res.UDERes.Res.Res.Res.Res.Res.Res.UIE
rwrw

Bits 15:9 Reserved, must be kept at reset value.

Bit 8 UDE : Update DMA request enable

0: Update DMA request disabled.

1: Update DMA request enabled.

Bits 7:1 Reserved, must be kept at reset value.

Bit 0 UIE : Update interrupt enable

0: Update interrupt disabled.

1: Update interrupt enabled.

33.4.4 TIMx status register (TIMx_SR)(x = 6 to 7)

Address offset: 0x10

Reset value: 0x0000

1514131211109876543210
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.UIF
rc_w0

Bits 15:1 Reserved, must be kept at reset value.

Bit 0 UIF : Update interrupt flag

This bit is set by hardware on an update event. It is cleared by software.

0: No update occurred.

1: Update interrupt pending. This bit is set by hardware when the registers are updated:

33.4.5 TIMx event generation register (TIMx_EGR)(x = 6 to 7)

Address offset: 0x14

Reset value: 0x0000

1514131211109876543210
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.UG
w

Bits 15:1 Reserved, must be kept at reset value.

Bit 0 UG : Update generation

This bit can be set by software, it is automatically cleared by hardware.

0: No action.

1: Re-initializes the timer counter and generates an update of the registers. Note that the prescaler counter is cleared too (but the prescaler ratio is not affected).

33.4.6 TIMx counter (TIMx_CNT)(x = 6 to 7)

Address offset: 0x24

Reset value: 0x0000 0000

31302928272625242322212019181716
UIF
CPY
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.
r

1514131211109876543210
CNT[15:0]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw

Bit 31 UIFCPY : UIF Copy

This bit is a read-only copy of the UIF bit of the TIMx_ISR register. If the UIFREMAP bit in TIMx_CR1 is reset, bit 31 is reserved and read as 0.

Bits 30:16 Reserved, must be kept at reset value.

Bits 15:0 CNT[15:0] : Counter value

33.4.7 TIMx prescaler (TIMx_PSC)(x = 6 to 7)

Address offset: 0x28

Reset value: 0x0000

1514131211109876543210
PSC[15:0]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw

Bits 15:0 PSC[15:0] : Prescaler value

The counter clock frequency \( CK\_CNT \) is equal to \( f_{CK\_PSC} / (PSC[15:0] + 1) \) .

PSC contains the value to be loaded into the active prescaler register at each update event. (including when the counter is cleared through UG bit of TIMx_EGR register or through trigger controller when configured in “reset mode”).

33.4.8 TIMx auto-reload register (TIMx_ARR)(x = 6 to 7)

Address offset: 0x2C

Reset value: 0xFFFF

1514131211109876543210
ARR[15:0]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw

Bits 15:0 ARR[15:0] : Prescaler value

ARR is the value to be loaded into the actual auto-reload register.

Refer to Section 33.3.1: Time-base unit on page 1161 for more details about ARR update and behavior.

The counter is blocked while the auto-reload value is null.

33.4.9 TIMx register map

TIMx registers are mapped as 16-bit addressable registers as described in the table below:

Table 211. TIMx register map and reset values

OffsetRegister name313029282726252423222120191817161514131211109876543210
0x00TIMx_CR1Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.UIFREMARes.Res.Res.ARPERes.Res.Res.OPMURSUDISCEN
Reset value000000
0x04TIMx_CR2Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.MMS [2:0]Res.Res.Res.Res.
Reset value000
0x08Reserved
0x0CTIMx_DIERRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.UDERes.Res.Res.Res.Res.Res.Res.UIE
Reset value00
0x10TIMx_SRRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.UIF
Reset value0
0x14TIMx_EGRRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.UG
Reset value0
0x18-0x20Reserved
0x24TIMx_CNTUIFCOPY or Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.CNT[15:0]
Reset value00
0x28TIMx_PSCRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.PSC[15:0]
Reset value0
0x2CTIMx_ARRRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.ARR[15:0]
Reset value1

Refer to Section 2.2 on page 75 for the register boundary addresses.