外部中斷的概述
4.1.1 NVIC 特性
STM32F405xx/07xx 和 STM32F415xx/17xx 具有 82 個可屏蔽中斷通道。
嵌套向量中斷控制器 (NVIC) 和處理器內核接口緊密配合,可以實現低延遲的中斷處理和晚到中斷的高效處理。
4.1.2 外部中斷/事件控制器 (EXTI)
外部中斷/事件控制器包含多達 23 個用于產生事件/中斷請求的邊沿檢測器。
4.1.3 向量表

使能相應中斷需要查詢相應向量號。82個(從0到81,剛剛82個)。

4.1.4 EXTI 主要特性
《1》每個中斷 /事件線上都具有獨立的觸發和屏蔽
《2》每個中斷線都具有專用的狀態位
《3》支持多達23個軟件事件/中斷請求
4.1.5 EXTI 框圖

外部中斷需要打通的線路。

4.1.6 外部中斷/事件線映射




4.2 按鍵外部中斷配置流程
4.2.1 搭建框架

寫出如圖所示的注釋。
找到按鍵引腳、中斷號



找到對應中斷線,連接


配置模塊寄存器




在同一中斷線上,可以同時設置上升沿和下降沿觸發。即任一邊沿都可觸發中斷。


4.2.2 代碼分析
1.開啟模塊時鐘與GPIO時鐘



2.連接中斷線




先清零,在寫入需要的數據,保證功能開啟正確。
3.配置邊沿檢測

按鍵1,空閑狀態位為低電平,適合上升沿觸發,
按鍵2、3、4,空閑狀態為 高電平,適合下降沿觸發

4.開啟模塊中斷



開啟中斷屏蔽寄存器,相當于圖中寫1的位置輸出1,與門,全1出1。

或門有1出1,所以我們需要設置軟件中斷事件寄存器為不開啟狀態,即為默認關閉狀態,進而得到圖中的0,邊沿檢測電路,檢測按鍵按鍵,輸出1,即可觸發外部模塊的中斷,不過還需要開機NVIC中斷先,才能真正的中斷。

5.開啟NVIC中斷



6.中斷函數的配置





rc_w1解讀:此位可以讀取、此位寫1會被清零,清零的意思是變成0。

4.4.3 補充
《1》為什么沒給外部中斷配置優先級?
中斷的優先級,可配,可不配,因為我在實驗,可以不配,可根據需求,如多并發的任務設置中斷優先級。
《2》外部中斷與串口中斷代碼對比。
串口中斷代碼:

外部中斷代碼:

上兩圖分析,串口,我們配置了優先級,外部中斷沒有配置優先級,如果外部中斷沒有配置優先級,NVIC如何知道誰先誰后呢?同時來先響應誰呢?其實每個外部中斷都有自己的自然優先級,在不配置搶占優先級與子優先級時,默認使用自然優先級。

以外部中斷線為例,前面藍色框里面的數字,代表向量號6、7、8、9、10。紅色框的數字代表自然優先級,數字越小,優先級越高。
《3》按鍵1外部中斷配置框圖

NVIC是MCU的秘書,管理值所有的外部中斷;EXTI是NVIC的助理,處理外交事務,所有片外外設的中斷事件歸它管。如按鍵就屬于片外外設。

NVIC就是屬于---片內外設(在內核里面,屬于片內外設)
USART\GPIO就屬于---片上外設(在內核外面,但在芯片里面,屬于片上外設,)
LED\按鍵就屬于---片外外設(在芯片外面,屬于片外外設)
EXTI只是NVIC的處理,管理著片外外設的中斷事件,而NVIC在內核里面,GPIO和內核直接交互,因此我們配置通用模式。而且復用去的是片上外設,從片上外設出來,如下圖。

而我們按鍵配置EXTI去的是NVIC,NVIC屬于片內外設。所以配置通用。
通用模式:內核直接和GPIO“相連”,復用模式:GPIO先通過片上外設,最后才通過內核。
4.3 程序說明
《1》點亮一盞燈四種操作

可以好好研讀,就不解析了。
《2》初始化函數都有寄存器版和庫函數版

《3》寄存器與庫函數的分析
寄存器:應用編程接口,對于MCU來說,一切配置最終都歸于寄存器配置。
庫函數:對寄存器操作進行了封裝,目的是提高開發效率。
寄存器是易于學習和理解的,不懂的都可以翻手冊理解。庫函數必須在理解寄存器的基礎上,才能靈活運用,不然你不能真正理解每個初始化函數參數的含義。
寄存器不好復用,比如配置了串口1之后再去配置串口2,需要查閱手冊,修改比較多的參數,而庫函數只需要修改小部分參數,即可配置好、效率高,無需翻閱手冊。
《4》一般的按鍵實現與狀態機的按鍵實現
一般的按鍵實現;單擊、連按

狀態機的按鍵實現:單擊、雙擊、長按


狀態機很好用,是一種思想,值得好時間研究。
《4》重定向打印函數

把printf打印方向重定向到這里,下圖。
printf默認往某個內存打印,你可以具體告訴它,往哪里打印,如上面重定向。
就這?嗯,沒了。。。
外部中斷.docx
(3.96 MB, 下載次數: 8)
外部中斷.7z
(288.59 KB, 下載次數: 10)
| 歡迎光臨 (http://www.denmoz.com/bbs/) | Powered by Discuz! X3.1 |