STM32F103 PWM输出无效

时间:2015-08-27 21:22:34

标签: stm32

我尝试将LEDs板上的STM3210E-EVAL设置为PWM输出,以便我可以改变亮度。

我的目标是red LED,它位于端口F,引脚8上。我已经设置了定时器13,它应该绑定到PWM输出的引脚,但我觉得我就像我一样在某处错过了一步。以下是初始化引脚,设置定时器和设置PWM

的当前功能
void led_init(void)
{
    TIM_OC_InitTypeDef sConfigOC;
    TIM_HandleTypeDef htim13;

    /* Configure GPIO pins : PF8 */
    __HAL_AFIO_REMAP_TIM13_ENABLE();
    __GPIOF_CLK_ENABLE();
    GPIO_InitStruct.Pin = GPIO_PIN_8;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
    HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

    htim13.Instance = TIM13;
    htim13.Init.Prescaler = (uint32_t)(72000000 / 2000000) - 1;
    htim13.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim13.Init.Period = 700;
    htim13.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_Base_Init(&htim13);

    HAL_TIM_PWM_Init(&htim13);

    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 350;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    sConfigOC.OCNPolarity  = TIM_OCNPOLARITY_HIGH;
    sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
    sConfigOC.OCIdleState  = TIM_OCIDLESTATE_RESET;

    HAL_TIM_PWM_ConfigChannel(&htim13, &sConfigOC, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim13, TIM_CHANNEL_1);
}

2 个答案:

答案 0 :(得分:1)

您似乎没有启用计时器的时钟:

__HAL_RCC_TIM13_CLK_ENABLE()

您是从示例或STM32cubeMX启动项目的吗?通常这个部分的一些初始化代码转到stm32f1_hal_msp.c文件!将PWM引脚(PF8)初始化在那里也很优雅!

答案 1 :(得分:0)

我认为您应该指定在GPIO上使用哪种备用功能。在那种情况下它是PWM。必须有GPIO_PinAFConfig等函数。