21. Window watchdog (WWDG)

21.1 WWDG introduction

The window watchdog is used to detect the occurrence of a software fault, usually generated by external interference or by unforeseen logical conditions, which causes the application program to abandon its normal sequence. The watchdog circuit generates an MCU reset on expiry of a programmed time period, unless the program refreshes the contents of the downcounter before the T6 bit becomes cleared. An MCU reset is also generated if the 7-bit downcounter value (in the control register) is refreshed before the downcounter has reached the window register value. This implies that the counter must be refreshed in a limited window.

21.2 WWDG main features

21.3 WWDG functional description

If the watchdog is activated (the WDGA bit is set in the WWDG_CR register) and when the 7-bit downcounter (T[6:0] bits) rolls over from 0x40 to 0x3F (T6 becomes cleared), it initiates a reset. If the software reloads the counter while the counter is greater than the value stored in the window register, then a reset is generated.

Figure 205. Watchdog block diagram

Figure 205. Watchdog block diagram. The diagram shows the internal logic of the WWDG. A 7-bit downcounter (CNT) is driven by PCLK1 (from RCC clock controller) through a /4096 prescaler (WDGTB). The counter value is compared with the Watchdog configuration register (WWDG_CFR), which contains bits W6:0. The comparator output is 1 when T6:0 > W6:0. This output is ANDed with the 'Write WWDG_CR' signal. The result is ORed with the RESET signal. The Watchdog control register (WWDG_CR) contains bits WDGA, T6, T5, T4, T3, T2, T1, T0. The T6 bit is used to prevent an immediate reset. The diagram also shows the MSV37226V2 identifier.

The diagram illustrates the internal architecture of the Window Watchdog (WWDG). At the bottom, a 'WDG prescaler (WDGTB)' block receives 'PCLK1 (from RCC clock controller)' and divides it by 4096. This divided clock drives a '7-bit downcounter (CNT)'. The counter's output is connected to a 'Watchdog control register (WWDG_CR)' which contains bits WDGA, T6, T5, T4, T3, T2, T1, and T0. The counter value is also fed into a 'comparator' block. The comparator has another input from the 'Watchdog configuration register (WWDG_CFR)', which contains bits -, W6, W5, W4, W3, W2, W1, and W0. The comparator's output is 1 when the counter value (T6:0) is greater than the window register value (W6:0). This comparator output is ANDed with a 'Write WWDG_CR' signal. The output of this AND gate is then ORed with a 'RESET' signal to produce the final reset output. A 'Write WWDG_CR' signal is also shown entering the WWDG_CR register. The diagram is labeled with 'MSV37226V2' in the bottom right corner.

Figure 205. Watchdog block diagram. The diagram shows the internal logic of the WWDG. A 7-bit downcounter (CNT) is driven by PCLK1 (from RCC clock controller) through a /4096 prescaler (WDGTB). The counter value is compared with the Watchdog configuration register (WWDG_CFR), which contains bits W6:0. The comparator output is 1 when T6:0 > W6:0. This output is ANDed with the 'Write WWDG_CR' signal. The result is ORed with the RESET signal. The Watchdog control register (WWDG_CR) contains bits WDGA, T6, T5, T4, T3, T2, T1, T0. The T6 bit is used to prevent an immediate reset. The diagram also shows the MSV37226V2 identifier.

The application program must write in the WWDG_CR register at regular intervals during normal operation to prevent an MCU reset. This operation must occur only when the counter value is lower than the window register value. The value to be stored in the WWDG_CR register must be between 0xFF and 0xC0.

Enabling the watchdog

The watchdog is always disabled after a reset. It is enabled by setting the WDGA bit in the WWDG_CR register, then it cannot be disabled again except by a reset.

Controlling the downcounter

This downcounter is free-running, counting down even if the watchdog is disabled. When the watchdog is enabled, the T6 bit must be set to prevent generating an immediate reset.

The T[5:0] bits contain the number of increments which represents the time delay before the watchdog produces a reset. The timing varies between a minimum and a maximum value due to the unknown status of the prescaler when writing to the WWDG_CR register (see Figure 206 ). The Configuration register (WWDG_CFR) contains the high limit of the window: To prevent a reset, the downcounter must be reloaded when its value is lower than the window register value and greater than 0x3F. Figure 206 describes the window watchdog process.

Note: The T6 bit can be used to generate a software reset (the WDGA bit is set and the T6 bit is cleared).

Advanced watchdog interrupt feature

The Early Wakeup Interrupt (EWI) can be used if specific safety operations or data logging must be performed before the actual reset is generated. The EWI interrupt is enabled by setting the EWI bit in the WWDG_CFR register. When the downcounter reaches the value 0x40, an EWI interrupt is generated and the corresponding interrupt service routine (ISR) can be used to trigger specific actions (such as communications or data logging), before resetting the device.

In some applications, the EWI interrupt can be used to manage a software system check and/or system recovery/graceful degradation, without generating a WWDG reset. In this case, the corresponding interrupt service routine (ISR) should reload the WWDG counter to avoid the WWDG reset, then trigger the required actions.

The EWI interrupt is cleared by writing '0' to the EWIF bit in the WWDG_SR register.

Note: When the EWI interrupt cannot be served, e.g. due to a system lock in a higher priority task, the WWDG reset will eventually be generated.

