STM32開發(fā)板學習日記-[5]TIM的PMW模式
在TIMx_CCMRx寄存器中的OCxM位寫入’110’(PWM模式1)或’111’(PWM模式2),能夠獨立地設(shè)置每個OCx輸出通道產(chǎn)生一路PWM。必須設(shè)置TIMx_CCMRx寄存器OCxPE位以使能相應(yīng)的預(yù)裝載寄存器,最后還要設(shè)置TIMx_CR1寄存器的ARPE位使能自動重裝載的預(yù)裝載寄存器(在向上計數(shù)或中心對稱模式中)。
因為僅當發(fā)生一個更新事件的時候,預(yù)裝載寄存器才能被傳送到影子寄存器,因此在計數(shù)器開始計數(shù)之前,必須通過設(shè)置TIMx_EGR寄存器中的UG位來初始化所有的寄存器。
OCx的極性可以通過軟件在TIMx_CCER寄存器中的CCxP位設(shè)置,它可以設(shè)置為高電平有效活或低電平有效。TIMx_CCER寄存器中的CCxE位控制OCx輸出使能。
在PWM模式(模式1或模式2)下,TIMx_CNT和TIM1_CCRx始終在進行比較,(依據(jù)計數(shù)器的計數(shù)方向)以確定是否符合TIM1_CCRx≤TIM1_CNT或者TIM1_CNT≤TIM1_CCRx。然而為了與OCREF_CLR的功能(在下一個PWM周期之前,ETR信號上的一個外部事件能夠清除OCxREF)一致,OCxREF信號只能在下述條件下產(chǎn)生:
●當比較的結(jié)果改變
●當輸出比較模式(TIMx_CCMRx寄存器中的OCxM位)從“凍結(jié)”(無比較,OCxM=’000’)切換到某個PWM模式(OCxM=’110’或’111’)。這樣在運行中可以通過軟件強置PWM輸出。
根據(jù)TIMx_CR1寄存器中CMS位的狀態(tài),定時器能夠產(chǎn)生邊沿對齊的PWM信號或中央對齊的PWM信號。
110:PWM模式1-在向上計數(shù)時,一旦TIMx_CNT
111:PWM模式2-在向上計數(shù)時,一旦TIMx_CNT
向下計數(shù)的配置 在PWM模式1,當TIMx_CNT>TIMx_CCRx時參考信號OCxREF為低,否則為高。如果TIMx_CCRx中的比較值大于TIMx_ARR中的自動重裝載值,則OCxREF保持為’1’。該模式下不能產(chǎn)生0%的PWM波形。 使用中央對齊模式的提示: 本例展示了如何設(shè)置TIM工作在脈沖寬度調(diào)制模式(PWM Pulse Width Modulation TIM3時鐘設(shè)置為36MHz,預(yù)分頻設(shè)置為0,TIM2計數(shù)器時鐘可表達為: 設(shè)置TIM3_CCR1寄存器值為500,則TIM3通道1產(chǎn)生一個頻率為36MHz,占空比(duty cycle)為50%的PWM信號。 同理,根據(jù)寄存器TIM3_CCR2 、TIM3_CCR3和 TIM3_CCR4的值,TIM3通道2產(chǎn)生一個頻率為36MHz,占空比(duty cycle)為37.5%的PWM信號;TIM3通道1產(chǎn)生一個頻率為36MHz,占空比(duty cycle)為25%的PWM信號;TIM3通道1產(chǎn)生一個頻率為36MHz,占空比(duty cycle)為12.5%的PWM信號。 可以通過示波器,在相應(yīng)管腳觀察到輸出信號。 u16 CCR1_Val = 500; 啟用CCR1寄存器的影子寄存器(直到產(chǎn)生更新事件才更改設(shè)置)
PWM 邊沿對齊模式
向上計數(shù)配置
當TIMx_CR1寄存器中的DIR位為低的時候執(zhí)行向上計數(shù)。參看13.3.2節(jié)。
下面是一個PWM模式1的例子。當TIMx_CNT
當TIMx_CR1寄存器的DIR位為高時執(zhí)行向下計數(shù)。
PWM 中央對齊模式
當TIMx_CR1寄存器中的CMS位不為’00’時為中央對齊模式(所有其他的配置對OCxREF/OCx信號都有相同的作用)。根據(jù)不同的CMS位的設(shè)置,比較標志可以在計數(shù)器向上計數(shù)時被置1、在計數(shù)器向下計數(shù)時被置1、或在計數(shù)器向上和向下計數(shù)時被置1。TIMx_CR1寄存器中的計數(shù)方向位(DIR)由硬件更新,不要用軟件修改它。下圖給出了一些中央對齊的PWM波形的例子
●TIMx_ARR=8
●PWM模式1
●TIMx_CR1寄存器中的CMS=01,在中央對齊模式1時,當計數(shù)器向下計數(shù)時設(shè)置比較標志。通用定時器(TIMx)
●進入中央對齊模式時,使用當前的上/下計數(shù)配置;這就意味著計數(shù)器向上還是向下計數(shù)取決于TIMx_CR1寄存器中DIR位的當前值。此外,軟件不能同時修改DIR和CMS位。
●不推薦當運行在中央對齊模式時改寫計數(shù)器,因為會產(chǎn)生不可預(yù)知的結(jié)果。特別地:
─如果寫入計數(shù)器的值大于自動重加載的值(TIMx_CNT>TIMx_ARR),則方向不會被更新。例如,如果計數(shù)器正在向上計數(shù),它就會繼續(xù)向上計數(shù)。
─如果將0或者TIMx_ARR的值寫入計數(shù)器,方向被更新,但不產(chǎn)生更新事件UEV。
●使用中央對齊模式最保險的方法,就是在啟動計數(shù)器之前產(chǎn)生一個軟件更新(設(shè)置TIMx_EGR 位中的UG位),不要在計數(shù)進行過程中修改計數(shù)器的值。
mode)。
TIM3 counter clock = TIMxCLK / (Prescaler +1) = 36 MHz
u16 CCR2_Val = 375;
u16 CCR3_Val = 250;
u16 CCR4_Val = 125;
}
評論