STM32 TIMER輸出比較模式 PWM

2022-04-11 19:03:11 字數 1649 閱讀 4182

在自己小板子上移植pwm時候又重新學習了一下,加入兩點:1,對各種輸出比較模式的學習;2,輸出模式時加入中斷

先寫出函式:

1

//tim4 pwm部分初始化 2//

pwm輸出初始化3//

period:輸出週期:khz4//

duty:占空比 0-1005//

mode: 是否開啟tim4中斷溢位中斷與cc4中斷67

8void tim4_ch4_pb9_pwm_init(unsigned short

int period,char duty,char

mode)959

60 }

tim4_ch4_pb9_pwm_init

其中:tim_ocinitstructure.tim_pulse=(10*duty/period);  

這句就是set ccr4比較/捕獲暫存器的值。

tim_ocinitstructure.tim_ocmode = tim_ocmode_pwm1; //選擇定時器輸出比較

tim_ocmode_timing        輸出比較時間模式  (輸出引腳凍結無效)

tim_ocmode_active         輸出比較主動模式  (匹配時設定輸出引腳為有效電平,當計數值為比較/捕獲暫存器值相同時,強制輸出為高電平                                             

tim_ocmode_inactive      輸出比較非主動模式 (匹配時設定輸出引腳為無效電平,當計數值為比較/捕獲暫存器值相同時,強制輸出為低電平)      

tim_ocmode_toggle         輸出比較翻轉觸發模式(當計數值與比較/捕獲暫存器值相同時,翻轉輸出引腳的電平)   

tim_ocmode_pwm1          向上計數時,當timx_cnt < timx_ccr*時,輸出電平有效,否則為無效                            

向下計數時,當timx_cnt > timx_ccr*時,輸出電平無效,否則為有效

tim_ocmode_pwm2          與pwm1模式相反

pwm模式就不說了,通過函式設定頻率與占空比。

其餘幾個所說的「當計數值為比較/捕獲暫存器值相同時」 即ccrx=cnt;這時候會觸發後面所說的事件,而tim_ocmode_active與tim_ocmode_inactive     僅觸發一次,所以之後就會出現一直為高電平或者低電平。tim_ocmode_toggle會每次都翻轉,所以也形成乙個pwm,而占空比只會是百分之五十,週期為引數period的兩倍,頻率為1/2,因為乙個period只翻轉一次!翻轉是在ccrx=cnt時翻轉,並不是cnt=arr(arr=tim_timebasestructure.tim_period)。

輸出比較時候可以出發本身的比較/捕獲中斷與溢位中斷,我用的ch4,開啟了tim_it_cc4 | tim_it_update,中斷函式中可以看到何時觸發中斷,什麼時候進行翻轉。

1

void tim4_irqhandler(void)2

10if(tim_getitstatus(tim4,tim_it_cc4)!=reset)

11

1617

18 }

tim4_irqhandler

stm32 timer 的三個函式

再說一下tim timebasestructure.tim prescaler 0的問題,這個很簡單,程式後面如果呼叫了函式tim prescalerconfig tim2,35999,tim pscreloadmode immediate 這個函式可以把之前的值給修改了,tim prescaler...

STM32輸出比較模式和PWM模式

1.兩者關係 其實完全可以理解為pwm模式為輸出比較模式的特殊形式,pwm模式在對應定時器上的四個通道產生的頻率是同步的 即相同的 而輸出比較模式在四個通道可以產生的頻率不同。2.pwm很多是週期固定改變占空比來應用的,當然也有改變頻率的,改變占空比修改的是ccr1暫存器,而改變頻率則是arr分頻器...

STM32使用TIM閃爍LED 輸出比較方式

stm32定時器輸出比較器可以直接操作對應的gpio,在計數器值等於比較暫存器的值時,對應的gpio可以有以下四種動作 無動作啟用 取消啟用 翻轉啟用電平由輸出極性暫存器決定 將led置於定時器輸出比較對應的gpio上,對它的操作將非常方便,完全由硬體完成,不消耗cpu時間,無需中斷,每個定時器都對...