21.4 How to program the watchdog timeout

The formula in Figure 206 must be used to calculate the WWDG timeout.

Warning: When writing to the WWDG_CR register, always write 1 in the T6 bit to avoid generating an immediate reset.

Figure 206. Window watchdog timing diagram

Figure 206. Window watchdog timing diagram. The diagram shows three waveforms over time. The top waveform is the T[6:0] CNT downcounter, which starts at a value of 0x3F and decreases linearly. The middle waveform is the W[6:0] window register, which is a constant value. The bottom waveform is the RESET signal, which is initially high and goes low when the counter reaches 0x3F. The diagram is divided into two regions: 'Refresh not allowed' (from the start until the counter reaches the window value) and 'Refresh allowed' (from the window value until the counter reaches 0x3F). The T6 bit is shown as a constant high signal. The diagram is labeled ai17101c.
Figure 206. Window watchdog timing diagram. The diagram shows three waveforms over time. The top waveform is the T[6:0] CNT downcounter, which starts at a value of 0x3F and decreases linearly. The middle waveform is the W[6:0] window register, which is a constant value. The bottom waveform is the RESET signal, which is initially high and goes low when the counter reaches 0x3F. The diagram is divided into two regions: 'Refresh not allowed' (from the start until the counter reaches the window value) and 'Refresh allowed' (from the window value until the counter reaches 0x3F). The T6 bit is shown as a constant high signal. The diagram is labeled ai17101c.

The formula to calculate the timeout value is given by:

\[ t_{\text{WWDG}} = t_{\text{PCLK1}} \times 4096 \times 2^{\text{WDGTB}[1:0]} \times (T[5:0] + 1) \quad (\text{ms}) \]

where:

\( t_{\text{WWDG}} \) : WWDG timeout

\( t_{\text{PCLK1}} \) : APB1 clock period measured in ms

4096: value corresponding to internal divider.

As an example, let us assume APB1 frequency is equal to 24 MHz, WDGTB[1:0] is set to 3 and T[5:0] is set to 63:

\[ t_{\text{WWDG}} = 1 / 24000 \times 4096 \times 2^3 \times (63 + 1) = 21.85 \text{ ms} \]

Refer to the datasheets for the minimum and maximum values of the \( t_{\text{WWDG}} \) .

21.5 Debug mode

When the microcontroller enters debug mode (Cortex ® -M4 with FPU core halted), the WWDG counter either continues to work normally or stops, depending on DBG_WWDG_STOP configuration bit in DBGMCU module. For more details, refer to Section 30.16.4: Debug MCU APB1 freeze register (DBGMCU_APB1_FZ) .

21.6 WWDG registers

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

The peripheral registers have to be accessed by half-words (16 bits) or words (32 bits).

21.6.1 Control register (WWDG_CR)

Address offset: 0x00

Reset value: 0x0000 007F

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.
1514131211109876:0
Res.Res.Res.Res.Res.Res.Res.Res.WDGAT[6:0]
rsrw

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

Bit 7 WDGA : Activation bit

This bit is set by software and only cleared by hardware after a reset. When WDGA = 1, the watchdog can generate a reset.
0: Watchdog disabled
1: Watchdog enabled

Bits 6:0 T[6:0] : 7-bit counter (MSB to LSB)

These bits contain the value of the watchdog counter. It is decremented every \( (4096 \times 2^{\text{WDGTB}[1:0]}) \) PCLK1 cycles. A reset is produced when it rolls over from 0x40 to 0x3F (T6 becomes cleared).

21.6.2 Configuration register (WWDG_CFR)

Address offset: 0x04

Reset value: 0x0000 007F

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.
1514131211109876543210
Res.Res.Res.Res.Res.Res.EWIWDGTB[1:0]W[6:0]
rsrwrw

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

Bit 9 EWI : Early wakeup interrupt

When set, an interrupt occurs whenever the counter reaches the value 0x40. This interrupt is only cleared by hardware after a reset.

Bits 8:7 WDGTB[1:0] : Timer base

The time base of the prescaler can be modified as follows:

00: CK Counter Clock (PCLK1 div 4096) div 1

01: CK Counter Clock (PCLK1 div 4096) div 2

10: CK Counter Clock (PCLK1 div 4096) div 4

11: CK Counter Clock (PCLK1 div 4096) div 8

Bits 6:0 W[6:0] : 7-bit window value

These bits contain the window value to be compared to the downcounter.

21.6.3 Status register (WWDG_SR)

Address offset: 0x08

Reset value: 0x0000 0000

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.
1514131211109876543210
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.EWIF
rc_w0

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

Bit 0 EWIF : Early wakeup interrupt flag

This bit is set by hardware when the counter has reached the value 0x40. It must be cleared by software by writing '0'. A write of '1' has no effect. This bit is also set if the interrupt is not enabled.

21.6.4 WWDG register map

The following table gives the WWDG register map and reset values.

Table 112. WWDG register map and reset values

OffsetRegister313029282726252423222120191817161514131211109876543210
0x00WWDG_CRRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.WDGAT[6:0]
Reset value01111111
0x04WWDG_CFRRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.EWIWDGTB1WDGTB0W[6:0]
Reset value000111111
0x08WWDG_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.EWIF
Reset value0

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