定時器分為硬件定時器和軟件定時器,幾乎所有的微控制器上都配備了數量有限的硬件定時器,即控制器本身有專門實現定時的模塊。幾乎所有的硬件定時器的工作原理都是一樣的:定時器在外部時鐘提供的周期脈沖下進行計數工作,當計數到用戶指定的次數時,就產生一次中斷。這個過程完全由微控制器內部的定時器硬件電路實現,不需要 CPU 干預。
相比之下,軟件定時器則需要 CPU 的介入來實現了。實現軟件定時器一般有兩種方法:一種是純粹依賴 CPU 指令的堆積來實現;另一種是以硬件定時器產生的時間片為基準單位,CPU 基于這個基準單位進行累積來實現。
顯然,硬件定時器的精度取決于驅動的時鐘脈沖,一般情況下可以達到很高的精度(納秒級),而軟件定時器的實現由于引入了非硬件因素,精度必然有所下降。
在嵌入式應用中,經常使用定時器進行定時,當定時時間到達之后執行預定的操作。一個具體的嵌入式系統可能有幾個甚至數十個定時應用,而這些應用對定時器的精度、最大周期等要求往往都是不同的。比如使用定時器產生一個準確頻率的方波是對定時精度比較高的應用,而使用定時器定時翻轉一個用戶指示燈以表示當前設備的工作狀態,則對定時器精度的要求大為下降,這時如果啟用硬件定時器無疑是一種資源的浪費。所以,在一個具體的嵌入式系統中,硬件定時器和軟件定時器配合使用,是提高性能和降低成本的有效方法。
那么,在 STM32 中如何利用一個硬件定時器構建多個軟件定時器呢?
我們來分析軟件定時器的基本需求:在嵌入式應用中,對定時器的使用模式一般是“定時時間到達后執行預定的操作”。所以需要解決如下一些問題:
1、 定時多久?——定時時間必須是可配置修改的;
2、 定時時間到達后做什么?——需要指定執行函數;
3、 定時器如何工作?——可以選擇單次執行或循環執行。
具體實現如下:
【頭文件 softtimer.h】
#ifndef __SOFT_TIMER_H__
#define __SOFT_TIMER_H__
#include "stm32f10x.h"
/* 單次執行 */
#define TIMER_ONESHOT 0
/* 循環執行 */
#define TIMER_PERIOD 1
/* 軟件定時器結構體信息塊 */
typedef struct __TIMER
{
u32 Timeoutcnt; // 表示定時器軟件計數變量
u32 Timeout; // 表示定時器單次定時周期
void (*Timeoutfunc)(void *parameter); // 定時到達后的執行函數
void *Parameter; // 執行函數的參數
u8 Timerflag; // 表示定時器處于單次執行模式還是循環執行模式
}Timer_typedef;
extern Timer_typedef TimerList[10];
/* 初始化軟件定時器 */
extern void TIMER_TimerInitialisation(void);
/* 啟動一個軟件定時器 */
extern void \
TIMER_TimerStart(u8 TimerIdent, \
u32 Timeout, \
void (*Timeoutfunc)(void *parameter), \
void *parameter, \
u8 flag);
/* 用于判斷定時時間是否到達,并執行對應函數 */
extern void TIMER_Execute(void);
#endif
上一篇:STM32系列修改外部晶振以及代碼的修改
下一篇:STM32庫函數EXTI_GetFlagStatus和EXTI_GetITStatus的區別
推薦閱讀
史海拾趣
Avalon Photonics深知技術創新是公司發展的核心動力。因此,公司每年都將大量資金投入研發領域,不斷推動技術創新。公司研發團隊積極探索新技術、新材料,在光子學領域取得了多項重要突破。這些技術創新不僅提升了Avalon產品的競爭力,也為公司在市場上贏得了良好的聲譽。
Dresden Elektronik公司始終將產品質量放在首位。他們建立了嚴格的質量管理體系,從原材料采購到生產、檢測、包裝等各個環節都嚴格把關。這種對品質的執著追求使公司的產品在市場上贏得了良好的口碑,也為公司贏得了眾多忠實的客戶。
在技術和產品的雙重驅動下,Dresden Elektronik公司開始積極拓展市場。他們不僅在國內市場上取得了顯著的成績,還積極開拓國際市場。通過參加國際展會、與跨國企業合作等方式,公司的知名度和影響力逐漸提升,市場份額也不斷擴大。
Dresden Elektronik公司始終將產品質量放在首位。他們建立了嚴格的質量管理體系,從原材料采購到生產、檢測、包裝等各個環節都嚴格把關。這種對品質的執著追求使公司的產品在市場上贏得了良好的口碑,也為公司贏得了眾多忠實的客戶。
AXTAL公司誕生于2003年,是由物理學家兼電子工程師Bernd Neubig創立的。Bernd Neubig從之前的TELEQUARZ公司分離出來,帶著豐富的石英晶體行業經驗和對未來技術的獨到見解,創立了AXTAL。公司的員工團隊擁有超過80年的石英晶體行業累積經驗和專業知識,為公司的起步奠定了堅實的基礎。
隨著業務的不斷發展,AXTAL公司開始在全球范圍內進行布局和擴展。公司的設施位于德國南部的“水晶谷”地區,靠近海德堡。這一地區以其豐富的石英資源和技術優勢而聞名,為AXTAL提供了得天獨厚的條件。此外,公司還積極拓展海外市場,與全球多家知名企業建立了緊密的合作關系,進一步提升了公司的國際影響力。
在芯片的生產過程中,會經歷許多次的摻雜、增層、光刻和熱處理等工藝制程,每一步都必須達到極其苛刻的物理特性要求。但是,即使是最成熟的工藝制程也存在不同位置之間、不同晶圓之間、不同工藝運行之間以及不同時段之間的變異。有時,這種變異會使 ...… 查看全部問答∨ |
|
這兩天在6410平臺上調OV3640,一直出不來,納悶死了,WINCE6.0,用三星官方BSP里的camera移過來的,能確保驅動這邊沒有問題,因為原來調一個30W像素的已OK的, 我現在驅動接口format是:YCbCr422 , ITU-601,MCLK=24MHZ,size:1024x768(現在我叫FAE給 ...… 查看全部問答∨ |
在窗口上加了一個edit控件id為IDC_EDIT1, 然后又加了一個按鈕id為ID_CHECK, 設想是點擊按鈕check,就彈出messagebox顯示edit的內容, 請問我的代碼怎么錯了, ...… 查看全部問答∨ |
我們的設備在進行通訊一段時間后PC端就不能收到數據,但是還能發送數據.不知道為什么,后來就想辦法解決它,測試一段時間后,發現對它進行電磁干擾.就會出現這種情況.單片機是沒有死的,因為我們測試過,.并且PC端還能發送指令,單片機還接收指令并處理.&n ...… 查看全部問答∨ |
1.新建工程:file->new->project 2.新建文件: 3.編譯文件:compile->all 4.仿真:simulation->start simulation: 在彈出的對話框中選中work ->相應文件->behavorial,再OK 5.View->wave 6.加入信號 7.在wave ...… 查看全部問答∨ |
如題,可否加載?如何加載? 其實我想做的就是將一個固定算法模塊做成庫文件,然后在ccs工程中加載這個庫。目前是使用了VS2005來生成靜態lib文件,但不知如何加載。求助高手。… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 答題贏好禮|平穩控制與位置服務中至關重要的 ADI MEMS IMU
- 看視頻贏京東卡 | 泰享實測之水哥秘籍第二期
- TI 金剛狼 LaunchPad系列課程,搶開發板&精美好禮!
- 關注有禮 | 泰克中端示波器增“重”計劃
- 【已結束】直播|Microchip MPU解決方案及典型應用
- 齊分享,月月有獎第25期活動華麗升級來襲
- TTI&TE直播:傳感器在工業電機里的發展及最新應用
- 安世半導體&世平集團 高效能&小型化, Nexperia MOSFET的5G解決方案 觀看、下載 闖關贏好禮!
- 想要Get更好的服務?TE人工客服說:“我可以”
- 聽技術大咖侃談Type-C 測量那些事兒—— 即刻獲取能量,輕松闖關贏禮品!