47. System window watchdog (WWDG)

47.1 Introduction

The system window watchdog (WWDG) 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 a reset on expiry of a programmed time period, unless the program refreshes the contents of the down-counter before the T6 bit is cleared. A reset is also generated if the 7-bit down-counter value (in the control register) is refreshed before the down-counter reaches the window register value. This implies that the counter must be refreshed in a limited window.

The WWDG clock is prescaled from the APB clock and has a configurable time-window that can be programmed to detect abnormally late or early application behavior.

The WWDG is best suited for applications requiring the watchdog to react within an accurate timing window.

47.2 WWDG main features

47.3 WWDG functional description

If the watchdog is activated (the WDGA bit is set in the WWDG_CR register), and when the 7-bit down-counter (T[6:0] bits) is decremented 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.

The application program must write in the WWDG_CR register at regular intervals during normal operation to prevent a reset. This operation can take place only when the counter value is lower than or equal to the window register value, and higher than 0x3F. The value to be stored in the WWDG_CR register must be between 0xFF and 0xC0.

Refer to Figure 576 and to Section 47.3.2: WWDG internal signals for the WWDG block diagram.

47.3.1 WWDG block diagram

Figure 576. Watchdog block diagram

Figure 576. Watchdog block diagram. The diagram shows the internal architecture of the WWDG. On the left, an APB bus connects to a Register interface containing WWDG_CFR, WWDG_SR, and WWDG_CR registers. The WWDG_CFR register provides W[6:0] to a CMP block. The WWDG_CR register provides a preload value to a 7-bit downcounter (CNT) and receives a readback from it. The CNT block is clocked by pclk, which is divided by 4096 and then by 2^WDGTB. The CNT block outputs T[6:0] to the CMP block. The CMP block outputs CMP = 1 when T[6:0] > W[6:0]. The CMP output and the T6 bit from the WWDG_CR register are inputs to a 2-input AND gate. The output of this AND gate is connected to a 3-input AND gate along with the WDGA bit from the WWDG_CR register. The output of the 3-input AND gate is the wwdg_out_rst signal. The WWDG_CR register also provides EWI and EWIF signals to a Logic block, which also receives inputs from the CMP block and the WDGA bit. The output of the Logic block is the wwdg_it signal.
Figure 576. Watchdog block diagram. The diagram shows the internal architecture of the WWDG. On the left, an APB bus connects to a Register interface containing WWDG_CFR, WWDG_SR, and WWDG_CR registers. The WWDG_CFR register provides W[6:0] to a CMP block. The WWDG_CR register provides a preload value to a 7-bit downcounter (CNT) and receives a readback from it. The CNT block is clocked by pclk, which is divided by 4096 and then by 2^WDGTB. The CNT block outputs T[6:0] to the CMP block. The CMP block outputs CMP = 1 when T[6:0] > W[6:0]. The CMP output and the T6 bit from the WWDG_CR register are inputs to a 2-input AND gate. The output of this AND gate is connected to a 3-input AND gate along with the WDGA bit from the WWDG_CR register. The output of the 3-input AND gate is the wwdg_out_rst signal. The WWDG_CR register also provides EWI and EWIF signals to a Logic block, which also receives inputs from the CMP block and the WDGA bit. The output of the Logic block is the wwdg_it signal.

47.3.2 WWDG internal signals

Table 390 gives the list of WWDG internal signals.

Table 390. WWDG internal input/output signals

Signal nameSignal typeDescription
pclkDigital inputAPB bus clock
wwdg_out_rstDigital outputWWDG reset signal output
wwdg_itDigital outputWWDG early interrupt output

47.3.3 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.

47.3.4 Controlling the down-counter

This down-counter 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 that represent 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 577). The WWDG configuration register (WWDG_CFR) contains the high limit of the window: to prevent a reset, the down-counter must be reloaded when its value is lower than or equal to the window register value, and greater than 0x3F. Figure 577 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).

47.3.5 How to program the watchdog timeout

Use the formula in Figure 577 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 577. Window watchdog timing diagram

Figure 577. Window watchdog timing diagram. The diagram shows the relationship between the CNT DownCounter, WWDG_EWIT, WWDG_RST, and T6 bit over time. The CNT DownCounter (T[6:0]) starts at 0x3F and decreases linearly. The WWDG_EWIT signal is active low and goes low when the counter reaches 0x40. The WWDG_RST signal is active low and goes low when the counter reaches 0x3F. The T6 bit is shown as a high signal. The diagram is divided into two regions: 'Refresh not allowed' (from the start to the point where the counter reaches 0x40) and 'Refresh allowed' (from the point where the counter reaches 0x40 to the point where it reaches 0x3F). A formula for the timeout is shown: t_WWDG = t_pclk x 4096 x 2^WDGTB. The diagram is labeled MS47266V1.

