中斷是單片機的靈魂
引入
週末的下午小明正在家裏安安靜靜的寫作業,突然小明的媽媽買菜回來了,但是媽媽忘記了帶鑰匙,就敲門示意小明開門,小明聽到媽媽敲門的信號,停止正在寫的作業,做出開門的反應,讓媽媽進門,然後又繼續寫作業。
停止正在處理的事情轉而處理另一件事,在處理完另一件事後又回來處理原來的事情,這在單片機中就是中斷的概念。
在各類單片機中都有這幾類中斷:
- 串口中斷
- 定時器中斷
- 外部中斷
今天就來了解一下stm32中的外部中斷:
外部中斷概述
一、STM32的每個IO都可以作爲外部中斷輸入
二、STM32的中斷控制器支持19個外部中斷/事件請求
線0~15:對應外部IO口的輸入中斷
線16:連接到PVD輸出
線17:連接到RTC鬧鐘事件
線18:連接到USB喚醒事件
三、每個外部中斷線可以獨立的配置觸發方式(上升沿,下降沿或者雙邊沿觸發)
從上面第二點可以看到,stm32支持19個外部中斷請求,但是有3個都是具有特殊功能的外部中斷,可供我們自由使用的也就是線0-15對應外部IO的輸入中斷。
外部中斷與IO口的映射
從圖中可以看出PA0,PB0,PC0…PG0都是對應的中斷線EXTI0,以此類推Px1(x表示A~G)對應的是EXTI1,這樣,16線的中斷線就映射到了我們的PA0-PA15…一直到PG0-PG15所有的IO口。
從上面的映射關係我們知道stm32總共有EXTI0-EXTI15,16條中斷線,那麼是否有16箇中斷服務函數呢?
參見下圖
查找手冊可以看到,stm32只爲外部中斷配置了7箇中斷服務函數,其中的EXTI5-EXTI9共用一箇中斷服務函數,EXTI10-EXTI15共用另一個。
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI9_5_IRQHandler
EXTI15_10_IRQHandler
外部中斷配置步驟
- 初始化IO口爲輸入
- 開啓IO口複用時鐘
- 設置IO口與中斷線的映射關係
- 初始化線上中斷,設置觸發條件等
- 配置中斷分組(NVIC),並使能中斷
- 編寫中斷服務函數
- 清除中斷標誌位
就到這了,拜。