STM32定時器使用筆記

2021-08-20 18:41:31 字數 2567 閱讀 3493

),很好,記錄順便分享一下:

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的通道配置好了,一句句來解釋:

pwm1和pwm2模式

是由ccmr1的oc1m和oc2m來決定的,因為我們選擇的是是通道2,所以設定的是oc2m,再看相關介紹

oc1m[2:0]

:輸出比較1模式(output compare 1 enable)

110:pwm模式1- 在向上計數時,一旦timx_cnt有效電平

,否則為無效電平;

在向下計數時,一旦timx_cnt>timx_ccr1時通道1為無效電平(oc1ref=0),否則為有效電平(oc1ref=1)。

111:pwm模式2- 在向上計數時,一旦timx_cnt

在向下計數時,一旦timx_cnt>timx_ccr1時通道1為有效電平,否則為無效電平。

有效電平

是由ccer這個暫存器的ccxp來決定的,這裡是通道2,所以是cc2p。

cc1p

:輸入/捕獲1輸出極性(capture/compare 1 output polarity)  位1 

0:oc1高電平有效

1:oc1低電平有效

第五句是說,ccr2中的

預裝載值何時被傳送到當前的cnt暫存器

中,這裡我們選擇的是當更新事件到來的時候才裝載,追蹤暫存器的設定可知,原來設定的是ccmr1的oc2pe,其實還有一種方式是立即裝載看手冊:

oc1pe

:輸出比較1預裝載使能(output compare 1 preload enable)  位3 

0:禁止timx_ccr1暫存器的預裝載功能,可隨時寫入timx_ccr1暫存器,並且新寫入的數

值立即起作用。

1:開啟timx_ccr1暫存器的預裝載功能,讀寫操作僅對預裝載暫存器操作,timx_ccr1的

預裝載值在更新事件到來時被傳送至當前暫存器中。

原文tim_arrpreloadconfig(tim3, enable); 

允許在定時器工作時向

arr的緩衝器中寫入新值

以便在更新事件發生時載入覆蓋以前的值。

對應的是tim1_timebasestructure.tim_period,如果之後的週期不變,則該函式不用寫。

tim_oc2preloadconfig(tim3, tim_ocpreload_enable);

使能tim3在ccr2上的預裝載暫存器,即tim3_ccr2的預裝載值在更新事件到來時才能被傳送至當前暫存器中。

這句話是說,

ccr2中的預裝載值何時被傳送到當前的cnt暫存器

中,這裡我們選擇的是當更新事件到來的時候才裝載。對應的是tim1_ocinitstructure.tim_pulse,設定的是ccmr1的oc2pe,其實還有一種方式是立即裝載看手冊:p248-249

oc1pe

:輸出比較1預裝載使能(output compare 1 preload enable) 位3 

0:禁止timx_ccr1暫存器的預裝載功能,可隨時寫入timx_ccr1暫存器,並且新寫入的數值立即起作用。

1:開啟timx_ccr1暫存器的預裝載功能,讀寫操作僅對預裝載暫存器操作,timx_ccr1的預裝載值在更新事件到來時被傳送至當前暫存器中。

tim_getitstatus(tim_typedef* timx, uint16_t)

判斷定時器timx的中斷型別tim_it是否發生中斷。例如判斷定時器3是否發生更新(溢位)中斷:

if(tim_getitstatus(tim3, tim_it_update) != reset){}

voidtim_clearitpendingbit(tim_typedef* timx, uint16_t tim_it)

清除定時器timx的中斷tim_it標誌位。例如清除tim3的溢位中斷:

tim_clearitpendingbit(tim3,tim_it_update  );

韌體庫還提供了兩個函式用來判斷定時器狀態以及清除定時器狀態標誌位的函式tim_getflagstatus和tim_clearflag,他們的作用和前面兩個函式的作用類似。只是在tim_getitstatus函式中會先判斷這種中斷是否使能,使能了才去判斷中斷標誌位,而tim_getflagstatus直接用來判斷狀態標誌位。(原文)

STM32 四 定時器使用

具體參考以下幾個資料 stm32開發指南 庫函式版本。原子開發板的,講的很細緻。stm32晶元手冊,定時器篇章 庫函式參考手冊 初始化定時器 編寫中斷服務程式 主函式呼叫 1.初始化定時器 void tim4 init init u16 arr,u16 psc 說明 使用外設,第一步就是要開啟外設時...

stm32關定時器 STM32定時器TIM3程式

include led.h include delay.h include key.h include sys.h include usart.h include timer.h stm32開發板實驗8 定時器中斷實驗 int main void delay init 延時函式初始化 nvic co...

stm32的定時器

stm32一共有8個都為16位的定時器。其中tim6 tim7是基本定時器 tim2 tim3 tim4 tim5是通用定時器 tim1和tim8是高階定時器。1.基本定時器 基本定時器tim6和tim7只具備最基本的定時功能,就是累加的時鐘脈衝數超過預定值時,能觸發中斷或觸發dma請求。由於在晶元...