The diagram illustrates the timing of the Window Watchdog (WWDG). The top graph shows the CNT DownCounter (T[6:0]) decreasing from 0x3F over time. The counter is divided into two regions: 'Refresh not allowed' (from the initial value down to 0x40) and 'Refresh allowed' (from 0x40 down to 0x3F). Below the graph, three signals are shown: wwdg_ewit (active low), wwdg_RST (active low), and T6 bit (active high). The wwdg_ewit signal goes low when the counter reaches 0x40. The wwdg_RST signal goes low when the counter reaches 0x3F. The T6 bit is shown as a high signal. A formula for the timeout is shown: \( t_{WWDG} = t_{pclk} \times 4096 \times 2^{WDGTB} \) . The diagram is labeled MS47266V1.

Figure 577. Window watchdog timing diagram. The diagram shows the relationship between the CNT DownCounter, WWDG_EWIT, WWDG_RST, and T6 bit over time. The CNT DownCounter (T[6:0]) starts at 0x3F and decreases linearly. The WWDG_EWIT signal is active low and goes low when the counter reaches 0x40. The WWDG_RST signal is active low and goes low when the counter reaches 0x3F. The T6 bit is shown as a high signal. The diagram is divided into two regions: 'Refresh not allowed' (from the start to the point where the counter reaches 0x40) and 'Refresh allowed' (from the point where the counter reaches 0x40 to the point where it reaches 0x3F). A formula for the timeout is shown: t_WWDG = t_pclk x 4096 x 2^WDGTB. The diagram is labeled MS47266V1.

The formula to calculate the timeout value is given by:

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

where:

\( t_{WWDG} \) : WWDG timeout

\( t_{PCLK} \) : APB clock period measured in ms

4096: value corresponding to internal divider

As an example, if APB frequency is 48 MHz, WDGTB[2:0] is set to 3, and T[5:0] is set to 63:

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

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

47.3.6 Debug mode

When the CPU1/2 enter debug mode, WWDG1 and WWDG2 counters either continue to work normally or stop, depending on DBGMCU_APB3LFZ1/2 and DBGMCU_APB1LFZ1/2, respectively. For more details, refer to Section 63: Debug infrastructure .

47.4 WWDG interrupts

The early wake-up interrupt (EWI) can be used if specific safety operations or data logging must be performed before the reset is generated. To enable the early wake-up interrupt, the application must:

When the down-counter reaches the value 0x40, a watchdog 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 ISR must reload the WWDG counter to avoid the WWDG reset, then trigger the required actions.

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

Note: When the watchdog interrupt cannot be served (for example due to a system lock in a higher priority task), the WWDG reset is eventually generated.

47.5 WWDG registers

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

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

47.5.1 WWDG control register (WWDG_CR)

Address offset: 0x000

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.Res.Res.WDGAT[6:0]
rsrwrwrwrwrwrwrw

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, decremented every \( (4096 \times 2^{\text{WDGTB}[2:0]}) \) PCLK cycles. A reset is produced when it is decremented from 0x40 to 0x3F (T6 becomes cleared).

47.5.2 WWDG configuration register (WWDG_CFR)

Address offset: 0x004

Reset value: 0x0000 007F

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.
1514131211109876543210
Res.Res.WDGTB[2:0]Res.EWIRes.Res.W[6:0]
rwrwrwrsrwrwrwrwrwrwrw

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

Bits 13:11 WDGTB[2:0] : Timer base

The timebase of the prescaler can be modified as follows:

Bit 10 Reserved, must be kept at reset value.

Bit 9 EWI : Early wake-up interrupt enable

Set by software and cleared by hardware after a reset. When set, an interrupt occurs whenever the counter reaches the value 0x40.

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

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

These bits contain the window value to be compared with the down-counter.

47.5.3 WWDG status register (WWDG_SR)

Address offset: 0x008

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 wake-up 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. Writing 1 has no effect. This bit is also set if the interrupt is not enabled.

47.5.4 WWDG register map

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

Table 391. WWDG register map and reset values

OffsetRegister name313029282726252423222120191817161514131211109876543210
0x000WWDG_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
0x004WWDG_CFRRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.WDGTB [2:0]Res.Res.EWIRes.Res.W[6:0]
Reset value00001111111
0x008WWDG_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.EWIF
Reset value0

Refer to Section 2.3 on page 134 for the register boundary addresses.