外部中斷實驗

2021-09-24 11:58:56 字數 3593 閱讀 3373

crotex-m3 核心支援 256 個中斷,其中包含了 16 個核心中斷和 240 個外部中斷。

stm32f10x 晶元有 84 個中斷通道,包括 16 個核心中斷和 68 個可遮蔽中斷,對於stm32f103系列晶元只有60個可遮蔽中斷,參考《stm32f10x 中文參考手冊》-9 中斷和事件章節。

nvic (nested vectored interupt controler) :巢狀向量中斷控制器。

stm32f103 晶元支援 60 個可遮蔽中斷通道,每個中斷通道都具備自己的中斷優先順序控制位元組(8 位,理論上每個外部中斷優先順序可以設定為0-25,數值越小,優先順序越高。但是 stm32f103 中只使用 4 位,高 4 位有效),

用於表達優先順序的高 4 位又被分組成搶占式優先順序響應優先順序(亞優先順序」或「副優先順序),每個中斷源都需要被指定這兩種優先順序。

在搶占式優先順序相同的情況下,高響應優先順序的中斷優先被響應

當兩個中斷源的搶占式優先順序相同時,這兩個中斷將沒有巢狀關係,當乙個中斷到來後,如果正在處理另乙個中斷,這個後到的中斷就要等到前乙個中斷處理完之後才能被處理。

如果這兩個中斷同時到達,則中斷控制器根據他們的響應優先順序高低來決定先處理哪乙個。

如果他們的搶占式優先順序和響應優先順序都相等,則根據他們在中斷表中的排位順序決定先處理那乙個,越靠前的先執行。

有關nvic 中斷相關的庫函式都在庫檔案 misc. 和 misc.h 中。

stm32f103 中指定中斷優先順序的暫存器位有 4 位,這 4 位的分組方式如下5種,設定優先順序分組可呼叫庫函式 nvic_prioritygroupconfig()實現。

gpiox.0-gpiox.15(x=a,bc,de,f,g)分別對應中斷線 exti0-exti15,這樣一來每個中斷線就對應了最多 7 個 io 口,比如:gpioa.0、gpiob.0、gpioc.0、gpiod.0、gpioe.0、gpiof.0、gpiog.0。

標號 1 為輸入線,exti 控制器有 20 個中斷/事件輸入線,輸入線一般是存在電平變化的訊號。

標號2邊沿檢測電路,對觸發方式(上公升沿觸發下降沿觸發)進行選擇,通過上公升沿觸發選擇暫存器和下降沿觸發選擇暫存器 。可以是只有上公升沿觸發、只有下降沿觸發、上公升沿和下降沿都觸發

標號3是乙個或閘電路,只要有乙個為有效訊號 1, 則輸出有效訊號 1,

標號4是乙個與閘電路,只有當兩者都為有效訊號 1,才會輸出有效訊號 1,

標號5將掛起暫存器內容輸入到 nvic 內,實現系統中斷事件的控制。

標號6是乙個與閘電路,只有兩者都為有效電平 1,標號 6 輸出才有效,

標號7脈衝發生器電路,標號 6 輸出有效,脈衝發生器輸出乙個脈衝訊號。

標號8脈衝訊號,通常用來觸發定時器、adc 等開始轉換。

小結

中斷線路:最終會輸入到nvic 控制器中,執行中斷服務函式,實現中斷內功能。

事件線路:最後產生的脈衝訊號流向其他的外設電路

exti 外設介面時鐘是由 pclk2,即apb2 提供

exti.c

#include

"exti.h"

#include

"led.h"

#include

"systick.h"

#include

"key.h"

void

my_exti_init

(void

)//外部中斷初始化函式

//中斷線 0(exti_line0)被配置為上公升沿觸發,中斷線 2-4 被配置為下降沿觸發,這是因為我們的按鍵 k_up 是高電平有效,而其他 3 個按鍵是低電平有效

```c

void

exti0_irqhandler

(void

)//外部中斷0函式:pa0管腳對應的中斷線是exti0

}exti_clearitpendingbit

(exti_line0)

;//在結束中斷服務函式前,我們還會清除中斷標誌位

}//判斷外部中斷狀態以及清除外部狀態標誌位的函式 exti_getflagstaus 和 exti_clearflag,在 exti_getitstaus 函式中會先判斷這種中斷是否使能,使能了才去判斷中斷標誌位,而 exti_getflagstaus 直接用來判斷狀態標誌位。

void

exti3_irqhandler

(void

)//外部中斷3函式

}exti_clearitpendingbit

(exti_line3);}

void

exti2_irqhandler

(void)}

exti_clearitpendingbit

(exti_line2);}

void

exti4_irqhandler

(void

)//外部中斷4函式

}exti_clearitpendingbit

(exti_line4)

;}

exit.h

#ifndef _exti_h

#define _exti_h

#include

"system.h"

void

my_exti_init

(void);

#endif

主函式

#include

"system.h"

#include

"systick.h"

#include

"led.h"

#include

"key.h"

#include

"exti.h"

intmain()

delay_ms(10

);}}

外部中斷實驗

需要新增的韌體庫檔案有 misc.c stm32f4xx exti.c stm32f4xx gpio.c stm32f4xx rcc.c stm32f4xx syscfg.c 五個。1 使能 io 口時鐘,初始化 io 口為輸入 首先,我們要使用 io 口作為中斷輸入,所以我們要使能相應的 io 口...

外部中斷實驗

外部中斷概述 1 stm32的每個io都可以作為外部中斷輸入。2 stm32的中斷控制器支援19個外部中斷 事件請求 思考 stm32供io使用的中斷線只有16個,但是stm32f10x系列的io口多達上百個,stm32f103zet6 112 stm32f103rct6 51 那麼中斷線怎麼跟io...

外部中斷與定時器中斷實驗

已知微控制器晶振頻率為12mhz,自行選取定時 計數器,定時 計數器工作方式自選,編寫程式,使p1.7端輸出週期為0.5ms方波。解題思路 假設方波訊號的占空比為50 已知條件可以得,機器週期為1us,所以決定採用t0定時,工作方式0,已知輸出週期為0.5ms,則每定時0.25ms計數使p1.7輸出...