stm32學習筆記(四)外部中斷

2021-08-06 04:02:51 字數 2611 閱讀 3010

#include "exti.h"

#include "led.h"

#include "key.h"

#include "delay.h"

#include "usart.h"

//

//本程式只供學習使用,未經作者許可,不得用於其它任何用途

//mini stm32開發板

//外部中斷 驅動**

//正點原子@alientek

//技術論壇:www.openedv.com

//修改日期:2010/12/01

//版本:v1.0

//

//外部中斷初始化函式

void extix_init(void)

void exti0_irqhandler(void)

exti_clearitpendingbit(exti_line0); //清除exti0線路掛起位

} void exti9_5_irqhandler(void)

exti_clearitpendingbit(exti_line5); //清除line5上的中斷標誌位

}void exti15_10_irqhandler(void)

exti_clearitpendingbit(exti_line15); //清除line15線路掛起位

}

stm32中,每乙個gpio都可以觸發乙個外部中斷,但是,gpio的中斷是以組位乙個單位的,同組間的外部中斷同一時間只能使用乙個。比如說,pa0,pb0,pc0,pd0,pe0,pf0,pg0這些為1組,如果我們使用pa0作為外部中斷源,那麼別的就不能夠再使用了,在此情況下,我們智慧型使用類似於pb1,pc2這種末端序號不同的外部中斷源。每一組使用乙個中斷標誌extix。exti0 – exti4這5個外部中斷有著自己的單獨的中斷響應函式,exti5-9共用乙個中斷響應函式,exti10-15共用乙個中斷響應函式。

exti_inittypedef exti_initstructure;

nvic_inittypedef nvic_initstructure;

rcc_apb2periphclockcmd(rcc_apb2periph_afio,enable);//外部中斷,需要使能afio時鐘

key_init();//初始化按鍵對應io模式

中斷線以及中斷初始化配置

gpio_extilineconfig(gpio_portsourcegpioc,gpio_pinsource5);

exti_initstructure.exti_line=exti_line5;

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暫存器

s tm32中斷控制器支援20個外部中斷/事件請求:    線0-15:外部io口輸入中斷

線16:連線到pvd輸出

線17:連線到rtc鬧鐘事件

線18:連線到usb喚醒事件

線19:ethernet wakeup event

中斷模式 typedef enum

extimode_typedef;

中斷觸發型別

typedef enum

extitrigger_typedef;

nvic_initstructure.nvic_irqchannel = exti0_irqn;			//使能按鍵所在的外部中斷通道0-4有單獨的中斷服務函式

nvic_initstructure.nvic_irqchannelpreemptionpriority = 0x02; //搶占優先順序2

nvic_initstructure.nvic_irqchannelsubpriority = 0x02; //子優先順序1

nvic_initstructure.nvic_irqchannelcmd = enable; //使能外部中斷通道

nvic_init(&nvic_initstructure); //根據nvic_initstruct中指定的引數初始化外設nvic暫存器

中斷服務函式

exti0 – exti4這5個外部中斷有著自己的單獨的中斷響應函式,exti5-9共用乙個中斷響應函式,exti10-15共用乙個中斷響應函式。

搶占優先順序和響應優先順序

stm32 的中斷向量具有兩個屬性,乙個為搶占屬性,另乙個為響應屬性,

其屬性編號越小,表明它的優先級別越高。

當兩個中斷同時到來,先響應搶占優先順序搞得中斷。

當兩個中斷搶占優先順序一樣,先進入響應優先順序高的中斷。

exti_clearitpendingbit(exti_line5)

中斷函式響應完中斷之後,要清除中斷線路掛起位

STM32學習 外部中斷

先聊聊題外話,學習stm32,我大多從了解功能 框圖到暫存器定義,然後在使用方法 配置步驟。其實配置時使用庫函式是相當方便的,甚至可以不用看暫存器,但為深入了解一下,有時還是會多看看,而了解其方法脈絡後再使用庫函式更方便,只需查相應的庫函式手冊即可。stm32的外部中斷資源豐富 使用靈活。在f1系統...

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...