Skip to content

0008. STM32U375 terminal sleep is Stop 3, not Standby

Date: 2026-09-07 (commit 0638a76)

The text below is cut verbatim from Open Issues. The full search that preceded the decision is in the Standby layout investigation.

Context

On the STM32U375 a Standby request (LPMS = 1xx) is declined in a layout-dependent way: the WFI is reached and the part stays in Sleep at about 1 mA. The search is in the Standby layout investigation.

Decision

Resolution (2026-09-07, commit 0638a76): the terminal sleep now goes through Stop 3 (tagPowerEnterStop3(), RTC wake through WKUP7, synthetic standby reset on wake). It entered at every layout that stalls Standby and passed tag_release_check.py; cost about 3.6 uA at rest. Why the Standby request is declined remains unknown -- see the two subsections below for what was established and excluded -- and tagPowerEnterStandby() stays in the tree, unused, as the reference. Everything from here to the next entry is the record of that search, kept so it is not repeated.

Alternatives considered

Standby with __attribute__((noinline)) on tagPowerEnterStandby(), and the compiler settings tabulated in the investigation, "The compiler search, exhausted".

Evidence

Stop 3 as the terminal sleep: measured, not yet adopted (2026-09-07)

tagPowerEnterStop3() -- the same preparation, LPMS = 011, RTC wake through WKUP7 (WUSEL7 = 11 selects RTC_ALRA/ALRB/WUT/TS), and NVIC_SystemReset() on wake with resetCause = resetStandby -- was wired in as the terminal sleep and put through the layouts that stall Standby:

layout Standby Stop 3 IDLE Stop 3 FINISHED
base (main + non-blocking loop) IDLE 4.6, FINISHED 1039 8.07 8.07
+ skip 1040 8.02 / 8.12 8.14
+ skip + 4 nops 1040 8.08 --
+ skip + 16 nops 1040 8.05 / 8.14 8.13

A scheduled start (start_delay: 2) parked at 7.95 uA and woke on the 12:23:00 minute alarm into an 810 uA run, as the state machine predicts. The cost is about 3.6 uA at rest against a Standby that works. Whether to ship it is a decision, not a measurement; the tag_release_check.py run on that tree is the evidence to decide on.

Consequences

See the investigation for what this leaves unexplained.