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