| Hard fault on boot | Vector table offset, bad function pointer, stack overflow | CFSR/HFSR/BFAR decode; check VTOR, linker script |
| Hard fault after OTA | Wrong entry address, incomplete flash, bad signature | Bootloader logs; verify vector table at app base |
| Intermittent I2C NACK | Pull-ups, clock stretch timeout, stuck bus, level shifter | LA capture; bus recovery sequence; scope SDA/SCL |
| SPI garbage / wrong data | CPOL/CPHA mismatch, CS glitch, DMA misalignment | LA decode; compare to DS mode diagram |
| UART framing errors | Baud mismatch, clock drift, long cable capacitance | Calculate baud error; scope start bit width |
| CAN bus-off | Termination, bit timing, dominant stuck transceiver | Read LEC/TEC/REC; 120 Ω at each end; sample point 75–87.5% |
| Sleep current too high | Floating GPIO, LED leakage, debug enabled, RTC alarm | Disconnect debugger; scan GPIO config in stop mode |
| Wake from sleep fails | Wrong wake source, clock not restarted, flash wait states | Step through wake ISR; verify HSE settle time |
| Brownout reset bursts | Bulk cap, motor/RF inrush, weak LDO | Scope VDD during event; log BOR/POR flags |
| FreeRTOS mysterious delay | Wrong priority, blocking from ISR, tick rate too coarse | Tracealyzer; audit FromISR API usage |
| Heap corruption crash | Buffer overrun, use-after-free, ISR/task race | Guard pages; -fstack-protector; audit malloc users |
| MPU fault | Stack overflow into guard, bad pointer to peripheral | MMFAR/BFAR; review MPU region table |
| USB enumerate fail | Descriptor error, power budget, missing pull-up | USB analyzer; verify 1.5 kΩ D+ pull-up timing |
| BLE connect timeout | Coexistence, antenna, sleep during advertising window | Sniffer; measure supply during TX |
| Watchdog reset loop | Feed too late, ISR blocks main, init hangs | Log last checkpoint; shorten init or feed from staged tasks |