【驱动程序】四项五线步进电机_CubeMX_HAL库
不用使用Cubemx配置,直接复制即可使用,注意将.h文件中的管脚改为自己用的管脚
step_motor.h
#ifndef _STEP_MOTOR_H_
#define _STEP_MOTOR_H_
#include "main.h"
#include "stdbool.h"
#define MOTOR_FOREARD true
#define MOTOR_REVERSE false
#define MOTOR_SPEED 3
#define STEP_MOTOR_GPIO GPIOB
#define STEP_MOTOR_GPIO_IN1 GPIO_PIN_6
#define STEP_MOTOR_GPIO_IN2 GPIO_PIN_7
#define STEP_MOTOR_GPIO_IN3 GPIO_PIN_8
#define STEP_MOTOR_GPIO_IN4 GPIO_PIN_9
#define BASIC_A_0 HAL_GPIO_WritePin(STEP_MOTOR_GPIO,STEP_MOTOR_GPIO_IN1,GPIO_PIN_RESET);
#define BASIC_A_1 HAL_GPIO_WritePin(STEP_MOTOR_GPIO,STEP_MOTOR_GPIO_IN1,GPIO_PIN_SET);
#define BASIC_B_0 HAL_GPIO_WritePin(STEP_MOTOR_GPIO,STEP_MOTOR_GPIO_IN2,GPIO_PIN_RESET);
#define BASIC_B_1 HAL_GPIO_WritePin(STEP_MOTOR_GPIO,STEP_MOTOR_GPIO_IN2,GPIO_PIN_SET);
#define BASIC_C_0 HAL_GPIO_WritePin(STEP_MOTOR_GPIO,STEP_MOTOR_GPIO_IN3,GPIO_PIN_RESET);
#define BASIC_C_1 HAL_GPIO_WritePin(STEP_MOTOR_GPIO,STEP_MOTOR_GPIO_IN3,GPIO_PIN_SET);
#define BASIC_D_0 HAL_GPIO_WritePin(STEP_MOTOR_GPIO,STEP_MOTOR_GPIO_IN4,GPIO_PIN_RESET);
#define BASIC_D_1 HAL_GPIO_WritePin(STEP_MOTOR_GPIO,STEP_MOTOR_GPIO_IN4,GPIO_PIN_SET);
void Step_Motor_Init(void);
void Step_Motor_Stop(void);
void Step_Motor_Step(bool X,int Speed);
#endif
step_motor.c
#include "step_motor.h"
void Step_Motor_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET);
/*Configure GPIO pins : PB6 PB7 PB8 PB9 */
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void Step_Motor_Step(bool X,int Speed)
{
if(X) //forward
{
BASIC_A_1;BASIC_B_1;BASIC_C_0;BASIC_D_0;
HAL_Delay(Speed);
BASIC_A_0;BASIC_B_1;BASIC_C_1;BASIC_D_0;
HAL_Delay(Speed);
BASIC_A_0;BASIC_B_0;BASIC_C_1;BASIC_D_1;
HAL_Delay(Speed);
BASIC_A_1;BASIC_B_0;BASIC_C_0;BASIC_D_1;
HAL_Delay(Speed);
}
else //reverse
{
BASIC_A_0;BASIC_B_0;BASIC_C_1;BASIC_D_1;
HAL_Delay(Speed);
BASIC_A_0;BASIC_B_1;BASIC_C_1;BASIC_D_0;
HAL_Delay(Speed);
BASIC_A_1;BASIC_B_1;BASIC_C_0;BASIC_D_0;
HAL_Delay(Speed);
BASIC_A_1;BASIC_B_0;BASIC_C_0;BASIC_D_1;
HAL_Delay(Speed);
}
}
void Step_Motor_Stop(void)
{
BASIC_A_0;BASIC_B_0;BASIC_C_0;BASIC_D_0;
}