KEIL5写代码让步进电机转动,步进电机为2-2 相驱动方式,一个步进距离为0.125mm,最大速度为90mm/s

#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叫但是不转动
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值