初级会员

- 积分
- 51
- 金钱
- 51
- 注册时间
- 2015-10-27
- 在线时间
- 3 小时
|
1金钱
本帖最后由 kroosliu 于 2016-1-23 14:44 编辑
//初始化电机正反转IO口
void motor_io(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PB时钟
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;//推挽输出
GPIO_Init(GPIOB,&GPIO_InitStruct);//初始化PB12-PB15
GPIO_SetBits(GPIOB,GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);//PB12-PB15输出高
}
void motor_pwm(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStruct;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
motor_io();//初始化电机正反转IO口
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1|RCC_APB2Periph_GPIOA,ENABLE);//使能定时器1和PA时钟
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_11;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;//推挽输出
GPIO_Init(GPIOA,&GPIO_InitStruct);//初始化PA8,PA11
//初始化定时器1
TIM_TimeBaseInitStruct.TIM_Period=arr;
TIM_TimeBaseInitStruct.TIM_Prescaler=psc;
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);
//初始化定时器1的通道1为PWM模式1
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OC1Init(TIM1,&TIM_OCInitStruct);
//TIM1->CCMR1|=6<<4; //CH1 PWM1模式
//TIM1->CCER|=1<<0; //CH1输出使能
//初始化定时器1的通道4为PWM模式1
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OC4Init(TIM1,&TIM_OCInitStruct);
//使能TIM1在CCR1和CCR4上的预装载寄存器
TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
TIM_OC4PreloadConfig(TIM1,TIM_OCPreload_Enable);
//使能定时器1外设的主输出
TIM_CtrlPWMOutputs(TIM1,ENABLE);
//使能自动重装载预装载寄存器
TIM_ARRPreloadConfig(TIM1,ENABLE);
//使能定时器1
TIM_Cmd(TIM1,ENABLE);
}
通道1的电机转不了,通道4的电机可以转。
把初始化定时器1的通道1为PWM模式1的那几行库函数代码改成下面的两行寄存器代码,通道1的电机又可以转了。
请问这个程序哪里写错了?
|
-
程序原理图
|