#include "stm32f10x.h" // Device header
#include "pwm.h"
#include "Timer.h"
/*
TIM1(高级定时器):CH1-CH4: PWM输出控制四个电机
PA8 左前
PA9 左后
PA10 右前
PA11 右后
TIM2:CH1-CH2: 左后轮编码器A、B相 PA0,PA1
TIM3:CH1-CH2: 右后轮编码器A、B相 PA6,PA7
TIM4:定时测速调速
红外:PB12,PB13,PB14
TB6612N逻辑输入:(1 0正转,0 1反转)
PB0,PB1:左前 通道1
PB5,PB8:右前 通道3
PA3,PA2:左后 通道2
PB10,PB11:右后 通道4
*/
void GPIOB_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
/*红外out引脚:PB12,PB13,PB14*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
/*初始为低电平*/
GPIO_ResetBits(GPIOB,GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_11);
GPIO_ResetBits(GPIOA,GPIO_Pin_2 | GPIO_Pin_3);
}
void forward(u16 speed)
{
TIM_SetCompare1(TIM1,speed);
TIM_SetCompare2(TIM1,speed);
TIM_SetCompare3(TIM1,speed);
TIM_SetCompare4(TIM1,speed);
GPIO_SetBits(GPIOB,GPIO_Pin_0| GPIO_Pin_5 | GPIO_Pin_10);
GPIO_SetBits(GPIOA,GPIO_Pin_3);
GPIO_ResetBits(GPIOB,GPIO_Pin_1| GPIO_Pin_8 | GPIO_Pin_11);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}
void back(u16 speed)
{
TIM_SetCompare1(TIM1,speed);
TIM_SetCompare2(TIM1,speed);
TIM_SetCompare3(TIM1,speed);
TIM_SetCompare4(TIM1,speed);
GPIO_SetBits(GPIOB,GPIO_Pin_1| GPIO_Pin_8 | GPIO_Pin_11);
GPIO_SetBits(GPIOA,GPIO_Pin_2);
GPIO_ResetBits(GPIOB,GPIO_Pin_0 | GPIO_Pin_5 | GPIO_Pin_10);
GPIO_ResetBits(GPIOA,GPIO_Pin_3);
}
void turn_left(u16 speed1,u16 speed2)
{
TIM_SetCompare1(TIM1,speed1);
TIM_SetCompare2(TIM1,speed1);
TIM_SetCompare3(TIM1,speed2);
TIM_SetCompare4(TIM1,speed2);
GPIO_SetBits(GPIOB,GPIO_Pin_0| GPIO_Pin_5 | GPIO_Pin_10);
GPIO_SetBits(GPIOA,GPIO_Pin_3);
GPIO_ResetBits(GPIOB,GPIO_Pin_1| GPIO_Pin_8 | GPIO_Pin_11);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}
void turn_right(u16 speed1,u16 speed2)
{
TIM_SetCompare1(TIM1,speed1);
TIM_SetCompare2(TIM1,speed1);
TIM_SetCompare3(TIM1,speed2);
TIM_SetCompare4(TIM1,speed2);
GPIO_SetBits(GPIOB,GPIO_Pin_0| GPIO_Pin_5 | GPIO_Pin_10);
GPIO_SetBits(GPIOA,GPIO_Pin_3);
GPIO_ResetBits(GPIOB,GPIO_Pin_1| GPIO_Pin_8 | GPIO_Pin_11);
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}
void stop(void)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_11);
GPIO_ResetBits(GPIOA,GPIO_Pin_2 | GPIO_Pin_3);
}