每次再调试pwm时总是会或多或少的遇到一些问题,遂总结如下:
在4.0.2版本中(目前master中,有的芯片已经解决有的仍有该问题,怀疑和HAL库有关),pwm初始化函数(stm32_pwm_init)中未启用时钟初始化,可以参考如下方式添加时钟:
static int stm32_pwm_init(void)
{
int i = 0;
int result = RT_EOK;
pwm_get_channel();
#ifdef BSP_USING_PWM2
__HAL_RCC_TIM2_CLK_ENABLE();
#endif
...
在master版本中(其他版本未测试),CubeMX中的PWM时钟源陪不配置不重要(stm32_hw_pwm_init中已经考虑),只需要通道和对应的引脚配置成功即可
有的芯片支持互补PWM输出,即CHxN通道,此时pwm使能时不是使用HAL_TIM_PWM_Start函数,而是HAL_TIMEx_PWMN_Start函数使能(过几天会提交pr)
注意启动顺序,默认drv_pwm的启动等级为INIT_DEVICE_EXPORT(3级),同级别及以下需注意
Kconfig中注意各种宏,这里给出一个模板:
menuconfig BSP_USING_PWM
bool "Enable pwm"
default n
select RT_USING_PWM
if BSP_USING_PWM
menuconfig BSP_USING_PWM1
bool "Enable timer1 output pwm"
default n
if BSP_USING_PWM1
config BSP_USING_PWM1_CH1
bool "Enable PWM1 channel1"
default n
config BSP_USING_PWM1_CH2
bool "Enable PWM1 channel2"
default n
config BSP_USING_PWM1_CH3
bool "Enable PWM1 channel3"
default n
config BSP_USING_PWM1_CH4
bool "Enable PWM1 channel4"
default n
endif
endif
原作者:来日方长
|