STM32 HAL库开发 PWM一直不成功

将定时器3的通道二映射到PB5(LED)上,每10ms改变一次比较值,PB5亮度没有反应

timer.c 中的具体配置

//PWM GPIO口初始化
void pwm_gpio_config()
{
    GPIO_InitTypeDef gpio_initStructure;
    
    __HAL_RCC_TIM3_CLK_ENABLE();
    __HAL_AFIO_REMAP_TIM3_PARTIAL();
    __HAL_RCC_GPIOB_CLK_ENABLE();
    
    
    gpio_initStructure.Pin = GPIO_PIN_5;
    gpio_initStructure.Mode = GPIO_MODE_AF_PP;
    gpio_initStructure.Pull = GPIO_PULLUP;
    gpio_initStructure.Speed = GPIO_SPEED_FREQ_HIGH;
    
    HAL_GPIO_Init(GPIOB,&gpio_initStructure);
}


//定时器3初始化
void timer3_init(uint16_t prescaler,uint16_t period)
{
    
    htimer3.Instance = TIM3;
    
    htimer3.Init.CounterMode = TIM_COUNTERMODE_UP;
    htimer3.Init.Prescaler = prescaler;
    htimer3.Init.Period = period;
    htimer3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_PWM_Init(&htimer3);
    
    //这里不重写MSP函数,用我们自己定义的函数
    pwm_gpio_config();
    
    htimer3_oc.OCMode = TIM_OCMODE_PWM1;
    htimer3_oc.Pulse = 0;
    htimer3_oc.OCPolarity = TIM_OCPOLARITY_LOW;
    
    HAL_TIM_PWM_ConfigChannel(&htimer3,&htimer3_oc,TIM_CHANNEL_2);
    
    HAL_TIM_PWM_Start(&htimer3,TIM_CHANNEL_2);
}

void TIM_SetTIM3Compare2(uint32_t compare)
{
    TIM3->CCR2=compare; 
}

主函数中的逻辑:

uint8_t dir=1;
    uint16_t led0pwmval=0;
    //HAL 库初始化,必要步骤
    HAL_Init();
    
    //系统时钟初始化
    SystemClock_Config();
    
    //LED 初始化
    led_init();
    
    //蜂鸣器初始化
    beep_init();
    
    //按键初始化
    key_init();
    delay_ms(100);
    
    //串口 GPIO 初始化
    uart1_gpio_config();
    
    //串口初始化
    uart1_init();
    
    timer2_init(6199,9999);
//    timer3_gpio_config();
    timer3_init(7200-1,500);
    
    while(1)
    {
        delay_ms(10);         
        if(dir)led0pwmval++;                //dir==1 led0pwmval递增
        else led0pwmval--;                    //dir==0 led0pwmval递减 
        if(led0pwmval>300)dir=0;            //led0pwmval到达300后,方向为递减
        if(led0pwmval==0)dir=1;    
        TIM_SetTIM3Compare2(led0pwmval);
    }