STM32F4 生成定時器中斷 標準庫代碼示例

使用STM32F4生成定時器中斷

在嵌入式系統(tǒng)中翰萨,定時器中斷是一種常用的技術手段脏答。本教程將使用STM32F407.初學者建議先閱讀STM32F4的入門教程。

準備工作

  1. 安裝Keil MDK-ARM開發(fā)環(huán)境
  2. 準備STM32F4開發(fā)板

原理描述

在STM32F4系列微控制器中亩鬼,有多個定時器可供使用殖告,包括 基本定時器 和 通用定時器 以及 高級定時器 ■ǚ妫基本定時器只能產(chǎn)生更新事件中斷黄绩,而通用定時器則可以配置為產(chǎn)生不同類型的定時器中斷,例如更新事件中斷玷过、捕獲比較中斷和PWM輸出中斷等爽丹。
本例將使用STM32F4的定時器2,它是一個通用定時器辛蚊。

要產(chǎn)生定時器中斷粤蝎,首先需要對定時器進行初始化設置。具體來說嚼隘,需要啟用定時器2的時鐘诽里,并將計數(shù)器清零。然后飞蛹,設置定時器2的預分頻器和自動重載寄存器的值,以便在每個定時周期產(chǎn)生一個中斷灸眼。最后在NVIC中使能定時器2的中斷卧檐,并配置中斷優(yōu)先級。

一旦定時器2初始化完成焰宣,就可以進入主循環(huán)。在主循環(huán)中,程序只需不斷循環(huán)即可键畴,不需要做其他的處理。當定時器2的計數(shù)器計數(shù)到自動重載寄存器的值時榜跌,定時器2會產(chǎn)生一個更新事件中斷,并跳轉到中斷服務程序中執(zhí)行盅粪。在中斷服務程序中可以編寫相應的代碼钓葫,以處理定時器中斷,中斷處理函數(shù)中代碼不應過長票顾,否則會在中斷函數(shù)尚未結束時觸發(fā)中斷础浮。

名詞解釋

  • 定時器計數(shù)器 (Timer Counter Register):用于存儲定時器的計數(shù)值。
  • 自動重載寄存器 (Auto-reload Register):也稱為定時器重載值寄存器 (Timer Reload Value Register)奠骄,用于存儲定時器的重載值豆同。
  • NVIC (Nested Vectored Interrupt Controller):即嵌套向量中斷控制器,用--于管理STM32F4微控制器的中斷含鳞。
  • 中斷服務程序 (Interrupt Service Routine, ISR):也稱為中斷處理函數(shù) (Interrupt Handler)影锈,用于處理發(fā)生的中斷事件。
  • 中斷控制器 (Interrupt Controller):用于控制中斷信號的傳輸和管理蝉绷。在STM32F4微控制器中精居,中斷控制器包括NVIC和外部中斷控制器 (EXTI)潜必。
  • 中斷優(yōu)先級 (Interrupt Priority):指中斷處理的優(yōu)先級,由NVIC中的優(yōu)先級寄存器進行控制和配置磁滚。在STM32F4微控制器中,優(yōu)先級范圍從0到15维雇,數(shù)值越小的中斷優(yōu)先級越高。

代碼示例

示例代碼如下:

#include "stm32f4xx.h"

void TIM2_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
  {
    // 定時器2中斷代碼在這里
    // ...
    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
  }
}

void Timer2_Configuration(void)
{
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  NVIC_InitTypeDef NVIC_InitStructure;

  // 啟用TIM2全局中斷
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  // 配置TIM2外設
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  TIM_TimeBaseStructure.TIM_Period = 50000;  // 50ms
  TIM_TimeBaseStructure.TIM_Prescaler = 84-1; // 1MHz
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  // 啟用TIM2中斷
  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);

  // 啟動TIM2
  TIM_Cmd(TIM2, ENABLE);
}



int main(void)
{
  Timer2_Configuration();

  while(1)
  {
    // 主循環(huán)代碼
    // ...
  }
}

注意事項

  1. 在使用定時器中斷時吱型,注意定時器的時鐘源和時鐘分頻器的配置津滞。如果定時器時鐘源或分頻器配置不正確,可能導致定時器計數(shù)器計數(shù)不準確或中斷觸發(fā)不正確触徐。

  2. 在使用NVIC進行中斷控制時狐赡,注意優(yōu)先級的配置。在STM32F4微控制器中,中斷優(yōu)先級的數(shù)值越小享郊,優(yōu)先級越高孝鹊。確保不同中斷的優(yōu)先級不會導致中斷嵌套或阻塞。

  3. 在編寫中斷服務程序時惶室,請遵循如保護現(xiàn)場、清除中斷標志悼泌、適當?shù)闹袛嗵幚砗突謴同F(xiàn)場等基本規(guī)則夹界,初學者可不必注意。

總結

本教程學習了如何使用STM32F4生成定時器中斷可柿,介紹了定時器中斷的基礎知識,并詳細介紹了如何在STM32F4微控制器中使用定時器中斷营密。

希望本教程對您有所幫助目锭。如果您對本教程有任何疑問或反饋,請在評論區(qū)留言痢虹。感謝您的閱讀!

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惨缆,一起剝皮案震驚了整個濱河市丰捷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瓢阴,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叠穆,居然都是意外死亡,警方通過查閱死者的電腦和手機硼被,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門嚷硫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仔掸,你說我怎么就攤上這事∑鹉海” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵筒捺,是天一觀的道長纸厉。 經(jīng)常有香客問我,道長肯尺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任蟆盹,我火速辦了婚禮闺金,結果婚禮上,老公的妹妹穿的比我還像新娘寨昙。我一直安慰自己,他們只是感情好舔哪,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布捉蚤。 她就那樣靜靜地躺著抬驴,像睡著了一般缆巧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上题暖,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天捉超,我揣著相機與錄音,去河邊找鬼拼岳。 笑死,一個胖子當著我的面吹牛侧啼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播痊乾,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼哪审,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了湿滓?” 一聲冷哼從身側響起舌狗,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朝氓,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赵哲,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡君丁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了橡庞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡毙死,死狀恐怖喻鳄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情除呵,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布纠拔,位于F島的核電站,受9級特大地震影響稠诲,放射性物質發(fā)生泄漏。R本人自食惡果不足惜臀叙,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一价卤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慎璧,春花似錦、人聲如沸胸私。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽五续。三九已至,卻和暖如春疙驾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背它碎。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工显押, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留傻挂,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓兽肤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親资铡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容