野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16095|回复: 17

STM32 步进电机代码

[复制链接]
发表于 2013-8-9 16:08:27 | 显示全部楼层 |阅读模式
大家可以参考参考
回复

使用道具 举报

 楼主| 发表于 2013-8-9 16:09:24 | 显示全部楼层
  1. #include "stm32f10x.h"
  2. #include "BJMotor.h"
  3. #include "delay.h"
  4. int flag=0;
  5. int i=0;
  6. int main(void)
  7. {

  8.         EXTI_Config();//中断初始化
  9.         Motor_GPIO_Config();//电机驱动口初始化
  10. while(1)
  11.         {
  12.                 if(flag==0)
  13.                         for(i=0;i<8;i++)
  14.                 {       
  15.                         GPIO_Write(GPIOB,F_Rotation[i]<<12);//电机正转
  16.                         delay_us(1500);//延时2ms
  17.         }
  18.         else if(flag==1)
  19.                 for(i=0;i<8;i++)
  20.         {       
  21.                         GPIO_Write(GPIOB,B_Rotation[i]<<12);//电机反转
  22.                         delay_us(1500);
  23.         }
  24.                 else if(flag==2)                                                                                        //电机停止转动
  25.                         GPIO_Write(GPIOB,0x00<<12);
  26.         }
  27.                
  28. }
复制代码
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2013-8-9 16:09:48 | 显示全部楼层
  1. #ifndef __BJMotor_H__
  2. #define __BJMotor_H__

  3. static unsigned char  F_Rotation[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//正转表格
  4. static unsigned char  B_Rotation[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//反转表格
  5. void NVIC_Configuration(void);//中断线及优先级配置
  6. void EXTI_Config(void);//中断形式配置
  7. void Motor_GPIO_Config(void);//电机驱动口配置





  8. #endif
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-9 16:10:09 | 显示全部楼层
  1. #include "stm32f10x.h"
  2. #include "BJMotor.h"
  3. #include "misc.h"
  4. #include "delay.h"

  5. void NVIC_Configuration(void)//中断线及优先级配置
  6. {
  7.   NVIC_InitTypeDef NVIC_InitStructure;
  8.   
  9.   /* Configure one bit for preemption priority */
  10.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//设置优先级组1
  11.   
  12.   /* 配置P[A|B|C|D|E]5为中断源 */
  13.   NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
  14.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢占优先级
  15.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                         //响应优先级
  16.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                         //中断使能
  17.   NVIC_Init(&NVIC_InitStructure);                                                                                                   //用结构体初始化
  18. }


  19.         void EXTI_Config(void)//中断形式配置
  20. {
  21.         GPIO_InitTypeDef GPIO_InitStructure;
  22.         EXTI_InitTypeDef EXTI_InitStructure;

  23.         /* config the extiline(PE5) clock and AFIO clock */
  24.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO,ENABLE);//使能GPIOE及打开端口复用功(外部中断)
  25.                                                                                                
  26.         /* config the NVIC(PE5) */
  27.         NVIC_Configuration();

  28.         /* EXTI line gpio config(PE5) */       
  29.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                                //选择GPIO5      
  30.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;         // 上拉输入
  31.   GPIO_Init(GPIOE, &GPIO_InitStructure);

  32.         /* EXTI line(PE5) mode config */
  33.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource5);
  34.   EXTI_InitStructure.EXTI_Line = EXTI_Line5;                                                        //选择第5线作中断输入
  35.   EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;           //模式选择Interrupt,Event   
  36.   EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断
  37.   EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  38.   EXTI_Init(&EXTI_InitStructure);
  39. }


  40. void Motor_GPIO_Config(void)//电机驱动口配置
  41. {
  42.         GPIO_InitTypeDef GPIO_InitStructure;
  43.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  44.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15 | GPIO_Pin_14
  45.                                                                                                                                 | GPIO_Pin_13 | GPIO_Pin_12;          //高四位驱动作线
  46.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                                                        //推挽输出
  47.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                                        //速率50Mhz
  48.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  49. }





  50.                                                                                                                                              
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-8-9 20:17:27 | 显示全部楼层
还没试过用STM32驱动步进,学习了~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-10 00:41:03 | 显示全部楼层
随风 发表于 2013-8-9 20:17
还没试过用STM32驱动步进,学习了~

驱动很简单,配置个IO口就可以了,不过步进电机还得搞懂
回复 支持 反对

使用道具 举报

发表于 2013-8-13 02:09:31 | 显示全部楼层
这个好。很好,很好。
回复 支持 反对

使用道具 举报

发表于 2013-8-13 13:06:42 | 显示全部楼层
这个收下,谢谢楼主
回复 支持 反对

使用道具 举报

发表于 2013-9-6 13:26:55 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-9-6 22:24:00 | 显示全部楼层
谢谢楼主....
回复 支持 反对

使用道具 举报

发表于 2014-5-8 20:04:15 | 显示全部楼层
我的是mini,光盘没有关于电机的,想弄一下电机,来学习一下
回复 支持 反对

使用道具 举报

发表于 2014-8-13 14:56:22 | 显示全部楼层
代码很详细,多谢楼主!!
回复 支持 反对

使用道具 举报

发表于 2015-3-25 22:06:49 | 显示全部楼层
我是菜鸟,请问delay函数怎么写?
回复 支持 反对

使用道具 举报

发表于 2015-3-28 19:26:46 | 显示全部楼层
学习了 ,谢谢
回复 支持 反对

使用道具 举报

发表于 2015-4-21 22:38:17 | 显示全部楼层
是什么步进电机???是42步进吗???
回复 支持 反对

使用道具 举报

发表于 2015-4-26 14:35:00 | 显示全部楼层
正在学习步进机,不明白你所说的 高四位驱动作线,什么意思
回复 支持 反对

使用道具 举报

发表于 2015-5-19 13:22:58 | 显示全部楼层
楼主,用了其他的芯片没?L298之类的?还是直接接在开发板的IO口上?
回复 支持 反对

使用道具 举报

发表于 2015-5-23 11:31:57 | 显示全部楼层
虽然不知道步进电机是干嘛用的,不过总觉得有一天会用到,mark!
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 07:34 , Processed in 0.033628 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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