STM32 gotchas
39.Software or watchdog reset does not work, if NRST is pulled-up hard externally

The NRST pin on STM32 is a bidirectional pin, controlled by an internal open-drain transistor, and also being pulled up by an internal resistor.

So, it has two functions: as input, when pulled down externally (hard enough to override the internal pullup resistor), it generates a system reset; this is what most of users do expect from this pin.

As output, when an internal reset source gets active, the internal open-drain transistor pulls down the NRST pin for a few μs. The system reset is still generated by the input circuitry of NRST, so the voltage on pin has to physically go low enough for the system reset to occur. Examples of internal reset sources are the Software reset (result of setting SCB_AIRCRE.SYSRESETREQ, to be used through the CMSIS intrinsic NVIC_SystemReset()) or reset from internal watchdogs (IWDG/WWDG).

Some users connect a reset circuit with push-pull output (such as the venerable industry-standard xxx809) to NRST pin. As the internal reset generator cannot pull down through the open-drain transistor such external load, internal reset sources such as Software reset or the Watchdog resets, simply don't work properly. They won't result in system reset; however, the reset source in RCC_CSR or equivalent register gets registered.

This all is well documented in every STM32 RM, Power reset subchapter of RCC chapter. The values of internal pullup, required external reset duration and the reset output duration, are documented in the respective DS.