最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

第四章 STM32的外部中斷EXTI

2023-09-09 15:21 作者:高博士_嵌入式  | 我要投稿

套件包購買鏈接:?

案例代碼及相關(guān)資料下載鏈接:

鏈接:https://pan.baidu.com/s/1hsIibEmsB91xFclJd-YTYA?pwd=jauj?

提取碼:jauj??

1?中斷系統(tǒng)

1.1? 中斷的概念

中斷系統(tǒng)的定義:中斷是指在主程序運行過程中,出現(xiàn)了特定的中斷觸發(fā)條件(中斷源),使得CPU暫停當(dāng)前正在運行的程序,轉(zhuǎn)而去處理中斷程序,處理完成后又返回原來被暫停的位置繼續(xù)運行。

通俗來講中斷就是主程序在正常運行時,出現(xiàn)了中斷觸發(fā)條件,而中斷觸發(fā)的條件有很多:對于外部中斷來講可能是引腳的電平發(fā)生變化;對于定時器來講可能是定時的時間到了;對于串口通信來講可能是接收到了數(shù)據(jù),當(dāng)以上事件發(fā)生時,程序的執(zhí)行就會從主程序中跳到中斷程序中來執(zhí)行中斷程序,直到中斷程序執(zhí)行完成之后才會重新執(zhí)行主程序。而使用中斷系統(tǒng)最大的作用就是能夠極大的提升程序的運行效率。

中斷優(yōu)先級:中斷優(yōu)先級建立在有多個中斷源的時候,當(dāng)有多個中斷源出現(xiàn)時,CPU就要考慮率先執(zhí)行哪個中斷,中斷就像做一件事的輕重比例,當(dāng)有很多事情堆到眼前時候,通常先做情況最緊急的,再做稍次一點的,這樣就會給中斷確立執(zhí)行的先后順序,而多個中斷的執(zhí)行順序的先后就被叫做中斷優(yōu)先級。

中斷嵌套:當(dāng)一個中斷程序正在運行時,又有新的更高優(yōu)先級的中斷源申請中斷,CPU再次暫停當(dāng)前中斷程序,轉(zhuǎn)而去處理新的中斷程序,處理完成后依次進行返回,而中斷嵌套的執(zhí)行通常是由中斷優(yōu)先級來確定的。中斷嵌套可以理解將一堆要做的事慢慢一個一個拋給你,而你要根據(jù)每個事情的緊急程度來決定在已經(jīng)有的事情里先做哪一個。

中斷執(zhí)行的流程如下圖所示:

?

在我們學(xué)習(xí)的STM32 中有68個可屏蔽中斷通道(中斷源),包含EXTI、TIM、ADC、USART、SPI、I2C、RTC等多個外設(shè)(68個中斷源是F1系列中最多的,而對于某個具體型號可能并沒有這么多,所以中斷源的數(shù)量以單片機的數(shù)據(jù)手冊為準(zhǔn)),這些中斷源都使用NVIC統(tǒng)一管理中斷,每個中斷通道都擁有16個可編程的優(yōu)先等級,可對優(yōu)先級進行分組,進一步設(shè)置搶占優(yōu)先級和響應(yīng)優(yōu)先級。(具體中斷源如下表所示灰色部分為內(nèi)核中斷,不是灰色部分的為STM32的外設(shè)中斷,具體圖標(biāo)手冊中有)

NVIC結(jié)構(gòu):

基本結(jié)構(gòu)圖如下圖所示:

NVIC的全稱是Nested vectoredinterrupt controller,即嵌套向量中斷控制器,在STM32中NVIC用來統(tǒng)一分配中斷優(yōu)先級和管理中斷的,他是單片機內(nèi)核外設(shè),是用來幫助CPU處理中斷分配和配置中斷優(yōu)先級的地方(為了讓CPU高速運行),因為NVIC有多個輸入口,所以能將單片機的外設(shè)中斷都來接到NVIC上,而NVIC只有一個輸出口這樣就能通過對中斷優(yōu)先級的設(shè)置,來輸出中斷優(yōu)先級高的,然后交給CPU讓CPU優(yōu)先執(zhí)行中斷優(yōu)先級高的程序,這就是NVIC的基本作用。

