输出不了低电平

2019-03-23 19:43发布

我用STM32做小车的主控板,控制步进电机,用的是L298驱动板,程序如下
我的程序如下
#include "stm32f10x_it.h"
#include "stm32f10x_conf.h"
#include "stm32f10x.h"
#include <stdio.h>
#include "gpio.h"
#include "rcc.h"
#include"qudong.h"

void Init(void);          //初始化
void Forward(void);
void Backward(void);
void Left(void);
void Right(void);
void Stop(void);

/********1MS 延时程序*********/
volatile u16 Timer1;
void SysTickDelay(u16 dly_ms)
{
        Timer1=dly_ms;
        while(Timer1);
}

int i=10000;//暂定为10000个脉冲
int main(void)
{
   Init();
            
   while(1)
   {  
          Forward();//前进,电机转50圏                        
   }
}

/*电机驱动程序*/
/*前进程序*/
void Forward(void)
{  
    while(i--)
  {
   GPIO_Write(GPIOA,0x55);
   SysTickDelay(50);
   GPIO_Write(GPIOA,0x66);
  SysTickDelay (50);
   GPIO_Write(GPIOA,0xaa);
  SysTickDelay (50);
   GPIO_Write(GPIOA,0x99);
  SysTickDelay (50);
   }
}
/*后退程序*/
void Backward(void)
{  
     while(i--)
  {
   GPIO_Write(GPIOA,0x99);
   SysTickDelay(50);
   GPIO_Write(GPIOA,0xaa);
   SysTickDelay(50);
   GPIO_Write(GPIOA,0x66);
  SysTickDelay (50);
   GPIO_Write(GPIOA,0x55);
  SysTickDelay (50);
   }
}

/*左转程序*/

void Left(void)
{  
       while(i--)
  {
   GPIO_Write(GPIOA,0x59);
  SysTickDelay (50);
   GPIO_Write(GPIOA,0x6a);
  SysTickDelay (50);
   GPIO_Write(GPIOA,0xa6);
  SysTickDelay (50);
   GPIO_Write(GPIOA,0x95);
   SysTickDelay(50);
   }
}

/*右转程序*/

void Right(void)
{  
    while(i--)
  {
   GPIO_Write(GPIOA,0x95);
   SysTickDelay(50);
   GPIO_Write(GPIOA,0xa6);
  SysTickDelay (50);
   GPIO_Write(GPIOA,0x6a);
   SysTickDelay(50);
   GPIO_Write(GPIOA,0x59);
  SysTickDelay (50);
   }
}

/*小车停止*/
void Stop(void)
{
  GPIO_Write(GPIOA,0x00);
}

/*STM32与步进电机的接口设置*/
void GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,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_Pin_7;
         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
}

我用的驱动板是L298.一号电机的A,A-,B,B-分别接L298的IN1,IN2,IN3,IN4,与A0,A1,A2,A3相连;二号电机的A,A-,B,B-分别接另一个L298的IN1,IN2,IN3,IN4,与A4,A5,A6,A7相连.但通电后步进电机一点反应都没有,小弟是新手,都不太懂。请大家多多指教!
用示波器测了下AO引脚,发现只会有高电平输出!没有低电平。这就是无法驱动步进电机的原因吧!是不是端口设置的问题?还是延时程序的问题?在主函数里面写入
GPIO_SetBits(GPIOA,GPIO_Pin_0);
SysTickDelay(50);
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
SysTickDelay(50);        
看看是缶有方波输出,结果还是输出高电平。如果只写GPIO_ResetBits(GPIOA,GPIO_Pin_0);则会输出低电平。小弟实在整不明白,请大家多多指教!!!
0条回答

一周热门 更多>