當使用定時器1輸出pwm功能時,定時器的配置過程:
1>在自動重裝載暫存器tim1_arr暫存器中寫入重裝載值(0x0000~0xffff)。
2>在預分頻暫存器tim1_psc暫存器中寫入分頻值,計數器的時鐘頻率 = fck_psc/( psc[15:0]+1),當不分頻時,定時器頻率等於系統apb1時鐘頻率。
3>時鐘分割,一般都是設定成0;
4>計數模式,設定tim1_cr1暫存器的dir位,0:向上計數,1:向下計數。
5>通過設定捕獲/比較模式暫存器選pwm的模式1,還是模式2。
6>寫tim1_ccer暫存器的cc1p位設定輸出的極性,0:高電平有效,捕獲後變為高電平,1:低電平有效。
7>寫tim1_ccer暫存器的cc1e位設定,寫1,開啟- oc1訊號輸出到對應的輸出引腳。
8>預裝載使能tim_oc1preloadconfig(tim1, tim_ocpreload_enable); //在ccmr1暫存器中使能,注意這裡的tim_ocpreload_enable=0x0008,對應的就是輸出比較通道1,當使用第二通道時就是呼叫:tim_oc2preloadconfig(tim1, tim_ocpreload_enable)函式,在這個函式裡面有對0x0008左移8位,正好對應oc2通道的預裝載使能,位說明如下:
oc1pe: 輸出比較1預裝載使能 (output compare 1 preload enable)
0:禁止timx_ccr1暫存器的預裝載功能,可隨時寫入timx_ccr1暫存器,並且新寫入的數
值立即起作用。
1:開啟timx_ccr1暫存器的預裝載功能,讀寫操作僅對預裝載暫存器操作, timx_ccr1的
預裝載值在更新事件到來時被傳送至當前暫存器中。
9>timx->cr1 |= tim_cr1_cen;使能計數器
cen:使能計數器
0:禁止計數器;
1:使能計數器。
注:在軟體設定了cen位後,外部時鐘、門控模式和編碼器模式才能工作。觸發模式可以自動
地通過硬體設定cen位。
在單脈衝模式下,當發生更新事件時, cen被自動清除。
**如下,輸出引腳的是定時器1的第一通道:
void tim1_pwm_init(u16 arr,u16 psc)
初始化完成後,記得設定tim1_ccr1暫存器的值
只有當更新事件發生時,此預裝載值才傳輸至當前捕獲/比較1暫存器中。
當前捕獲/比較暫存器參與同計數器timx_cnt的比較,並在oc1埠上產生輸出訊號
tim1_pwm_init(2399,0); //不分頻。pwm頻率=72000000/2400=30khz
tim1->ccr1 = 1200; //30k,50% 占空比
實際除錯定時器1過程遇到的問題:
1、當使用定時器1的時候,下面兩個必須要加上,不加就沒有pwm輸出!!!!!!
tim_ocinitstructure.tim_ocidlestate=tim_ocidlestate_set; //空閒狀態設定,必須在初始化的時候加上!!!
tim_ctrlpwmoutputs(tim1,enable); //這個一定要加上啊,是使能定時器1的oc輸出的啊!!!(bdtr暫存器)
這兩個地方就是定時器1輸出pwm與其他普通定時器輸出pwm不一樣的地方,一定要注意這裡啊!!!!!!
2、下面這個函式千萬不要亂加。
tim_selectonepulsemode(tim1,tim_opmode_single);/******* 單脈衝模式 **********/
Windows下定時器使用注意事項
在windows平台下,一般使用settimer函式建立乙個計時器,killtimer函式用於銷毀乙個計時器。計時器屬於系統資源,使用完應及時銷毀。settimer基於windows的訊息 message 有可能被阻塞。使用wm timer訊息觸發定時器並不精確。有兩個原因 原因一 windows計...
LCD使用注意事項
a.lcd使用注意事項 1.確保是在電源關閉的狀態下拔插線纜 2.對液晶屏進行固定安裝時,注意使整個液晶屏保持平整,避免外力導致液晶屏 彎曲 扭曲 3.一定要小心液晶屏的表面偏光片,避免被堅硬物體劃傷 決不能將堅硬物品置於液晶屏之上 4.如果水滴長時間滯留在液晶模組上,可能導致變色或出現汙斑,所以務...
using使用注意事項
在c 的語法中,using關鍵字有幾個作用 一 匯入乙個命名空間,以便於能使用該命名空間下的相關型別定義,如下的例項 中,將匯入system.text下的相關型別定義 二 為乙個命名空間設定別名,這種情況下並不會匯入對應命名空間下的型別定義,如例項 為system.text定義了別名systext,...