stm32中使用pwm时存在问题,没有输出呀,其根本原因在于drv_pwm中没有打开时钟
也就是打开对应的时钟,添加 __HAL_RCC_TIMx_CLK_ENABLE();
就可以使用啦。
static int stm32_pwm_init(void)
{
int i = 0;
int result = RT_EOK;
pwm_get_channel();
#ifdef BSP_USING_PWM1
__HAL_RCC_TIM1_CLK_ENABLE();
#endif
#ifdef BSP_USING_PWM2
__HAL_RCC_TIM2_CLK_ENABLE();
#endif
#ifdef BSP_USING_PWM3
__HAL_RCC_TIM3_CLK_ENABLE();
#endif
#ifdef BSP_USING_PWM4
__HAL_RCC_TIM4_CLK_ENABLE();
#endif
for (i = 0; i < sizeof(stm32_pwm_obj) / sizeof(stm32_pwm_obj[0]); i++)
{
/* pwm init */
if (stm32_hw_pwm_init(&stm32_pwm_obj[i]) != RT_EOK)
{
LOG_E("%s init failed", stm32_pwm_obj[i].name);
result = -RT_ERROR;
goto __exit;
}
else
{
LOG_D("%s init success", stm32_pwm_obj[i].name);
/* register pwm device */
if (rt_device_pwm_register(&stm32_pwm_obj[i].pwm_device, stm32_pwm_obj[i].name, &drv_ops, &stm32_pwm_obj[i].tim_handle) == RT_EOK)
{
LOG_D("%s register success", stm32_pwm_obj[i].name);
}
else
{
LOG_E("%s register failed", stm32_pwm_obj[i].name);
result = -RT_ERROR;
}
}
}
__exit:
return result;
}