stm32使用定时器PWM
1、定时器TIM
PSC-Prescaler-预分频器
CNT-Counter-计数器
ARR-Auto Reload Register-自动重装寄存器
RCR-Repetition Counter Register-重复计数器
1、时钟来源:晶振提供频率,时钟树这些才提供时钟
分频系数
计数
3、实例
上面展示了假设使用外部石英晶振提供32.768K,经过32767+1分频后为1Hz,自动重装ARR设置为59+1,没60秒重装一次,如果设置重复计数器为0+1,也就是每1个60秒出现一次事件,如果RCR设置为4+1,也就是每5个60秒出现一次事件
4、定时器输出比较
举例:想要通过定时器实现PWM
设置比较寄存器CCR的值为4,也就是CNT小于CCR时是高电平,大于CCR时是低电平
实际就是CCR决定了占空比
修改CCR的值改变占空比
1、配置定时器通道功能为PWM
PWM的占空比计算主要看下面这个图还有后面的占空比计算公式
pulse那里填的0就是这里的CCRx,代表占空比多少,如果填了100,那就是100/1000=0.1的占空比,这里主要看ARR的值,占空比也就是CCRx / ARR
后面修改占空比修改的就是CCRx的值
2、HAL库函数说明
- 配置定时器:HAL_TIM_PWM_ConfigChannel
HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim,
const TIM_OC_InitTypeDef *sConfig,
uint32_t Channel);
功能:配置某个定时器占空时间及输出通道
参数:
htim:指定要配置的定时器对象的指针
Channel:哪个通道,取值有TIM_CHANNEL_1到TIM_CHANNEL_4,TIM_CHANNEL_ALL
sConfig:要进行配置的具体参数的结构体:
typedef struct
{uint32_t OCMode; /* 模式,通常设置为 TIM_OCMODE_PWM1 即计数值小于CRR值时输出有效电平*/TIM_OCMODE_TIMING 记数TIM_OCMODE_ACTIVE 当CNT == CRR时 输出有效电平TIM_OCMODE_INACTIVE 当CNT == CRR时 输出无效电压TIM_OCMODE_TOGGLE 当CNT == CRR时输出电压翻转一次TIM_OCMODE_PWM1 CNT < CRR时输出有效电平(此为PWM常用模式)TIM_OCMODE_PWM2 CNT > CRR时输出有效电平TIM_OCMODE_FORCED_ACTIVE 强制输出无效电平TIM_OCMODE_FORCED_INACTIVE 强制输出有效电平uint32_t Pulse; /* 有效电平的宽度,单位为时钟个数,此为占空时间 */uint32_t OCPolarity;