STM32 定時器中斷學習筆記

2021-08-17 10:48:15 字數 1990 閱讀 6657

在stm32中,定時器相關的庫函式主要集中在韌體庫檔案 stm32f10x_tim.h 和 stm32f10x_tim.c 檔案中,所以在進行定時器方面的處理時,需要載入這兩個檔案進來。

在進行定時器操作時,一般按如下步驟來進行:

1、開啟相關外設的時鐘。

以定時器tim3為例,由stm32的時鐘樹可以看到,tim3時鐘掛接在apb1上面,所以開啟tim3時鐘時使用rcc_apb1periphclockcmd(rcc_apb1periph_tim3,enable),如果其中還使用到了其他外設,如gpio等,再開啟相關的外設時鐘就可以了。

2、清除中斷掛起位。

由於各種不可知的因素作用,在程式執行前要操作的定時器的中斷掛起位有可能會被置位,這樣就會導致在程式一開始就會進入定時器中斷的中斷服務程式。為了消除這種影響,我們在程式的一開始就將中斷掛起位清除。

在韌體庫中使用:

void tim_clearitpendingbit(tim_typedef*timx, u16 tim_it)

來清除中斷掛起位,該函式的具體使用參考韌體庫手冊。

3、定時器基本配置初始化。

在這一步驟中主要確定定時器的預分頻和設定自動重裝載暫存器週期的值,並確定計數模式,這主要使用韌體庫中的 tim_timebaseinit()函式進行操作,該函式的原型為:

void tim_timebaseinit(tim_typedef* timx,tim_timebaseinittypedef* tim_timebaseinitstruct)

第乙個輸入引數沒啥說的,就是使用的哪個定時器。

typedef struct  

tim_timebaseinittypedef;

4、使能定時器timx。

這個簡單,直接函式tim_cmd()函式就可以了,比如使能定時器tim3外設,則可用tim_cmd(tim3,enable)。

5、使能timx中斷。

呼叫函式即可。因為我們要使用 tim3 的更新中斷, 暫存器的相應位便可使能更新中斷。 在庫函式裡面定時器中斷使能是通過 tim_itconfig 函式來實現的:

void tim_itconfig(tim_typedef* timx, uint16_t tim_it, functionalstate newstate);

第乙個引數是選擇定時器號,這個容易理解,取值為 tim1~tim17。

第二個引數非常關鍵,是用來指明我們使能的定時器中斷的型別,定時器中斷的。

型別有很多種,包括更新中斷 tim_it_update,觸發中斷 tim_it_trigger,以及輸入捕獲中斷等等。

第三個引數就很簡單了, 就是失能還是使能。

例如我們要使能 tim3 的更新中斷,格式為:tim_itconfig(tim3,tim_it_update,enable );

6、配置中斷優先順序。

也就是配置巢狀向量終端控制器nvic。進行本步驟首先需要配置優先順序的分組,可以使用庫函式nvic_prioritygroupconfig()進行,分組的編號就是搶占優先順序的位數,然後再配置nvic初始化,使用函式nvic_init()進行,這個函式的原型為void nvic_init(nvic_inittypedef* nvic_initstruct),其中輸入引數的結構體的定義如下:

typedef struct  

nvic_inittypedef;

7、編寫中斷服務程式。在這裡,我們首先要清除中斷掛起位,該函式同第2步中,自不必贅述,接著再編寫中斷處理內容即可。

完整的定時器中斷初始化程式如下,該程式為普中科技所配的光碟中的定時器中斷中的內容。

void timeinit()  

STM32定時器中斷

本實驗的目的是通過定時器中斷控制led燈的亮滅。筆者所用ide為iar,採用標準庫 3.5韌體庫 通過定時器產生中斷來控制led。ifndef led h define led h include stm32f10x gpio.h include stm32f10x.h include stm32f...

stm32 定時器中斷

stm32f1的定時器非常多,由2個基本定時器 tim6 tim7 4個通用定時器 tim2 tim5 和2個高階定時器 tim1 tim8 組成。基本定時器的功能最為簡單,類似於51微控制器內定時器。通用定時器是在基本定時器的基礎上擴充套件而來,增加了輸入捕獲與輸出比較等功能。高階定時器又是在通用...

stm32 定時器中斷實驗

led.h ifndef led h define led h include sys.h void led init void define led0 pbout 5 紅燈 define led1 peout 5 綠燈 endif led.c include led.h include stm32...