我的stm32f103c8的A1口不输出PWM波,使用keil5仿真时出现PWM波,但在实际使用时,无法输出PWM波,如下,是我的PWM配置函数:
void PWM_Init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// 引脚初始化
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
//轮子的ENA、ENB引脚接A1与A2 。其中,A1使用TIM2_CH2,A2使用TIM2_CH3
//A3是超声波发声引脚,使用TIM2_CH4
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//TIM2初始化
TIM_InternalClockConfig(TIM2);
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; //ARR
TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1; //PSC
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCStructInit( &TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1 ;
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse =0; //CCR
TIM_OC2Init(TIM2, &TIM_OCInitStructure);
TIM_OCStructInit( &TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1 ;
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse =0; //CCR
TIM_OC3Init(TIM2, &TIM_OCInitStructure);
TIM_Cmd(TIM2, ENABLE);
}
//置CCR值以用来调速
void PWM_SetCompareL(uint8_t compareL)//左轮调速
{
TIM_SetCompare2(TIM2, compareL);
}
void PWM_SetCompareR(uint8_t compareR)//右轮调速
{
TIM_SetCompare3(TIM2, compareR);
}
如下是我的电机速度设置函数
void Motor_setSpeed(int8_t speedL,int8_t speedR)//电机速度设置函数
{
GPIO_SetBits(GPIOA, GPIO_Pin_4);//A4接高电平,即代表前进
GPIO_ResetBits(GPIOA, GPIO_Pin_5);
GPIO_ResetBits(GPIOB, GPIO_Pin_13);
GPIO_SetBits(GPIOB, GPIO_Pin_14);//B14 接高电平代表前进
PWM_SetCompareL(speedL);
PWM_SetCompareR(speedR);
}
如下所示,为仿真图像: