上一章是關於GPIO的狀態讀取和輸出,但是現實我們會遇到一種情況,我們想通過按一個按鍵,才相應的執行輸出高電平或者低電平,或者執行計時器功能等等。
那這個功能怎麼實現呢?
沒錯,我相信你已經想到了,那就是中斷。
中斷簡介:
中斷是指計算機運行過程中,出現某些意外情況需主機干預時,機器能自動停止正在運行的程序並轉入處理新情況的程序,處理完畢後又返回原被暫停的程序繼續運行。
咋一看,這個解釋,怎麼有點看不懂呢?是不是一點也不生動,不形象。
看不懂就對了,因為我們不是機器。我們要想理解它,就要把它想像成我們自己,也就是轉換成「人話」。
轉換成人話就是這樣的。
中斷是指「人」在持續的做一件事情過程中,由於出現某些意外情況需要「人」停下正在做的事情而去做意外的事情,「人」能停下手上正在做的事情轉而去處理意外的事情,處理完畢後又繼續做暫停的事情。
我想我們生活或者工作中經常遇到這種事情,我們在持續專注的做一件事情,結果被同事或者其他的事情打斷了,我們就停下手中的事情進而去做別的事情了。這其實就是「中斷」。
我相信大家看完上面的敘述應該已經理解(不是了解)了中斷,一個事情只有大腦理解了,我們去執行的時候效率才會高,才會永久的記住。這也許才是我們學習的目的。
下面還有一個概念,相信你已經無師自通了。
·中斷優先權
官方解釋我就不放了,其實就是我們被中斷的事情排了個順序。也就是哪個比較緊急,我們就先處理,至於「緊急」的程度,需要我們自己去設置。
就好比生活工作中,同時有好幾件事情需要你同時去做,你不可能同時去做,只能根據重要程度在心中排個順序,然後再一件一件去執行。這樣你才能把每一件事情做好,這也就是我們的「能力」,即應對意外情況不慌張進而處理意外情況的能力。
我怎麼感覺我越說越跑題了呢,還是收回思緒,我們接著做實驗吧。
1.新建工程。
如果不知道怎麼新建可以翻我上面幾篇教程,這裡不再闡述了,直接進入重點。
2.打開.ioc
3.配置RCC,使用外部時鐘源
4.配置調試引腳
「Serial Wire」:選中該選項後,相應的I/O引腳(3)會變成調試引腳。
注意:I/O引腳成為調試引腳後,不可再復用其它的功能。
5.將LED的3個引腳(PI5,PI6,PI7)設置為 GPIO_Output
單擊對應的引腳,然後選中"GPIO_Output",引腳變為綠色。
注意:再操作一遍就是取消引腳設置。
然後怎麼配置引腳呢?
單擊System Core -> GPIO,然後會顯示所有GPIO引腳的設置。
重點來了!以上其實和普通配置是一樣的,下面是中斷和其他的區別。
6.將 ARM_KEY對應的引腳(PH15)設置為 GPIO_EXTI15
就是這樣子的。
GPIO_EXIT有6種模式,這裡選擇下降沿觸發外部中斷。
7.設置NVIC(嵌套向量中斷控制器)
這個其實就是我們上面說的設置中斷優先級的地方。
STM32的中斷向量具有兩個屬性,一個為搶占屬性,另一個為響應屬性,其屬性編號越小,表明它的優先級別越高。
8.時鐘源設置,選擇外部高速時鐘源,配置為最大主頻
9.工程文件設置
10. Code Generator設置
11.然後Ctrl + S保存,然後自動生成代碼
12.然後打開main.c文件,在*USER CODF BEGIN *字樣之間調用中斷函數。
至此,通過按鍵觸發中斷的試驗已經完畢。
————————————————————
小結:我剛開始做的時候容易把清除標誌位的情況忘記,所以在寫程序的的時候最好寫完回調函數就立即把清除標誌的代碼敲上,否則就會出現一直觸發中斷的情況。
說了這麼多,大家記得留意下方評論第一條(或者私信我)有干貨~