| LED1 blinking every 200 ms |
imu_init failing: jumpers (Mode 3), I²C pins, power |
| No bytes at all |
wrong COM port, port held by another program (clear all), firmware halted |
Only A5 A5 A5 … |
USART1 TX DMA without Memory increment |
| Bytes but no valid frame |
baud mismatch or SYSCLK ≠ 64 MHz |
| One frame, then nothing |
UART TX-complete callback not wired / USART1 IRQ disabled |
| Only STATUS frames |
filter never started: statusDiagnosis (IMU init, no INT1, no mag from hub, board moving during calibration) |
| HardFault ~2 s after reset |
unaligned float write into a packed telemetry struct (Telemetry protocol) |
| Attitude "converges slowly" in the viewer |
viewer lagging: check the lag field; disable REPLAY or use tlmCapture |
| Yaw moves when tilting |
wrong MAG_AXIS_MAP / hard-iron → Magnetometer calibration |
iekfAttitude not found |
run initPath.m (in 02 - Tools/00 - Matlab) |
| Build errors with paths that no longer exist, after moving or re-cloning the project |
stale makefiles in the local Debug/ folder: delete it (or Project → Clean), re-import 00 - FC_FW and build again |
| Comparison: "INIT of this boot was lost" |
UART saturated during the capture; repeat |
| Euler plots jump by 180° |
gimbal lock ( |
acwing-tools info: IMU interrupts 0/s, gyro far below 960/s, tens of I²C errors/s; viewer below its rate with a growing lag and lost 0 |
INT1 stuck high: it is a level (FIFO ≥ watermark) and the EXTI is on the rising edge. One late read leaves the FIFO above the watermark, so no edge arrives any more and the task lives on its 5 ms timeout, with big reads, DMA timeouts and lost samples. Fixed in ImuTask: immediate re-read after a large read or a timeout wake-up, and a 12 ms DMA timeout. s_drainReads in Live Expressions counts the recoveries |
lag grows slowly (about 1 %/s) with no loss; acwing-tools info: filter time behind the uptime |
the gyro was integrated with the nominal 1/960 s for part of the samples, while the LSM6DSV16X runs on its own RC oscillator (916 Hz measured). Fixed: the sample period is measured over 2 s windows against the MCU clock and used for every sample. s_odrHz in Live Expressions shows it |
undefined reference to arm_mat_* |
CMSIS-DSP GCC library not linked (Building and flashing) |