OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5091|回复: 9

STM32的步进电机控制程序 求大神指点

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2013-5-26
在线时间
0 小时
发表于 2013-5-26 18:00:49 | 显示全部楼层 |阅读模式

    程序的问题是:lcd1602显示部分不能动态更新,只能显示第一次按下按键后的转速,之后按下其他按键,显示速度不会再变化。而单独使用显示程序,把电机控制程序注释掉,可以动态更新,但是两个合在一块后,显示就不能动态更新了,为什么?        

#include"stm32f10x.h"

u8 table1[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};//正转
u8 table2[]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};//反转
u8 s[]=" speed=   r/min";
u8 s1[]="+30-30+50-10";
//u8 s1[]="speed=+30r/min";
u8 s2[]="speed=-30r/min";
u8 s3[]="speed=+60r/min";
u8 s4[]="speed=-20r/min";
GPIO_InitTypeDef GPIO_InitStructure;
int flag;
void xianshi(void);
/*
********************************************************************************
** 函数名称 : Delay(vu32 nCount)
** 函数功能 : 延时函数
** 输    入 : 无
** 输    出 : 无
** 返    回 : 无
********************************************************************************
*/
void Delay(vu32 nCount)
{
  for(; nCount != 0; nCount--);
}

 

//IO初始化
void GPIO_Configuture(void)
{
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);
 
 
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
 GPIO_Init(GPIOA,&GPIO_InitStructure);
  
   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
 
 // GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
 // GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
 // GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
 // GPIO_Init(GPIOB,&GPIO_InitStructure);
 
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
 GPIO_Init(GPIOC,&GPIO_InitStructure);
}
//正转
void motor_turn_on_1(void)
{
 int i;
 for(i=0;i<8;i++)
  {
   GPIOA->ODR=table1;
   Delay(0x888f);
  }  

}
//反转
void motor_turn_on_2(void)

  int i;
  for (i=0;i<8;i++)
  {
   GPIOA->ODR=table2;
   Delay(0x888f);
  }
 
}
//停止
void motor_turn_off(void)
{

 GPIOA->ODR=0x00;
 
}
//加速
void motor_turn_on_3(void)
{
 int i;

 for(i=0;i<8;i++)
  {
   GPIOA->ODR=table1;
   Delay(0x49ff);
  
  }  

}
//减速
void motor_turn_on_4(void)
{
 int i;

 for (i=0;i<8;i++)
 {
  GPIOA->ODR=table2;
  Delay(0xffff);
 }
}

//键盘程序  
int keyscan(void)
{   u8 key_flag;

 key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13);

 if (key_flag==0)
 {
  Delay(0x0f);
  key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13);
  if (key_flag==0)
  {
   key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13);
   while(!key_flag)
   {
    key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13);
   }
            
   flag=1;//正转
   
   
  }
 }
 key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15);

 if (key_flag==0)
 {
  Delay(0x0f);
  key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15);
  if (key_flag==0)
  {
   key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15);
   while(!key_flag)
   {
    key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15);
   }

   flag=2;//反转
  }
 }
 
 key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11);
 if (key_flag==0)
 {
  Delay(0x0f);
  key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11);
  if (key_flag==0)
  {
   key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11);
   while(!key_flag)
   {
    key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11);
   }

   flag=3;
  }
 }
key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12);
 if (key_flag==0)
 {
  Delay(0x0f);
  key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12);
  if (key_flag==0)
  {
   key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12);
   while(!key_flag)
   {
    key_flag=GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12);
   }

   flag=4;
  }
 }
 
 return flag;
}

//1602
void write_com(u16 com)
{
 GPIO_ResetBits(GPIOA,GPIO_Pin_4);
 GPIOC->ODR=com;
 Delay(0xfff);
 GPIO_SetBits(GPIOA,GPIO_Pin_6);
 Delay(0xfff);
 GPIO_ResetBits(GPIOA,GPIO_Pin_6);
 
 
}

void write_data(u16 data)
{
 GPIO_SetBits(GPIOA,GPIO_Pin_4);
 GPIOC->ODR=data;
 Delay(0xfff);
 GPIO_SetBits(GPIOA,GPIO_Pin_6);
 Delay(0xfff);
 GPIO_ResetBits(GPIOA,GPIO_Pin_6);
 
 
}

void init()
{
 GPIO_ResetBits(GPIOA,GPIO_Pin_5);
 GPIO_ResetBits(GPIOA,GPIO_Pin_6);
 write_com(0x38);
 write_com(0x0c);
 write_com(0x06);
 write_com(0x01);
}

// void motor_control()
// {
        // switch(flag)
     // {
      // case 1:
       // motor_turn_on_1();
       // break;
       // case 2:
       // motor_turn_on_2();
       // break;
    // case 3:
       // motor_turn_on_3();
       // break;
       // case 4:
       // motor_turn_on_4();
       // break;
    
     // }
// }

void motor_control()
{
 if(flag==1)
  motor_turn_on_1();
 if(flag==2)
  motor_turn_on_2();
 if(flag==3)
  motor_turn_on_3();
 if(flag==4)
  motor_turn_on_4();
}
 
void xianshi()

{    int num;
     write_com(0x80+0x06);
   switch(flag)
   {
    case 1:
     //motor_turn_on_1();
            for(num=0;num<3;num++)
       {
       write_data(s1[num]);
       Delay(0xf);
       }
          break;
    case 2:
    //motor_turn_on_2();
         for(num=3;num<6;num++)
      {write_data(s1[num]);
      Delay(0xf);
      }
      break;
    case 3:
     // motor_turn_on_3();
        for(num=6;num<9;num++)
      {write_data(s1[num]);
      Delay(0xf);
      }
      break;
    case 4:
     // motor_turn_on_4();
        for(num=9;num<12;num++)
        {write_data(s1[num]);
        Delay(0xf);
        }
      break;
     
   }
 
}
//主函数
int main(void)
{ int num;
 GPIO_Configuture();
 init();
 write_com(0x80);
 for(num=0;num<15;num++)
 {
 write_data(s[num]);
 Delay(0xf);
 
 }
 
 while(1)
 {  
  
            keyscan();
         xianshi();
   motor_control();

   
 } 
 
}

 

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-27 01:27:33 | 显示全部楼层
回复【楼主位】1183325505:
---------------------------------
用jtag跟踪下就知道问题在哪里了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2013-4-24
在线时间
0 小时
发表于 2013-7-24 20:55:45 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
怎么用JTAG跟踪啊原子
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-24 22:53:36 | 显示全部楼层
回复【3楼】捷:
---------------------------------
看下我们的视频教程.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2013-4-24
在线时间
0 小时
发表于 2013-7-24 23:04:06 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
哪一课的?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-25 11:22:49 | 显示全部楼层
入门(KEIL安装+JTAG调试+串口下载+新建工程).rmvb
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2013-4-24
在线时间
0 小时
发表于 2013-7-25 21:36:13 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原来STM32软件调试要用JTAG,还以为不需要呢,51是直接可以软件仿真的
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-25 23:31:24 | 显示全部楼层
软件仿真,STM32也不需要jtag.但是硬件仿真就要了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2013-4-24
在线时间
0 小时
发表于 2013-7-26 17:04:38 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
原子,他这边的延时是怎么算  延时了多久,比如Delay(0x888f)要多长时间?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-26 17:25:16 | 显示全部楼层
回复【9楼】捷:
---------------------------------
这我不知道了,估计用示波器看的吧.呵呵
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-17 12:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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