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的占空比计算主要看下面这个图还有后面的占空比计算公式
假设这里的时钟源为72MHz,设置PSC为71,那么降频后为72/(71+1) = 1MHz,计数器CNT获取前面降频后的时钟频率,也就是1MHz,一秒钟计数1000000次,也就是1us的频率,设置自动重装寄存器ARR的值为1000
CNT和ARR的关系是什么呢?假设CNT设置工作模式向上增加,也就是从0往上递增,当CNT的值增加到与ARR相等时,就会重装,也就是CNT变为0,这里设置ARR为1000,那么CNT从0递增到1000,就会重新计数
后面设置PWM,是CNT的值和CCR比较寄存器的值比较,小就是高电平,大就是低电平,一直到CNT的值增长到ARR的值,再次重0开始计数,这就是下一个周期了
pulse那里填的0就是这里的CCRx,代表占空比多少,如果填了100,那就是100/1000=0.1的占空比,这里主要看ARR的值,占空比也就是CCRx / ARR
后面修改占空比修改的就是CCRx的值
stm32定时器2的三个通道的引脚PA15、PB3、PB2分别接LED灯的正极,LED灯的负极接GND
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