首先配置RCC时钟,使用外部晶振
然后配置时钟树,我的是stm32f429 最高支持180MHZ,我使用的是TIM5,TIM5挂载在APB1总线上定时器频率为90MHZ
启用内部时钟,选择通道输出PWM
通道模式分别是:
输入捕获模式
输出比较不输出模式
输出比较模式
PWM不输出模式
PWM输出模式
还有最下面的 Forced Output ,强制输出模式
分频配置
899+1分频,可根据需要修改
因为我的TIM5在APB1总线上,对应频率是90MHZ,那么分频后就是90MHZ/900=100KHZ;
模式可选向上/下计数,计数的频率就是PSC分频后的频率,
向上计数是从0到设定的数,我这是99999,
向下计数是从设定的是减到0
我这里是100KZH,
不使用内部时钟分组
最后启用自动重载
PWM输出频率=总线时钟/(分频因子+1)/(计数值+1)
Trigger Output (TRGO) Parameters
触发输出,这个我们不使用
PWM 通道配置
PWM模式,在同一计数方式下PWM1和PWM2输出波形互补
Pulse 空占比 先默认0
fast mode 不使用
CH Polanty 通道默认电平,可根据实际情况选择,
最后可选中断使能,也可不选
使用这个启用PWM 输出
HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
使用这个启用PWM 中断输出
HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
可使用这个改变空占比
空占比=COMPARE/(计数值+1)
__HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__)
关于中断
·
在中断处理函数中PWM的回调函数:HAL_TIM_PWM_PulseFinishedCallback(htim);
会在一个PWM周期中执行4次
这4次会在执行分别在:
PWM 上升沿时
PWM 高电平一半时
PWM 下降沿时
PWM 低电平一半时
这4次均为CC1-CC4中断标志触发