#include <stdio.h>
#include "main.h"
// 定义步进电机的引脚
#define A_PIN GPIO_PIN_0
#define B_PIN GPIO_PIN_8
#define A1_PIN GPIO_PIN_1
#define B1_PIN GPIO_PIN_2
// 定义步进电机的状态
typedef enum
{
STEP1,
STEP2,
STEP3,
STEP4
} StepState;
// 初始化GPIO引脚
void GPIO_Config()
{
GPIO_InitType GPIO_InitStructure;
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA , ENABLE);
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB , ENABLE);
GPIO_InitStructure.Pin = A_PIN | A1_PIN | B1_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.Pin = B_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
}
// 控制步进电机转动一步
void StepMotor(StepState state)
{
switch (state)
{
case STEP1:
GPIO_SetBits(GPIOB, A_PIN);
GPIO_ResetBits(GPIOA, B_PIN);
GPIO_ResetBits(GPIOB, A1_PIN);
GPIO_SetBits(GPIOB, B1_PIN);
break;
case STEP2:
GPIO_SetBits(GPIOB, A_PIN);
GPIO_SetBits(GPIOA, B_PIN);
GPIO_ResetBits(GPIOB, A1_PIN);
GPIO_ResetBits(GPIOB, B1_PIN);
break;
case STEP3:
GPIO_ResetBits(GPIOB, A_PIN);
GPIO_SetBits(GPIOA, B_PIN);
GPIO_SetBits(GPIOB, A1_PIN);
GPIO_ResetBits(GPIOB, B1_PIN);
break;
case STEP4:
GPIO_ResetBits(GPIOB, A_PIN);
GPIO_ResetBits(GPIOA, B_PIN);
GPIO_SetBits(GPIOA, B1_PIN);
GPIO_SetBits(GPIOA, B1_PIN);
break;
}
}
void delay_ms(u32 ms)
{
u32 temp;
u32 fac_us;
fac_us=((SystemCoreClock/1000000)-1)*1000;
SysTick->LOAD = ms * fac_us;
SysTick->VAL = 0x00;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;
do
{
temp = SysTick->CTRL;
}
while (temp & 0x01 && !(temp & (1 << 16)));
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL = 0x00;
}
int main(void)
{
// 初始化GPIO引脚
GPIO_Config();
while (1)
{
StepMotor(STEP1);
delay_ms(2);
StepMotor(STEP2);
delay_ms(2);
StepMotor(STEP3);
delay_ms(2);
StepMotor(STEP4);
delay_ms(2);
}
}
运行结果,步进电机只didididi叫但是不转动