我正试图将STM3210E-EVAL
板上的一个LEDs
设置为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);
}
似乎你没有启用定时器的时钟:
__HAL_RCC_TIM13_CLK_ENABLE()
您是从一个示例或STM32cubeMX开始您的项目吗?通常一些初始化代码像这一部分去stm32f1_hal_msp.c文件!这是一种优雅,也把你的PWM引脚(PF8) init那里!
我认为您应该指定在GPIO上使用哪个备用功能。在这种情况下,它是PWM。必须有像GPIO_PinAFConfig
这样的函数