stm32的A1口不输出PWM波

我的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;  
    //轮子的ENAENB引脚接A1A2 。其中,A1使用TIM2_CH2A2使用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);
}


如下所示,为仿真图像:

img

你先用示波器打一下那个出pwm的pin脚。

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/747549
  • 你也可以参考下这篇文章:stm32f407之通用定时器产生PWM波
  • 除此之外, 这篇博客: stm32f103——通用定时器输出PWM中的 什么是PWM信号? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •         PWM,英文名Pulse Width Modulation,是脉冲宽度调制(记住这个名词)缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%.

        PWM脉冲宽度调制,实际上就是脉冲信号,但是这个脉冲信号的高/低电平在一个周期所占时间可以调节。