初级会员

- 积分
- 96
- 金钱
- 96
- 注册时间
- 2019-5-12
- 在线时间
- 61 小时
|
1金钱
这个是我的垃圾程序,希望各位大佬能帮忙看看
#define MotorA_in1 PAout(6)
#define MotorA_in2 PAout(7)
#define MotorB_in3 PBout(6)
#define MotorB_in4 PAout(0)
#define MotorC_in1 PBout(9)
#define MotorC_in2 PBout(8)
#define MotorD_in3 PAout(2)
#define MotorD_in4 PAout(3)
void TIM4_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseINIT;
NVIC_InitTypeDef NVIC_INIT;
//TIM4时钟使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
//设定计数器自动重装值//刚好1ms
TIM_TimeBaseINIT.TIM_ClockDivision=0;
TIM_TimeBaseINIT.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseINIT.TIM_Period=arr;
TIM_TimeBaseINIT.TIM_Prescaler=psc;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseINIT);
TIM_Cmd(TIM4,ENABLE);
NVIC_INIT.NVIC_IRQChannel=TIM4_IRQn;
NVIC_INIT.NVIC_IRQChannelCmd=ENABLE;
NVIC_INIT.NVIC_IRQChannelPreemptionPriority=0;
NVIC_INIT.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_INIT);//抢占1,子优先级3,组2
}
void TIM4_PWM_Init(u16 arr,u16 psc)
{
TIM_OCInitTypeDef TIM_OCInitstruct;
GPIO_InitTypeDef GPIO_InitStrucyure;
TIM_TimeBaseInitTypeDef TIM_Timeinit;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM3时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能PORTB时钟
GPIO_InitStrucyure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStrucyure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStrucyure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStrucyure);
TIM_Timeinit.TIM_ClockDivision=0;
TIM_Timeinit.TIM_CounterMode=TIM_OCMode_PWM2;
TIM_Timeinit.TIM_Period=arr;
TIM_TimeBaseInit(TIM4,&TIM_Timeinit);
TIM_OCInitstruct.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitstruct.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitstruct.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC1Init(TIM4, &TIM_OCInitstruct);
TIM_OC1PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_OC2Init(TIM4, &TIM_OCInitstruct);
TIM_OC2PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_OC3Init(TIM4, &TIM_OCInitstruct);
TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_OC4Init(TIM4, &TIM_OCInitstruct);
TIM_OC4PreloadConfig(TIM4,TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM4, ENABLE);
TIM_Cmd(TIM4,ENABLE);
}
void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseINIT;
NVIC_InitTypeDef NVIC_INIT;
//TIM4时钟使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
//设定计数器自动重装值//刚好1ms
TIM_TimeBaseINIT.TIM_ClockDivision=0;
TIM_TimeBaseINIT.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseINIT.TIM_Period=arr;
TIM_TimeBaseINIT.TIM_Prescaler=psc;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseINIT);
TIM_Cmd(TIM3,ENABLE);
NVIC_INIT.NVIC_IRQChannel=TIM3_IRQn;
NVIC_INIT.NVIC_IRQChannelCmd=ENABLE;
NVIC_INIT.NVIC_IRQChannelPreemptionPriority=0;
NVIC_INIT.NVIC_IRQChannelSubPriority=2;
NVIC_Init(&NVIC_INIT);//抢占1,子优先级3,组2
}
void TIM3_PWM_Init(u16 arr,u16 psc)
{
TIM_OCInitTypeDef TIM_OCInitstruct;
GPIO_InitTypeDef GPIO_InitStrucyure;
TIM_TimeBaseInitTypeDef TIM_Timeinit;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //TIM3时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能PORTB时钟
GPIO_InitStrucyure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStrucyure.GPIO_Pin=GPIO_Pin_7|GPIO_Pin_6;
GPIO_InitStrucyure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStrucyure);
TIM_Timeinit.TIM_ClockDivision=0;
TIM_Timeinit.TIM_CounterMode=TIM_OCMode_PWM2;
TIM_Timeinit.TIM_Period=arr;
TIM_TimeBaseInit(TIM3,&TIM_Timeinit);
TIM_OCInitstruct.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitstruct.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitstruct.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC2Init(TIM3, &TIM_OCInitstruct);
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_OC1Init(TIM3, &TIM_OCInitstruct);
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3, ENABLE);
TIM_Cmd(TIM3,ENABLE);
}
void TIM2_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseINIT;
NVIC_InitTypeDef NVIC_INIT;
//TIM4时钟使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
//设定计数器自动重装值//刚好1ms
TIM_TimeBaseINIT.TIM_ClockDivision=0;
TIM_TimeBaseINIT.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseINIT.TIM_Period=arr;
TIM_TimeBaseINIT.TIM_Prescaler=psc;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseINIT);
TIM_Cmd(TIM2,ENABLE);
NVIC_INIT.NVIC_IRQChannel=TIM2_IRQn;
NVIC_INIT.NVIC_IRQChannelCmd=ENABLE;
NVIC_INIT.NVIC_IRQChannelPreemptionPriority=0;
NVIC_INIT.NVIC_IRQChannelSubPriority=3;
NVIC_Init(&NVIC_INIT);//抢占1,子优先级3,组2
}
void TIM2_PWM_Init(u16 arr,u16 psc)
{
TIM_OCInitTypeDef TIM_OCInitstruct;
GPIO_InitTypeDef GPIO_InitStrucyure;
TIM_TimeBaseInitTypeDef TIM_Timeinit;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStrucyure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStrucyure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStrucyure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStrucyure);
TIM_Timeinit.TIM_ClockDivision=0;
TIM_Timeinit.TIM_CounterMode=TIM_OCMode_PWM2;
TIM_Timeinit.TIM_Period=arr;
TIM_TimeBaseInit(TIM2,&TIM_Timeinit);
TIM_OCInitstruct.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitstruct.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitstruct.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC3Init(TIM2, &TIM_OCInitstruct);
TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);
TIM_OC4Init(TIM2, &TIM_OCInitstruct);
TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Enable);
TIM_OC1Init(TIM2, &TIM_OCInitstruct);
TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM2, ENABLE);
TIM_Cmd(TIM2,ENABLE);
}
这是四个电机的方向
//C轮反转
void C_anti_Round()
{
TIM_SetCompare3(TIM4,500);
MotorC_in1=1;
MotorC_in2=0;
}
//C轮正转
void C_round()
{
TIM_SetCompare4(TIM4,600);
MotorC_in1=0;
MotorC_in2=1;
}
//B轮反转
void B_ANTI_ROUND()
{
TIM_SetCompare1(TIM4,500);
MotorB_in3=1;
MotorB_in4=0;
}
//B轮正转
void B_ROUND()
{
TIM_SetCompare1(TIM2,600);
MotorB_in3=0;
MotorB_in4=1;
}
//A轮反转
void A_anti_round()
{
TIM_SetCompare2(TIM3,500);
MotorA_in1=1;
MotorA_in2=0;
}
//A轮正转
void A_round()
{
TIM_SetCompare1(TIM3,600);
MotorA_in1=0;
MotorA_in2=1;
}
//D轮反转
void D_anti_round()
{
TIM_SetCompare3(TIM2,500);
MotorD_in3=1;
MotorD_in4=0;
}
//D正转
void D_round()
{
TIM_SetCompare4(TIM2,600);
MotorD_in3=0;
MotorD_in4=1;
}
|
|