引言
華芯微特公司SWM系列單片機提供的TIMER個數和功能有些微差別,為了讓您更加簡單的使用這一功能,下面小編將以SWM190為例,給大家展示如何使用SWM系列產品的TIMER功能。
TIMER精準延時
一、TIMER簡介
TIMER是一種定時器工具,用來在一個后臺線程計劃執行指定任務。它可以計劃執行一個任務一次或反復多次。
華芯微特公司SWM系列單片機提供的TIMER個數和功能有些微差別,為了讓您更加簡單的使用這一功能,下面小編將以SWM190為例,給大家展示如何使用SWM系列產品的TIMER功能。
SWM190系列有4路32位加強定時器,4路24位基礎定時器。加強型定時器支持支持定時器、計數器、捕獲、脈沖發送、HALL功能及ADC觸發功能等功能。基礎定時器具備定時器功能,并具備一個8位分頻器,每個定時器具備獨立中斷源。
二、TIMER定時器之精準延時功能
我們今天詳細講解一下TIMER的定時器功能。
定時器功能使用片內時鐘作為計數基準,以SWM190加強型定時器為例,有4個32 bit向下計數的TIMER,脈沖每一次下降沿,計數寄存器數值將減1。
每一個TIMER都可以配置定時器溢出中斷。使能溢出中斷,定時器溢出會觸發中斷操作,達到精準定時功能。
三、SWM190 TIMER延時功能配置庫函數
下面我們以最簡單的定時器為例,使用加強型定時器和基礎定時器,用定時器的方法實現1S的精準延時。在此例程中,我們將A4設為每2秒翻轉一次IO,A5設為每0.5秒翻轉一次IO,通過翻轉LED的狀態來觀察現象。
我們之前有講到GPIO的配置方法,在這里就不在做贅述,將LED輸出引腳通過GPIO_Init設置為輸出,與外部LED引腳相連。
在SWM190固件庫中對TIMER的配置進行了說明,下面將根據庫函數對SWM190的TIMER配置,首先來看一下TIMR_Init函數的原型void TIMR_Init(TIMR_TypeDef * TIMRx, uint32_t mode, uint32_t prediv, uint32_t period, uint32_t int_en)。這個函數的實現是在SWM190_timr.c文件中,若要使用該函數在相應的應用程序的前面包含SWM190_ timr.h頭文件。
函數的第一個參數為TIMR_TypeDe,它是一個結構體類型,該類型在SWM190.h中被定義。具體參數為指定TIMER模塊,有效值包括TIMR0,TIMR1,TIMR2,TIMR3,BTIMR0,BTIMR1,BTIMR2,BTIMR3;
第二個參數為uint32_t mode,為TIMER模式配置,有效值包括TIMR_MODE_TIMER(定時器)、TIMR_MODE_COUNTER(計數器上升沿)、TIMR_MODE_OC(輸出比較)、TIMR_MODE_IC(輸入捕獲);其中基礎定時器只支持TIMR_MODE_TIMER(定時器);
第三個參數為uint32_t prediv,為TIMER分頻配置,其中加強型定時器無分頻只能為1;基本定時器可取值1-256;
第四個參數為uint32_t period,為計數周期,其中加強型定時器為32bit,基礎定時器為24bit。
第五個參數為uint32_t int_en,為中斷使能。
我們加強型定時器實現0.1S觸發一次,2S實現LED燈的翻轉;基礎定時器實現0.5S實現LED燈的翻轉。
具體配置函數如下圖所示:
接下來我們看下中斷服務子函數,在加強型定時器的中斷服務函數中,實現每0.1S進一次中斷。定義一個全局變量TimerNum,每當進一次中斷的時候,讓TimerNum來記錄進入中斷的次數。我們實現2S的定時,我們只需要判斷TimerNum是否等于20,然后把TimerNum清0,執行對應的操作并重新計數,以此循環往復。
在基礎定時器的中斷服務函數中,實現每0.5S進行LED燈的一次翻轉。
四、實驗現象
下載好程序后,LED實現分別2S翻轉一次和0.5s翻轉一次。
責任編輯:lq6
-
定時器
+關注
關注
23文章
3254瀏覽量
115070 -
Timer
+關注
關注
1文章
64瀏覽量
12800
原文標題:華芯微特|MCU之TIMER精準延時
文章出處:【微信號:gh_ed4f95bde4df,微信公眾號:華芯微特32位MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論