stm32外部中斷

2021-06-26 06:45:24 字數 2925 閱讀 4284

外部中斷程式配置流程

//rcc

時鐘配置

void rcc_configuration(void)

/*時鐘配置*/

//開啟各路時鐘

rcc_apb2periphclockcmd(rcc_apb2periph_usart1|rcc_apb2periph_gpioa|rcc_apb2periph_afio, enable);

}// rcc_apb2periph_afio

為復用功能時鐘開啟,基本上都要開啟,比如埠作為輸入

/ad/txrx

等均屬於復用功能

//gpio配置

void gpio_configuration(void)

/*定義gpio初始化結構體 gpio_initstructure */

gpio_inittypedef gpio_initstructure;

/* 設定pa.0,pa.1,pa.2為上拉輸入(extiline0)*/

gpio_initstructure.gpio_pin = gpio_pin_0 |gpio_pin_1 | gpio_pin_2;

gpio_initstructure.gpio_mode =gpio_mode_in_floating;

gpio_init(gpioa , &gpio_initstructure);

/*設定 usart1 的tx腳(pa.9)為第二功能推挽輸出功能 */

gpio_initstructure.gpio_pin = gpio_pin_9;

gpio_initstructure.gpio_mode =gpio_mode_af_pp;

gpio_initstructure.gpio_speed =gpio_speed_50mhz;

gpio_init(gpioa , &gpio_initstructure);

/* 設定 usart1 的rx腳(pa.10)為浮空輸入腳 */

gpio_initstructure.gpio_pin = gpio_pin_10;

gpio_initstructure.gpio_mode =gpio_mode_in_floating;

gpio_init(gpioa , &gpio_initstructure);

外部中斷配置

void exit_configuration(void)

//總結:從外到內 1

要確定哪個引腳作為外部中斷輸入eg:

gpioa的第0

個引腳

2確定了引腳之後,對應開啟中斷線。讓引腳和中斷線連線上 3

設定上公升沿、下降沿、還是上下公升沿觸發 4

設定中斷模式:為事件還是中斷掛起 5

使能該中斷 6

初始化上述配置

// 定義exit初始化結構體exti_initstructure

exti_inittypedefexti_initstructure;

// 定義pa.0為外部中斷0輸入通道(exit0)

gpio_extilineconfig(gpio_portsourcegpioa, gpio_pinsource0);

// 定義pa.1為外部中斷1輸入通道(exit1)

gpio_extilineconfig(gpio_portsourcegpioa, gpio_pinsource1);

// 定義pa.2為外部中斷2輸入通道(exit2)

gpio_extilineconfig(gpio_portsourcegpioa, gpio_pinsource2);

//選擇外部中斷的通道 共有exti_line0到exti_line18(0-15 16rtc17pvd 18usb)

//比如:這裡選擇了3個通道

exti_initstructure.exti_line = exti_line0 |exti_line1 | exti_line2;

///這裡設定exti中斷模式 :2種---事件中斷和中斷掛起

exti_initstructure.exti_mode =exti_mode_interrupt;

//選擇中斷觸發方式3種:下降沿觸發、上公升沿觸發、上下公升沿都觸發

//這裡選擇下降沿觸發

exti_initstructure.exti_trigger =exti_trigger_falling;

//使能中斷

exti_initstructure.exti_linecmd = enable;

//初始化上述中斷配置

exti_init(&exti_initstructure);

//外部中斷處理函式

void exti_irqhandler(void)

if(exti_getitstatus(exti_line0) != reset) //確保是否產生了extiline0中斷

exti_clearitpendingbit(exti_line0);     //清除中斷標誌位

if(exti_getitstatus(exti_line1) != reset)//確保是否產生了exti line1中斷

exti_clearitpendingbit(exti_line1);     //清除中斷標誌位

if(exti_getitstatus(exti_line2) != reset)//確保是否產生了exti line2中斷

exti_clearitpendingbit(exti_line2);     //清除中斷標誌位

如下圖:這裡pa0連線到exti0

這裡pa1連線到exti1

這裡pa2連線到exti2

STM32外部中斷

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

stm32外部中斷

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

STM32外部中斷

1.中斷的原理 cpu正在執行,此時外部裝置發出請求,引發中斷,cpu暫停正在執行的程序,進行上下文切換,匯入引發終端的外部請求訊號,並執行需要該中斷的程序,執行完後,再切換其他程序繼續執行。2.新增外部中斷檔案 a.exti.h 檢視外部中斷與各管腳之間的對應關係 b.exti.c i.編寫管腳初...