STM32F103一共有11個定時器,其中:
2個高級定時器
4個普通定時器
2個基本定時器
2個看門狗定時器
1個系統嘀嗒定時器
TIMER主要是由三部分組成:
1、時基單元。
2、輸入捕獲。
3、輸出比較。
還有兩種模式控制功能:從模式控制和主模式控制。
通用定時器PWM工作原理
以PWM模式2,定時器3向上計數,有效電平是高電平,定時器3的第3個PWM通道為例:
定時器3的第3個PWM通道對應是PB0這引腳,三角頂點的值就是TIM3_ARR寄存器的值,上圖這條紅線的值就TIM3_CCR3
當定時器3的計數器(TIM3_CNT)剛開始計數的時候是小于捕獲/比較寄存器(TIM3_CCR3)的值,
此時PB0輸出低電平,隨著計數器(TIM3_CNT)值慢慢的增加,
當計數器(TIM3_CNT)大于捕獲/比較寄存器(TIM3_CCR3)的值時,這時PB0電平就會翻轉,輸出高電平,計數器(TIM3_CNT)的值繼續增加,
當TIM3_CNT=TIM3_ARR的值時,TIM3_CNT重新回到0繼續計數,PB0電平翻轉,輸出低電平,此時一個完整的PWM信號就誕生了。
頻率:
//Fpwm = 72M / ((arr+1)*(psc+1))(單位:Hz)
其中
F就是PWM輸出的頻率,單位是:HZ;
ARR就是自動重裝載寄存器(TIMx_ARR);
PSC 就是預分頻器(TIMx_PSC);
72M就是系統的頻率;
占空比
duty cycle = (TIMx_CCRx/ TIMx_ARR+1)* 100%
高級定時器都可以同時產生3路互補帶死區時間的PWM信號和一路單獨的PWM信號,
具有剎車輸入功能,在緊急的情況下這個剎車功能可以切斷PWM信號的輸出
還具有支持針對定位的增量(正交)編碼器和霍爾傳感器電路
高級控制定時器(TIM1 和TIM8) 由一個16位的自動裝載計數器組成,它由一個可編程的預分頻器驅動
它適合多種用途,包含測量輸入信號的脈沖寬度( 輸入捕獲) ,或者產生輸出波形(輸出比較、PWM、嵌入死區時間的互補PWM等)。
使用定時器預分頻器和RCC時鐘控制預分頻器,可以實現脈沖寬度和波形周期從幾個微秒到幾個毫秒的調節。
高級控制定時器(TIM1 和TIM8) 和通用定時器(TIMx) 是完全獨立的,它們不共享任何資源
這里只需要提一點有些網友疑惑的TIM_TimeBaseStructure.TIM_ClockDivision = 0;這句話是什么作用?其實仔細看過技術手冊后發現這句話與PWM輸出實驗其實是沒關系的,這句話是設置定時器時鐘(CK_INT)頻率與數字濾波器(ETR,TIx)使用的采樣頻率之間的分頻比例的(與輸入捕獲相關),0表示濾波器的頻率和定時器的頻率是一樣的。
110:PWM模式1- 在向上計數時,一旦TIMx_CNT
無效電平;在向下計數時,一旦TIMx_CNT>TIMx_CCR1時通道1為無效電平(OC1REF=0),否
則為有效電平(OC1REF=1)。
111:PWM模式2- 在向上計數時,一旦TIMx_CNT
有效電平;在向下計數時,一旦TIMx_CNT>TIMx_CCR1時通道1為有效電平,否則為無效電
平。
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高,所以這里我們設置的CC2P是0,也就是默認的OC2高電平有效。