STM32外部中斷

2021-07-30 14:32:34 字數 2222 閱讀 2700

1. 中斷的原理

cpu正在執行,此時外部裝置發出請求,引發中斷,cpu暫停正在執行的程序,進行上下文切換,匯入引發終端的外部請求訊號,並執行需要該中斷的程序,執行完後,再切換其他程序繼續執行。

2. 新增外部中斷檔案

a. exti.h

檢視外部中斷與各管腳之間的對應關係

b. exti.c

i. 編寫管腳初始化函式

gpio_inittypedef gpio_initstructure; //結構體定義gpio_inittypedef

//時鐘設定

systeminit(); //開啟系統時鐘,才能使stm32正常工作

gpio_initstructure.gpio_pin = k_left;

gpio_initstructure.gpio_speed = gpio_speed_50mhz;

gpio_initstructure.gpio_mode = gpio_mode_out_ipu;

gpio_init(gpioe,&gpio_initstructure);

ii. 編寫外部中斷初始化配置

exti_inittypedef exti_initstructure;//外部中斷初始化 初始化外設exti暫存器

/* 設定外部中斷的模式 */

exti_initstructure.exti_line=exti_line2; //設定使能或失能線路

exti_initstructure.exti_mode=exti_mode_interrupt; //設定模式

exti_initstructure.exti_trigger=exti_trigger_falling; //設定邊沿觸發中斷請求

exti_initstructure.exti_linecmd = enable; //定義選中線路的新狀態

exti_init(&exti_initstructure);

iii. 注意

rcc_apb2periphclockcmd(rcc_apb2periph_afio,enable); //開啟管腳復用功能 才能使用該管腳的外部中斷功能

gpio_extilineconfig(gpio_portsourcegpioe, gpio_pinsource2);//選擇gpio管腳用作外部中斷線路

iv. 設定優先順序

1) 分組,不同的組搶占和響應佔位不同

2) 開啟外部中斷的全域性中斷

3) 設定搶占優先順序

4) 設定響應優先順序

nvic_inittypedef nvic_initstructure;

/* 設定nvic引數 */

nvic_prioritygroupconfig(nvic_prioritygroup_1);

nvic_initstructure.nvic_irqchannel = exti2_irqn; //開啟exti2的全域性中斷

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

nvic_initstructure.nvic_irqchannelsubpriority = 0; //響應優先順序為0

nvic_initstructure.nvic_irqchannelcmd = enable; //使能

nvic_init(&nvic_initstructure);

c. 配置過程

i. 先開啟系統時鐘

1) 按鍵接在pe2管腳所以先開啟pe管腳的時鐘

ii. 因為用外部中斷,還要開啟管腳的復用功能

iii. 按鍵管腳初始化,上拉模式

iv. 再對外部中斷配置,定義外部中斷結構體

1) 配置好中斷線路,按鍵接的線路,中斷觸發模式,邊沿觸發方式,使能

2) 將pe2管腳對映到中斷線路上

v. 中斷優先順序配置

1) 先分組

2) 開啟中斷通道

3) 配置搶占和響應優先順序

3. 編寫外部中斷函式在 stm32f10x_it.c檔案中

void exti2_irqhandler() //外部中斷2入口函式

else

}while(gpio_readinputdatabit(gpioe,gpio_pin_2)==bit_reset) ;//判斷是否鬆開 等待按鍵鬆開

}}

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。程式寫好以後發現始終無法進入中斷,開始查...