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