#include "stm32f10x_lib.h"
#include "motor.h"
u8 Step;
void GPIO_Key(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; // 选中管脚9
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; // 最高输出速率10MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); // 选择A端口
}
void GPIO_steper(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; // 选中管脚9
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO_Mode_Out_PP为推免输出 GPIO_Mode_AF_PP为复用推免输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; // 最高输出速率10MHz
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void MotorRan(void)
{
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==Bit_RESET)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_4); //使能
GPIO_SetBits(GPIOA,GPIO_Pin_3); //正转
GPIO_WriteBit(GPIOA,GPIO_Pin_2,(BitAction)!GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2)); //输出半个脉冲
}
else if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==Bit_RESET)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_4); //使能
GPIO_ResetBits(GPIOA,GPIO_Pin_3); //反转
GPIO_WriteBit(GPIOA,GPIO_Pin_2,(BitAction)!GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2)); //输出半个脉冲
}
//else
// GPIO_ResetBits(GPIOA,GPIO_Pin_4);
}
/*******************************************************************************
// 使用单片机STM32F103C8T6
// 晶振:8.00M
// 编译环境 Keil uVision4
// 在3.3V的供电环境下,就能运行
// 波特率 9600
*******************************************************************************/
#include "stm32f10x_lib.h"
#include "usart.h"
#include "delay.h"
#include "motor.h"
#include "sys_config.h"
#include <math.h> //Keil library
#define uchar unsigned char
#define uint unsigned int
//定时器3中断服务程序
void TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)//溢出中断
{
MotorRan();
}
TIM3->SR&=~(1<<0);//清除中断标志位
}
/*
********************************************************************************
** 函数名称 : main(void)
** 函数功能 : 主函数
** 输 入 : 无
** 输 出 : 无
** 返 回 : 无
********************************************************************************
*/
int main(void)
{
Stm32_Clock_Init(3); //配置RCC 24m
Delayms(10);
GPIO_Configuration(); //配置GPIO
USART1_Configuration(); //配置串口1
GPIO_Key();
GPIO_steper();
//Timerx_Init(10000,2399); //定时1s
Timerx_Init(150,2399); //定时0.0015s
//Step=0;
while(1)
{
// USART1_SendData('X');
// USART1_SendData(0X0D); //换行
// USART1_SendData(0X0A); //回车
Delayms(5); //延时
}
}
/*************结束***************/