#include <stm32f10x_lib.h>
#include<delay.h>
#include "dianji.h"
#include "lcd.h"
#include "huitu.h"
//#include "sys.h"
//#include "usart.h"
unsigned char FFW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
unsigned char REV[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};
unsigned char FFW1[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};
unsigned char REV2[8]={0x90,0x10,0x30,0x20,0x60,0x40,0xc0,0x80};
//换用数组效果待定
//unsigned char FFW[8]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};
//unsigned char REV[8]={0x09,0x80,0xc0,0x40,0x60,0x20,0x30,0x10};
//unsigned char FFW1[8]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};
//unsigned char REV2[8]={0x09,0x80,0xc0,0x40,0x60,0x20,0x30,0x10};
//
//初始化PA8和PD2为输出口.并使能这两个口的时钟
//电机IO初始化
void BUJIN_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL&=0X00000000;
GPIOA->CRL|=0X33333333;//PA8 推挽输出
}
//**********************步进电机反转******************************
extern u8 paishu;
extern int bushu;
void Motor_Right_Step(int n)//电机1 PA0~3
{
unsigned char i;
unsigned int j;
for (j=0; j<n; j++)
{
for (i=0; i<8; i++)
{
GPIOA->ODR&= 0XFFF0;
GPIOA->ODR |= FFW;
delay_ms(8) ;
paishu++;
if(paishu>8)
{
paishu=0;
}
}
bushu++;
LCD_ShowString(60,12,"bushu:");
LCD_ShowNum(108,12,bushu,5,16);
LCD_ShowString(60,28,"paishu:");
LCD_ShowNum(116,28,paishu,1,16);
}
}
//*********************步进电机正转********************************
void Motor_Left_Step(int n) //电机1    A0~3
{
unsigned char i;
unsigned int j;
for (j=0; j<n; j++)
{
for (i=0; i<8; i++)
{
GPIOA->ODR&= 0XFFF0;
GPIOA->ODR |= REV;
delay_ms(8) ;
paishu++;
if(paishu>8)
{
paishu=0;
}
}
bushu++;
LCD_ShowString(60,12,"bushu:");
LCD_ShowNum(108,12,bushu,5,16);
LCD_ShowString(60,28,"paishu:");
LCD_ShowNum(116,28,paishu,1,16);
}
}
void Motor2_Right_Step(int n)//电机2反转PA4~7
{
unsigned char i;
unsigned int j;
for (j=0; j<n; j++)
{
for (i=0; i<8; i++)
{ GPIOA->ODR&= 0XFF0F;
GPIOA->ODR |= FFW1;
delay_ms(8) ;
paishu++;
if(paishu>8)
{
paishu=0;
}
}
bushu++;
LCD_ShowString(60,12,"bushu:");
LCD_ShowNum(108,12,bushu,5,16);
LCD_ShowString(60,28,"paishu:");
LCD_ShowNum(116,28,paishu,1,16);
}
}
//*********************步进电机正转********************************
void Motor2_Left_Step(int n) //电机2PA4~7
{
unsigned char i;
unsigned int j;
for (j=0; j<n; j++)
{
for (i=0; i<8; i++)
{
GPIOA->ODR&= 0XFF0F;
GPIOA->ODR |= REV2;
delay_ms(8) ;
paishu++;
if(paishu>8)
{
paishu=0;
}
}
bushu++;
LCD_ShowString(60,12,"bushu:");
LCD_ShowNum(108,12,bushu,5,16);
LCD_ShowString(60,28,"paishu:");
LCD_ShowNum(116,28,paishu,1,16);
}
}
这是我做帆板控制中写的,可以实现正反转。我用的是28BYI48减速步进电机,不知是否有用
|