首先來說,你要使用pwm模式你得先選擇用哪個定時器來輸出pwm吧!除了tim6、tim7這兩個普通的定時器無法輸出pwm外,其餘的定時器都可以輸出pwm,每個通用定時器可以輸出4路pwm,高階定時器tim1、tim8每個可輸出7路pwm。選好定時器及通道後,下一步就是要使能定時器的時鐘。先貼**,再對每條**做詳細分析。
tim_ocinitstructure.tim_ocmode = tim_ocmode_pwm2; //選擇定時器模式:tim脈衝寬度調製模式2
tim_ocinitstructure.tim_outputstate = tim_outputstate_enable; //比較輸出使能
tim_ocinitstructure.tim_ocpolarity = tim_ocpolarity_high; //輸出極性:tim輸出比較極性高(也就是選擇有效電平,這裡是高電平為有效電平)
tim_oc2init(tim3, &tim_ocinitstructure); //根據t指定的引數初始化外設tim3 oc2
tim_oc2preloadconfig(tim3, tim_ocpreload_enable); //使能tim3在ccr2上的預裝載暫存器,即tim3_ccr2的預裝載值在更新事件到來時才能被傳送至當前暫存器中。
tim_cmd(tim3, enable); //使能tim3
這6句話就把pwm的通道配置好了,現在來解釋每一條**:
為什麼選擇的是pwm2模式呢?為什麼不選擇pwm1模式呢?兩者又有什麼區別呢?
下面我們就一**竟,pwm1和pwm2模式是由ccmrx的ocxm來決定的,因為我們選擇的是是通道2,所以設定的是oc2m,再看相關介紹ocxm[2:0]:
110:pwm模式1- 在向上計數時,一旦timx_cnttimx_ccrx時通道x為無效電平(oc1ref=0),否則為有效電平(oc1ref=1)。
111:pwm模式2- 在向上計數時,一旦timx_cnttimx_ccrx時通道x為有效電平,否則為無效電平。
tim_ocinitstructure.tim_ocpolarity = tim_ocpolarity_high; 這句就是用來選有效電平,high就代表1為有效電平。
tim_oc2preloadconfig(tim3, tim_ocpreload_enable); //使能tim3在ccr2上的預裝載暫存器,
即tim3_ccr2的預裝載值在更新事件到來時才能被傳送至當前暫存器中。
這句話是說,ccr2中的預裝載值何時被傳送到當前的cnt暫存器中,這裡我們選擇的是當更新事件到來的時候才裝載,
追蹤暫存器的設定可知,原來設定的是ccmr1的oc2pe,其實還有一種方式是立即裝載看手冊:
oc1pe:輸出比較1預裝載使能(output compare 1 preload enable) 位3
0:禁止timx_ccr1暫存器的預裝載功能,可隨時寫入timx_ccr1暫存器,並且新寫入的數值立即起作用。
1:開啟timx_ccr1暫存器的預裝載功能,讀寫操作僅對預裝載暫存器操作,
timx_ccr1的預裝載值在更新事件到來時被傳送至當前暫存器中。
tim_oc1preloadconfig(),tim_arrpreloadconfig();這兩個函式控制的是ccr1和arr的預裝在使能,使能和失能的區別就是:
使能的時候這兩個儲存期的讀寫需要等待有更新事件發生時才能被改變(比如計數溢位就是更新時間)。失能的時候可以直接進行讀寫而沒有延遲。
另外在執行當中想要改變pwm的頻率和占空比呼叫:tim_setautoreload();tim_setcompare1()這兩個函式就可以了。
學習後發現stm32的定時器功能確實很強大,小總結一下方便以後使用的時候做參考。
stm32定時器一共分為三種:tim1和tim8是高階定時器,6和7是基本定時器,2—5是通用定時器。從名字就可以看得出來主要功能上的差異。
今天我主要是用定時器做pwm輸出,所以總結也主要是針對pwm方面的。先大致說下通用和高階定時器的區別。通用的可以輸出四路pwm訊號互不影響。高階定時器可以輸出三對互補pwm訊號外加ch4通道,也就是一共七路。所以這樣算下來stm32一共可以生成4*5+7*2=30路pwm訊號。接下來還有功能上的區別:通用定時器的pwm訊號比較簡單,就是普通的調節占空比調節頻率(別的不常用到的沒去深究);高階定時器的還帶有互補輸出功能,同時互補訊號可以插入死區,也可以使能剎車功能,從這些看來高階定時器的pwm天生就是用來控制電機的。
stm32通用定時器
stm32的定時器是個強大的模組,定時器使用的頻率也是很高的,定時器可以做一些基本的定時,還可以做pwm輸出或者輸入捕獲功能。時鐘源問題 名為timx的有八個,其中tim1和tim8掛在apb2匯流排上,而tim2 tim7則掛在 apb1匯流排上。其中tim1 tim8稱為高階控制定時器 adva...
stm32通用定時器的PWM輸出
配置過程 以tim3為例,其ch1 ch4為 pa6 pa7 pb0 pb1 1 開啟tim3時鐘,配置4個io口為復用推挽輸出。2 設定tim3的arr和psc來控制pwm的週期。3 設定tim3的ch1 ch4的pwm模式及通道方向,使能tim3的ch1 ch4輸出。4 使能tim3。程式如下 ...
STM32通用定時器配置
stm32通用定時器配置 一 stm32 通用定時器原理 stm32 系列的cpu 有多達8 個定時器,其中tim1 和tim8 是能夠產生三對pwm 互補輸出的高階定時器,常用於三相電機的驅動,它們的時鐘由apb2 的輸出產生。其它6 個為普通定時器,時鐘由apb1 的輸出產生。下圖是stm32參...