PWM简介
PWM频率:Freq = CK_PSC/(PSC+1)/(ARR+1)
PWM占空比:Duty = CCR/(ARR+1)
PWM分辨率:Reso = 1/(ARR+1)
cubeMX配置
Mode
Clock Source
:选择内部时钟Internal ClockChannelx
:输出PWM通道- PWM Generation CH1:CH1输出正常的PWM波形
- PWM Generation CH1N:产生互补的PWM波形
- PWM Generation CH1 CH1N:产生正常和互补的波形(通过两个引脚)
- PWM Generation No Output:不输出PWM波到引脚
- Forced Output CH1:强制CH1输出某个电平
Configuration
-
Counter setting
- Prescaler:时钟预分频数(PSC)
- Counter Mode:计数模式(Up向上计数)
- Counter Period:自动重装载值(ARR)
- auto-reload preload:自动重装载(Enable)
-
PWM Generation Channel x
- Mode:定时模式(PWM mode 1)
- Pulse:计数比较值(CCR,初始为0)
- Output compare preload:输出比较预加载(Enable)作用和 auto-reload preload 类似
- Fast Mode:输出比较快速模式(Disable不使能)
- CH Polarity:输出极性(Low 当定时器计数值小于 CCR1_Val 时,输出低电平)
- CH Idle State:空闲状态,PWM未使能时(Set为高电平、Reset为低电平)
-
- GPIO设置为高频率
- 如若需要同一个timer产生中断,则还需在
NVIC Settings
中使能
keil使用流程
- cubeMX初始化后默认是关闭的,需手动开启。
HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_x);
- 修改CCR的值
__HAL_TIM_SET_COMPARE(htimx, TIM_CHANNEL_x, 新的值);
如若使用了中断 - 先开启定时器中断
HAL_TIM_Base_Start_IT(&htimx);
开启定时器 - 再使用PWM的中断模式
HAL_TIM_PWM_Start_IT(&htimx);
开启PWM输出 - 应实现的回调函数为
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim);
HAL库
------ BY Flier
2023.10.3