NVIC優(yōu)先級分組:

為了處理不同形式的優(yōu)先級,NVIC會有優(yōu)先級進行分組,而NVIC的中斷優(yōu)先級由優(yōu)先級寄存器的4位(0~15)決定,這4位可以進行切分,分為高n位的搶占優(yōu)先級和低4-n位的響應(yīng)優(yōu)先級,其屬性編號越小,表明它的優(yōu)先級別越高。搶占優(yōu)先級,是指打斷其他中斷的屬性,即因為具有這個屬性會出現(xiàn)嵌套中斷(在執(zhí)行中斷服務(wù)函數(shù)A 的過程中被中斷B 打斷,執(zhí)行完中斷服務(wù)函數(shù)B 再繼續(xù)執(zhí)行中斷服務(wù)函數(shù)A),搶占屬性由NVIC 的參數(shù)配置。而響應(yīng)屬性則應(yīng)用在搶占屬性相同的情況下,當(dāng)兩個中斷向量的搶占優(yōu)先級相同時,如果兩個中斷同時到達(dá), 則先處理響應(yīng)優(yōu)先級高的中斷,搶占優(yōu)先級和響應(yīng)優(yōu)先級均相同的按中斷號排隊,數(shù)字小的先響應(yīng)。(中斷號是指上圖中優(yōu)先級的序號)

優(yōu)先級的分組方式如下圖所示:

注意在配置好NVIC的分組方式之后,配置優(yōu)先級時,取值不能超過對應(yīng)NVIC分組的取值范圍。

1.2? 外部中斷的簡介與配置

外部中斷簡介:

EXTI(Extern Interrupt)外部中斷,EXTI可以監(jiān)測指定GPIO口的電平信號,當(dāng)其指定的GPIO口產(chǎn)生電平變化時,EXTI將立即向NVIC發(fā)出中斷申請,經(jīng)過NVIC裁決后即可中斷CPU主程序,使CPU執(zhí)行EXTI對應(yīng)的中斷程序。

其觸發(fā)方式有上升沿,下降沿,雙邊沿,軟件觸發(fā)四種。EXTI支持所有的GPIO口都可以觸發(fā)中斷,但是相同的Pin_不可以同時觸發(fā)中斷,例如PA1與PB1不能同時觸發(fā)中斷。EXTI有20個通道數(shù),說明EXTI可以有20個中斷源,其中包括16個GPIO_Pin,外加PVD輸出、RTC鬧鐘、USB喚醒、以太網(wǎng)喚

醒;而EXTI響應(yīng)方式有中斷響應(yīng)(申請中斷讓CPU執(zhí)行中斷函數(shù)),事件響應(yīng)(中斷響應(yīng)時,外部中斷信號不會傳向CPU而是給到單片機外設(shè),讓單片機外設(shè)響應(yīng)一個事件)。

外部中斷的基本結(jié)構(gòu):

結(jié)構(gòu)圖如下圖所示:


