野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8067|回复: 2

按键正反转问题 使用ULN2003驱动步进电机28BYJ48

[复制链接]
发表于 2017-5-27 18:55:12 | 显示全部楼层 |阅读模式
火哥,我试图用ISO=V2板子区控制步进电机,按下K2键正转,K3反转。
但是目前情况是按键不起作用,电机只能正转或者反转,取决于GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET(正转)或者Bit_SET(反转)。求指点。。。

#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "misc.h"

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

/****************************************************************************
* 名    称:int main(void)
* 功    能:主函数
* 入口参数:无
* 出口参数:无
* 说    明:
* 调用方法:无
****************************************************************************/
int main(void)
{
  RCC_Configuration();        //系统时钟设置及外设时钟使能                  
  GPIO_Configuration();

  while (1)
  {       
          //读取PA0管脚的输入状态         K2  
        if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)
        {
                ZhengZhuan(5);//高速
        }

        //读取PC13管脚的输入状态           K3
        if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == Bit_RESET)
        {
                FanZhuan(5);//高速
        }       

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

/****************************************************************************
* 名    称:void RCC_Configuration(void)
* 功    能:系统时钟配置为72MHZ, 外设时钟配置
* 入口参数:无
* 出口参数:无
* 说    明:
* 调用方法:无
****************************************************************************/
void RCC_Configuration(void)
{
  SystemInit();
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE , ENABLE);
}

/****************************************************************************
* 名    称:void GPIO_Configuration(void)
* 功    能:LED控制口线及键盘设置
* 入口参数:无
* 出口参数:无
* 说    明:
* 调用方法:无
****************************************************************************/
void GPIO_Configuration(void)
{
  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);                        //初始化端口       


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                        //PA0管脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                //输入上拉
  GPIO_Init(GPIOA, &GPIO_InitStructure);                        //初始化端口

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;                        //PC13管脚
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                //输入上拉
  GPIO_Init(GPIOC, &GPIO_InitStructure);                        //初始化端口

}
//电机正转函数
void ZhengZhuan(u16 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_ms(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_ms(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_ms(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_ms(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_ms(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_ms(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_ms(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_ms(tt);          
}

void delay_ms(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; //清空计数器
}


回复

使用道具 举报

发表于 2017-5-31 10:02:14 | 显示全部楼层
帮顶                     
回复 支持 反对

使用道具 举报

发表于 2018-4-14 13:50:55 | 显示全部楼层
看程序是刘洋板子的,或许可能是按键配置错了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 13:39 , Processed in 0.032837 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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