stm32的每個io都可以作為外部中斷輸入,stm32的中斷控制器支援19哥外部中斷/事件請求:
0-15 i/o輸入中斷
16:連線到pvd輸出。
17:連線到rtc鬧鐘事件。
18:連線到usb喚醒事件。
(1)上公升沿:exti_initstructure.exti_trigger=exti_trigger_rising;
(2)下降沿:exti_initstructure.exti_trigger=exti_trigger_falling;
(3)雙邊沿觸發:exti_initstructure.exti_trigger=exti_trigger_rising_falling;
因為stm32有上百個i/o,但只有16跟線,所以有一種獨特的分配方式:
gpiox0-----------exti0..
.以此類推
即:
stm32提供16個中斷線,但是只提供7個中斷向量,只有7個中斷服務函式:
(可在startup_stem32f10x_xx.s檔案中找到)
exti0| exti1| exti2 |ecti3 | exti4分別有自己的中斷服務函式
exti9-5用乙個
exti15-10用乙個
中斷服務函式列表:
exti0_irqhandler
exti1_irqhandler
exti2_irqhandler
exti3_irqhandler
exti4_irqhandler
exti9_5_irqhandler
exti15_10_irqhandler
本篇以cet711為例:
選用按鍵b1,由電路圖可得,連線為pa0口
在這裡外部跳線帽將nk1和mpa0連線在一起
由圖可知,按鍵按下後,讀入低電平。
配置:使能時鐘:
rcc_apb2periphclockcmd
(rcc_apb2periph_gpioa,enable)
;
pa0上拉輸入
gpio_inittypedef gpio_initstructure;
gpio_initstructure.gpio_mode=gpio_mode_ipu;
gpio_initstructure.gpio_pin=gpio_pin_0;
gpio_init
(gpioa,
&gpio_initstructure)
;`
因為所用pa0所以用exti0線對映,
時鐘初始化:
rcc_apb2periphclockcmd
(rcc_apb2periph_afio,enable)
;
對映:gpio_extilineconfig
(gpio_portsourcegpioa,gpio_pinsource0)
;
exti_inittypedef exti_initstructure;
exti_initstructure.exti_line=exti_line0;
exti_initstructure.exti_linecmd=enable;
exti_initstructure.exti_mode=exti_mode_interrupt;
exti_initstructure.exti_trigger=exti_trigger_falling;
//ïâ½µñø´¥·¢
exti_init
(&exti_initstructure)
;
1.中斷優先順序分組(寫在主函式中,exti_init()之前):nvic_prioritygroupconfig
(nvic_prioritygroup_2)
;
中斷優先順序分組可以配置暫存器scb->aircr從而分配暫存器中優先順序的位,如2位分配給搶占優先順序,2位分配給相應優先順序。即搶占優先順序分四個0——3,響應優先順序分四個0——3
2.中斷優先順序分配:
nvic_inittypedef nvic_initstructure;
nvic_initstructure.nvic_irqchannel=exti0_irqn;
//中斷線0
nvic_initstructure.nvic_irqchannelcmd=enable;
nvic_initstructure.nvic_irqchannelpreemptionpriority=2;
nvic_initstructure.nvic_irqchannelsubpriority=2;
nvic_init
(&nvic_initstructure)
;
以上初始化結束
void
exti0_irqhandler
(void
)exti_clearitpendingbit
(exti_line0)
;}
exti_clearitpendingbit(exti_line0);//這句話用來清空中斷標誌位
外部中斷標誌位無法自動清空需要手動在中斷服務函式中清空。
中斷服務函式作用: 當中斷發生時,進入中斷服務函式中執行,然後在繼續執行主程式。
void
exita_init
(void
)void
exti0_irqhandler
(void
)exti_clearitpendingbit
(exti_line0)
;}
nrf51822 外部中斷(按鍵2)
1.目的 nrf51822外部中斷 2.分析 在實際應用中經常要用到外部中斷,比如按鍵喚醒。3.平台 協議棧版本 sdk10.0.0 編譯軟體 keil 5.12 硬體平台 微雪開發板nrf51822 例子 sdk 10.0.0 1.目的 nrf51822外部中斷 2.分析 在實際應用中經常要用到外...
STM32外部中斷(實現按鍵控制LED)
中斷 這個概念,指的是在微控制器執行過程中,在指定條件發生時,停下當前所有工作,去執行中斷處理函式內的內容。就像我們在教室上課時,突然 了,不出意外的話我們都需要停下手中學習任務,去進行一系列的避險動作。這一節我們通過中斷的方式,完成通過按鍵控制led亮滅的操作。stm32的中斷控制器支援19個外部...
stm32 外部中斷 按鍵的誤觸發
最近在除錯按鍵作為外部中斷exti進行觸發動作,發現每次按鍵按下和按鍵抬起都會多次進入中斷函式,造成程式不穩定,經過反覆除錯和查閱資料,最後終於已經把這個問題解決,現在總結一下 1 exti重複配置兩次導致誤觸發中斷的問題 如果重複兩次配置exti的話,由於第一次已經開啟中斷,當進行第二次配置中斷的...