最左邊是GPIO口的外設(shè),由于每個GPIO都有16個通道當(dāng)每個GPIO的引腳都占用一個那么EXTI的通道就會不夠用,為了讓相同的Pin_不同時觸發(fā)中斷,所以就有AFIO用來進行中斷引腳的選擇,相當(dāng)于一個數(shù)據(jù)選擇器,他可以從前面N個GPIO的16個引腳中選擇其中一個接到后面的EXTI通道里面,所以就會有上面說的相同的Pin_不可以同時觸發(fā)中斷,因為對于相同的Pin_在經(jīng)過AFIO之后只會有一個Pin_接到后面的EXTI通道上,例如:PA0,PB0,PC0,PD0,只有一個Pin_0可以接到EXTI的通道0上。而以上GPIO引腳通過EXTI上之后,就會分為兩種輸出,一種接到NVIC上,一種接到單片機外設(shè)上(也是對應(yīng)的事件響應(yīng)),這里EXTI的輸出本來為20個但是由于ST公司想要節(jié)省引腳口,所以EXTI4之后的中斷被五個為一組分在同一個通道里,所以EXTI5~9會觸發(fā)同一個中斷函數(shù),EXTI10~15觸發(fā)同一個中斷函數(shù),但是基于Hal庫開發(fā)的STM32將這些中斷函數(shù)寫在了一起,所以所有中斷通道都可以寫在同一個中斷函數(shù)里面,但是標(biāo)準(zhǔn)庫必須根據(jù)不同的中斷通道來判斷到底能不能寫在一起。

AFIO口的結(jié)構(gòu)圖如下:

此圖原理就是將輸入的不同GPIO相同的Pin_通過數(shù)據(jù)選擇器來進行選擇,最后只選擇一個Pin_來接到EXTI通道上,具體如何選擇就是通過配置AFIO_EXTRCRX寄存器的EXTIx位來進行選擇,每個位代表不同的GPIO,這樣就能以確定的位來確定是哪個GPIO的引腳會接到EXTIX的通道上面。

AFIO主要用于引腳復(fù)用功能的選擇和重定義(數(shù)據(jù)選擇器),在STM32中,AFIO主要完成兩個任務(wù):復(fù)用功能引腳重映射、中斷引腳選擇。

?EXTI結(jié)構(gòu)圖

?

電平經(jīng)過AFIO之后進入EXTI,首先要對該中斷源的觸發(fā)方式進行選擇(上升沿觸發(fā)/下降沿觸發(fā)/雙邊沿觸發(fā))進入或門的輸入,這里用或門進行輸入的原因是因為觸發(fā)方式也可以選擇是軟件觸發(fā),然后就會分成兩路,接到NVIC中斷控制器的是觸發(fā)中斷的,而接到脈沖發(fā)生器的是用來觸發(fā)事件的。

先看觸發(fā)中斷這一路的,這里接的請求掛起寄存器相當(dāng)于中斷標(biāo)志位,通過讀取這個寄存器判斷是哪個通道發(fā)出中斷請求,如果給請求掛起寄存器置1,那么就會和中斷屏蔽寄存器進入一個與門,然后進入NVIC中斷控制器,這里與門和這個中斷屏蔽寄存器相當(dāng)于一個開關(guān)的作用,因為與門是如果輸入有一個為0,那么輸出一定為0,所以會通過控制中斷屏蔽寄存器來控制是否響應(yīng)中斷。

事件觸發(fā)這一路與中斷觸發(fā)大同小異,這里事件屏蔽寄存器和與門也充當(dāng)開關(guān)的作用,通過與門之后接一個脈沖發(fā)生器,這個脈沖發(fā)生器的作用就是給一個電平脈沖是用來觸發(fā)其他外設(shè)的。

上圖中畫斜杠寫20的表示這里可以接20根線,連接20個通道,而APB總線和外設(shè)接口,單片機對于寄存器的訪問就是借助APB總線來進行。

2實驗演示

2.1? 旋轉(zhuǎn)編碼器的簡介

旋轉(zhuǎn)編碼器:用來測量位置、速度或旋轉(zhuǎn)方向的裝置,當(dāng)其旋轉(zhuǎn)軸旋轉(zhuǎn)時,其輸出端可以輸出與旋轉(zhuǎn)速度和方向?qū)?yīng)的方波信號,讀取方波信號的頻率和相位信息即可得知旋轉(zhuǎn)軸的速度和方向,通常有以下幾種類型:機械觸點式/霍爾傳感器式/光柵式。

實物圖如下:

