STM32外部中斷

2021-08-21 08:00:20 字數 1572 閱讀 4331

gpio 的管腳 gpiox.0~gpiox.15(x=a,b,c,d,e,f,g)分別對應中斷線 15~0。以線 0 為例:它對應了 gpioa.0、gpiob.0、gpioc.0、gpiod.0、gpioe.0、gpiof.0、gpiog.0。而中斷線每次只能連線到 1 個 io 口上,這樣就需要通過配置來決定對應的中斷線配置到哪個 gpio 上了。gpio 跟中斷線的對映關係圖:

rcc_apb2periphclockcmd(rcc_apb2periph_afio,enable);  //外部中斷需要開啟afio

1、配置 gpio 與中斷線的對映關係的函式 gpio_extilineconfig()來實現的: 

void gpio_extilineconfig(uint8_t gpio_portsource, uint8_t gpio_pinsource)
該函式將 gpio 埠與中斷線對映起來,使用範例是: 

gpio_extilineconfig(gpio_portsourcegpioe,gpio_pinsource2);
2、將中斷線 2 與 gpioe 對映起來,那麼很顯然是 gpioe.2 與 exti2 中斷線連線了。設定好中斷 線對映之後,那麼到底來自這個 io 口的中斷是通過什麼方式觸發的呢?接下來我們就要設定該中斷線上中斷的初始化引數了。 

中斷線上中斷的初始化是通過函式 exti_init()實現的。exti_init()函式的定義是:

void exti_init(exti_inittypedef* exti_initstruct);
範例使用: 

exti_inittypedef exti_initstructure; 

exti_initstructure.exti_line=exti_line4;

exti_initstructure.exti_mode = exti_mode_interrupt;

exti_initstructure.exti_trigger = exti_trigger_falling;

exti_initstructure.exti_linecmd = enable;

exti_init(&exti_initstructure); //根據 exti_initstruct 中指定的

//引數初始化外設 exti 暫存器

上面的例子設定中斷線 4 上的中斷為下降沿觸發。

3、進行中斷管理

4、判斷某個中斷線上的中斷是否發生(標誌位是否置位): 

itstatus exti_getitstatus(uint32_t exti_line); 

這個函式一般使用在中斷服務函式的開頭判斷中斷是否發生。

另乙個函式是清除某個中斷線上的中斷標誌位: 

void exti_clearitpendingbit(uint32_t exti_line); 

這個函式一般應用在中斷服務函式結束之前,清除中斷標誌位。

STM32外部中斷

一 基本概念 arm coetex m3核心共支援256個中斷,其中16個內部中斷,240個外部中斷和可程式設計的256級中斷優先順序的設定。stm32目前支援的中斷共84個 16個內部 68個外部 還有16級可程式設計的中斷優先順序的設定,僅使用中斷優先順序設定8bit中的高4位。stm32可支援...

stm32外部中斷

外部中斷程式配置流程 rcc 時鐘配置 void rcc configuration void 時鐘配置 開啟各路時鐘 rcc apb2periphclockcmd rcc apb2periph usart1 rcc apb2periph gpioa rcc apb2periph afio,enab...

stm32外部中斷

好久沒玩微控制器了,最近閒著沒事想拿出來玩玩,沒想到乙個stm32的外部中斷讓我花費了兩天時間,好的的挫折啊!終於下午除錯成功,下面來說一下我的除錯之路吧!硬體就是兩個按鍵,四個led,led事共陽極接法,按鍵一端接地一端接gpio口,通過按鍵中斷控制led。程式寫好以後發現始終無法進入中斷,開始查...