From 885f63cff00176f67ce70cdffb80ba776b17c5ab Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Wed, 7 May 2025 21:02:33 -0400 Subject: [PATCH] stepper: Ensure minimum time between step pin and dir pin change Commit 8faed8d9 made it possible to utilize stepper_event_full() while utilizing tmc "step on both edges" optimation. That commit would ensure a minimum step pulse duration, but it did not ensure a minimum duration between step pin and dir pin changes. Commits 0d27195f and 554ae78d optimized the gpio handling on stm32h7 chips, which could potentially cause a very small amount of time between step pin and dir pin changes. Enforce a minimum time after a step pin update before updating the dir pin. Signed-off-by: Kevin O'Connor --- src/stepper.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/stepper.c b/src/stepper.c index 84655fe9..b74a3ced 100644 --- a/src/stepper.c +++ b/src/stepper.c @@ -109,6 +109,10 @@ stepper_load_next(struct stepper *s) shutdown("Stepper too far in past"); s->time.waketime = min_next_time; } + if (was_active && need_dir_change && s->flags & SF_SINGLE_SCHED) + // Must ensure minimum time between step change and dir change + while (timer_is_before(timer_read_time(), min_next_time)) + ; } // Set new direction (if needed)