?

左邊第一個不能判斷不能判斷旋轉(zhuǎn)方向,只能測位置和速度所以不經(jīng)常使用,而剩下的就是我們本開發(fā)板自帶的旋轉(zhuǎn)編碼器,由第三個拆解圖可得他內(nèi)部是通過金屬觸點來進行通斷的,所以為機械式編碼器,有左右兩部分開關(guān)觸點,其中左右兩部分內(nèi)側(cè)較細(xì)的觸點是連接在引腳B上,而剩下外側(cè)的觸點分別連在引腳A和C上,而中間的圓點為一個普通的按鍵,然后來看這個編碼盤也是一系列像光柵一樣的東西,但也是金屬觸點,在旋轉(zhuǎn)時依次接通和斷開兩邊的觸點,而金屬盤的位置也是經(jīng)過設(shè)計可以讓兩側(cè)觸點的通斷有九十度的相位差,

具體輸出波形如下方兩圖所示(上圖為正轉(zhuǎn)時,下圖為反轉(zhuǎn)時)以下這樣的正交波形就可以用來區(qū)別方向。


?硬件電路圖如下

2.2? 對射式紅外傳感器計次

?接線圖如下:

?

實物圖如下:

實驗內(nèi)容

本實驗是對對射式紅外傳感的傳感次數(shù)進行計次,通過用遮光片遮擋來對紅外傳感器傳輸進行計次,然后通過OLED屏幕來顯示傳感次數(shù)。并且對于中斷觸發(fā)方式的不同,計次方式也不同。

首先,配置STMCube MX

將GPIO口用來實現(xiàn)外部中斷的配置為中斷模式即PB14,由于OLED也要繼續(xù)使用所以對OLED的引腳繼續(xù)配置為輸出模式即可:

在NVIC中勾選EXTI line[15:10] interrupts

對NVIC的中斷分組方式選擇方式2(哪一個隨自己選擇)

在GPIO這里對中斷觸發(fā)方式進行選擇:

?

其他配置不變,生成工程即可。

?

代碼部分:

HAL庫關(guān)于外部中斷的函數(shù)只有一個:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

具體模板用法如下:

CountSensor部分代碼

主函數(shù)部分代碼


2.3? 旋轉(zhuǎn)編碼計次

接線圖如下圖所示:

?


實驗內(nèi)容:

對旋轉(zhuǎn)編碼器旋轉(zhuǎn)進行計次,正轉(zhuǎn)加加愛,反轉(zhuǎn)減減,計得次數(shù)通過OLED來不斷刷新。

STM32CubeMX配置:

對旋轉(zhuǎn)編碼器連接的引腳PB0與PB1配置為外部中斷模式,給OLED連接的引腳PB8與PB9配置為輸出模式,在NVIC選擇分組方式,然后在下面勾選

EXTI line0 interrupt? ?EXTI line1 interrupt 。

?

然后在GPIO里配置IO口的觸發(fā)中斷方式與輸出模式,根據(jù)自身習(xí)慣來對IO口進行宏定義。

配置完成后,生成工程。

代碼部分:

Encoder部分代碼:

主函數(shù)部分代碼:


第四章 STM32的外部中斷EXTI的評論 (共 條)

分享到微博請遵守國家法律
肇东市| 新津县| 长泰县| 瑞丽市| 富锦市| 鹤岗市| 平远县| 台南市| 东安县| 抚远县| 贡觉县| 阳新县| 吉隆县| 沁水县| 瑞昌市| 巴东县| 民权县| 盐亭县| 盈江县| 泌阳县| 台州市| 嫩江县| 虎林市| 七台河市| 峨边| 双鸭山市| 崇礼县| 孟州市| 龙泉市| 漳平市| 临邑县| 乡城县| 岚皋县| 仪陇县| 武义县| 奈曼旗| 宣汉县| 宜川县| 普定县| 准格尔旗| 德化县|