为什么我的步进电机会先反转后正转?使用stm32驱动28byj步进电机就成这样了

电机代码
void Motor_RotateByStep(RotDirection direction, uint32_t step, uint16_t Delay_Time_xms)
{
for (uint32_t i = 0; i < step; i ++)
{
if (direction == Foreward) // 电机正传
{
StepNum ++;
if (StepNum > 4)
{
StepNum = 1;
}
}
else if (direction == Reversal) // 电机反转
{
StepNum --;
if (StepNum < 1)
{
StepNum = 4;
}
}
Motor_SingleStep(StepNum, Delay_Time_xms);
}
Motor_Stop();
return;
}
void Motor_SingleStep(uint8_t Step_Num, uint16_t Delay_Time_xms)
{
switch(Step_Num)
{
case 1: // A
GPIO_WriteBit(Motor_port1, Motor_A1, Bit_SET);
GPIO_WriteBit(Motor_port1, Motor_B1 | Motor_C1 | Motor_D1, Bit_RESET);
break;
case 2: // B
GPIO_WriteBit(Motor_port1, Motor_B1, Bit_SET);
GPIO_WriteBit(Motor_port1, Motor_A1 | Motor_C1 | Motor_D1, Bit_RESET);
break;
case 3: // C
GPIO_WriteBit(Motor_port1, Motor_C1, Bit_SET);
GPIO_WriteBit(Motor_port1, Motor_A1 | Motor_B1 | Motor_D1, Bit_RESET);
break;
case 4: // D
GPIO_WriteBit(Motor_port1, Motor_D1, Bit_SET);
GPIO_WriteBit(Motor_port1, Motor_A1 | Motor_B1 | Motor_C1, Bit_RESET);
break;
default: break;
}
delay_ms(Delay_Time_xms); // 延时,控制电机速度
//Motor_Stop(); // 断电,防止电机过热
}
主函数
KEY_Init();
Motor_Init();
SysTick_Init();
Motor_RotateByStep(Foreward ,2,10000);