Redline
You inherited the speed controller for a brushed DC drive. A colleague wrote a tidy fixed-point control loop: every millisecond it reads the measured speed, scales the error by a gain, folds the result into the PWM duty, and clamps. On the bench it held every speed they threw at it. In the field it is a different story: commanded to a high speed, the shaft simply sits there, duty pinned at zero, while the exact same firmware holds a lower speed without a hiccup.
The commanded setpoint is delivered in an SRAM mailbox at 0x2000FF00. A load torque is applied to the plant independently, and it is not the same from run to run, so the duty that holds a given speed cannot be memorized — the loop has to feed back to find it. Speed is reported in milli-RPM (15,000,000 mRPM is 15,000 RPM).
The scaffolding (motor bring-up, the SysTick timebase, UART reporting) is correct. Find why high setpoints collapse the duty while low ones are fine, and fix it so the drive holds speed across the whole range.