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