找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2623|回复: 2
收起左侧

STM32步进电机源码

[复制链接]
ID:799384 发表于 2020-7-12 09:42 | 显示全部楼层 |阅读模式
motor.c
#include "motor.h"  //导入led头文件
#include "stm32f10x.h"  //导入STM32官方库
#include "stm32f10x_rcc.h"  //导入STM32的RCC时钟库
#include "delay.h"       //延时库

void RCC_Configuration(void)
{
  SystemInit();
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE , ENABLE);
}

{
  GPIO_InitTypeDef GPIO_InitStructure;                                //端口配置结构体

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                        //PD3管脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //口线翻转速度为50MHz
  GPIO_Init(GPIOD, &GPIO_InitStructure);                        //初始化端口      

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                        //PD6管脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //口线翻转速度为50MHz
  GPIO_Init(GPIOD, &GPIO_InitStructure);                        //初始化端口      

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;                //PD12管脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //口线翻转速度为50MHz
  GPIO_Init(GPIOD, &GPIO_InitStructure);                        //初始化端口      

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                        //PE4管脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //口线翻转速度为50MHz
  GPIO_Init(GPIOE, &GPIO_InitStructure);                        //初始化端口      


}
//电机正转函数
void ZhengZhuan(u16 tt)
{
            //1000         
          GPIO_SetBits(GPIOD, GPIO_Pin_3);
          GPIO_ResetBits(GPIOD, GPIO_Pin_6);
          GPIO_ResetBits(GPIOD, GPIO_Pin_12);
          GPIO_ResetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);
              //1100
          GPIO_SetBits(GPIOD, GPIO_Pin_3);
          GPIO_SetBits(GPIOD, GPIO_Pin_6);
          GPIO_ResetBits(GPIOD, GPIO_Pin_12);
          GPIO_ResetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);
              //0100
          GPIO_ResetBits(GPIOD, GPIO_Pin_3);
          GPIO_SetBits(GPIOD, GPIO_Pin_6);
          GPIO_ResetBits(GPIOD, GPIO_Pin_12);
          GPIO_ResetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);
          //0110  
          GPIO_ResetBits(GPIOD, GPIO_Pin_3);
          GPIO_SetBits(GPIOD, GPIO_Pin_6);
          GPIO_SetBits(GPIOD, GPIO_Pin_12);
          GPIO_ResetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);
                  //0010  
          GPIO_ResetBits(GPIOD, GPIO_Pin_3);
          GPIO_ResetBits(GPIOD, GPIO_Pin_6);
          GPIO_SetBits(GPIOD, GPIO_Pin_12);
          GPIO_ResetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);
          //0011
          GPIO_ResetBits(GPIOD, GPIO_Pin_3);
          GPIO_ResetBits(GPIOD, GPIO_Pin_6);
          GPIO_SetBits(GPIOD, GPIO_Pin_12);
          GPIO_SetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);
          //0001
          GPIO_ResetBits(GPIOD, GPIO_Pin_3);
          GPIO_ResetBits(GPIOD, GPIO_Pin_6);
          GPIO_ResetBits(GPIOD, GPIO_Pin_12);
          GPIO_SetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);
                  //1001
          GPIO_SetBits(GPIOD, GPIO_Pin_3);
          GPIO_ResetBits(GPIOD, GPIO_Pin_6);
          GPIO_ResetBits(GPIOD, GPIO_Pin_12);
          GPIO_SetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);
}
//电机反转函数
void FanZhuan(u16 tt)
{
          //1001         
          GPIO_SetBits(GPIOD, GPIO_Pin_3);
          GPIO_ResetBits(GPIOD, GPIO_Pin_6);
          GPIO_ResetBits(GPIOD, GPIO_Pin_12);
          GPIO_SetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);
                  //0001
          GPIO_ResetBits(GPIOD, GPIO_Pin_3);
          GPIO_ResetBits(GPIOD, GPIO_Pin_6);
          GPIO_ResetBits(GPIOD, GPIO_Pin_12);
          GPIO_SetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);
          //0011
          GPIO_ResetBits(GPIOD, GPIO_Pin_3);
          GPIO_ResetBits(GPIOD, GPIO_Pin_6);
          GPIO_SetBits(GPIOD, GPIO_Pin_12);
          GPIO_SetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);
          //0010  
          GPIO_ResetBits(GPIOD, GPIO_Pin_3);
          GPIO_ResetBits(GPIOD, GPIO_Pin_6);
          GPIO_SetBits(GPIOD, GPIO_Pin_12);
          GPIO_ResetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);        
          //0110
          GPIO_ResetBits(GPIOD, GPIO_Pin_3);
          GPIO_SetBits(GPIOD, GPIO_Pin_6);
          GPIO_SetBits(GPIOD, GPIO_Pin_12);
          GPIO_ResetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);
                  //0100
          GPIO_ResetBits(GPIOD, GPIO_Pin_3);
          GPIO_SetBits(GPIOD, GPIO_Pin_6);
          GPIO_ResetBits(GPIOD, GPIO_Pin_12);
          GPIO_ResetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);
          //1100
          GPIO_SetBits(GPIOD, GPIO_Pin_3);
          GPIO_SetBits(GPIOD, GPIO_Pin_6);
          GPIO_ResetBits(GPIOD, GPIO_Pin_12);
          GPIO_ResetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);
          //1000         
          GPIO_SetBits(GPIOD, GPIO_Pin_3);
          GPIO_ResetBits(GPIOD, GPIO_Pin_6);
          GPIO_ResetBits(GPIOD, GPIO_Pin_12);
          GPIO_ResetBits(GPIOE, GPIO_Pin_4);
          delay_ms1(tt);                  
}

void delay_ms1(u16 nms)
{
         u32 temp;
         SysTick->LOAD = 9000*nms;
         SysTick->VAL=0X00;//清空计数器
         SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
         do
         {
          temp=SysTick->CTRL;//读取当前倒计数值
         }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
         SysTick->CTRL=0x00; //关闭计数器
         SysTick->VAL =0X00; //清空计数器
}

main.c
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "misc.h"
//#include "delay.h"

void RCC_Configuration(void);
void GPIO_Configuration(void);
void ZhengZhuan(u16 tt);
void FanZhuan(u16 tt);
void delay_ms1(u16 nms);


int main(void)
{
  RCC_Configuration();        //系统时钟设置及外设时钟使能                  
  GPIO_Configuration();
  //delay_init();  //延时函数初始化

        while (1)
                 {
                // ZhengZhuan(3);//逆时针                              
            
                 FanZhuan(10);//顺时针
               
            
                 }

          GPIO_ResetBits(GPIOD, GPIO_Pin_3);
          GPIO_ResetBits(GPIOD, GPIO_Pin_6);
          GPIO_ResetBits(GPIOD, GPIO_Pin_12);
          GPIO_ResetBits(GPIOE, GPIO_Pin_4);
  //}
}


回复

使用道具 举报

ID:606388 发表于 2020-7-15 08:38 | 显示全部楼层
楼主,能否上传工程文件,谢谢
回复

使用道具 举报

ID:364183 发表于 2020-7-15 13:07 | 显示全部楼层
qingyemurong 发表于 2020-7-15 08:38
楼主,能否上传工程文件,谢谢

我以前传过 你下载看看吧
不知道适不适合你
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表