Usually it’s the other way around, halls give good high speed performance but stutter at low speed. If you’re printing any debug output, turn it off. STM32’s serial implementation is problematic that if you make two calls to Serial.print within a few milliseconds of eachother, the second one will block processing and cause the motor to stutter. A single call can print a fairly large amount of data without blocking, but even two single-character prints in a row will block it.
You can try SmoothingSensor to improve low speed. Just create SmoothingSensor smooth(hall, motor); and motor->linkSensor(&smooth); and it will do its thing. You can also call motor->linkSensor(&hall); while running to compare the performance with and without smoothing.
My Gooser is not KiCAD, but still good to learn from, or use it directly since it’s basically what you want. Some of the GPIO pins can be used to control a separate DC motor driver, or if you have an ESP32 or something for wireless communication then it could handle the DC motor.