個(gè)人網(wǎng)站主機(jī)選擇別做網(wǎng)絡(luò)推廣員
個(gè)人主頁(yè)~
有關(guān)結(jié)構(gòu)體的知識(shí)在這~
有關(guān)枚舉的知識(shí)在這~
GPIO口以及EXTI外部中斷
- GPIO
- 一、簡(jiǎn)介
- 二、基本結(jié)構(gòu)
- 三、輸入輸出模式
- 1、輸入模式
- (1)上拉輸入
- (2)下拉輸入
- (3)浮空輸入
- (4)模擬輸入
- 2、輸出模式
- (1)推挽輸出
- (2)開(kāi)漏輸出
- (3)復(fù)用推挽輸出
- (4)復(fù)用開(kāi)漏輸出
- EXIT外部中斷
- 一、中斷系統(tǒng)
- 二、STM32中斷
- 1、NVIC的基本結(jié)構(gòu)
- 2、NVIC優(yōu)先級(jí)分組
- 三、EXTI簡(jiǎn)介
- 四、EXTI實(shí)現(xiàn)
GPIO
一、簡(jiǎn)介
可配置為4種輸入模式、4種輸出模式
引腳電平0~3.3V,部分可以容忍5V
輸出模式下可控制端口輸出高低電平,用以驅(qū)動(dòng)LED、控制蜂鳴器、模擬通信協(xié)議輸出時(shí)序等
輸入模式下可讀取端口的高低電平或電壓,用于讀取按鍵輸入、外接模塊電平信號(hào)輸入、ADC電壓采集、模擬通信協(xié)議接收數(shù)據(jù)等
二、基本結(jié)構(gòu)
每一個(gè)GPIO口都由寄存器和驅(qū)動(dòng)器組成,寄存器的每一位對(duì)應(yīng)一個(gè)引腳,內(nèi)核可以通過(guò)APB2總線對(duì)寄存器進(jìn)行讀寫(xiě),輸出(輸入)寄存器寫(xiě)1引腳輸出(輸入)高電平,輸出(輸入)寄存器寫(xiě)0引腳輸出(輸入)低電平,因?yàn)镾TM32是32位的單片機(jī),而引腳只有16個(gè),所以寄存器只有低16位有對(duì)應(yīng)的端口,驅(qū)動(dòng)器用來(lái)增大驅(qū)動(dòng)能力,寄存器只存儲(chǔ)數(shù)據(jù)
三、輸入輸出模式
一個(gè)端口只能有一個(gè)輸出,但可以有多個(gè)輸入,所以在輸入時(shí),輸出驅(qū)動(dòng)器是關(guān)閉的,在輸出時(shí),輸入驅(qū)動(dòng)器是開(kāi)啟的
當(dāng)最右邊I/O引腳輸入高于VDD電壓時(shí),上方保護(hù)二極管被導(dǎo)通,電流進(jìn)入不到電路中
當(dāng)最右邊I/O引腳輸入低于VSS電壓時(shí),下方保護(hù)二極管被導(dǎo)通,電流進(jìn)入不到電路中
所以可輸入的電流范圍在VSS~VDD
不管是輸入輸出模式,都會(huì)涉及到數(shù)字?jǐn)?shù)據(jù)與模擬數(shù)據(jù)的轉(zhuǎn)換,輸入部分是通過(guò)觸發(fā)器和輸入數(shù)據(jù)寄存器,輸出部分是通過(guò)MOS管和輸出控制
1、輸入模式
上半部分是輸入電路
(1)上拉輸入
上拉輸入和下拉輸入都是通過(guò)stm32控制的,可以自己決定上拉、下拉、浮空,并且上拉電阻和下拉電阻的阻值都很大,所以對(duì)電路的影響不是很大
上拉輸入就是輸入驅(qū)動(dòng)器上方開(kāi)關(guān)接通,此時(shí)內(nèi)部連接上拉電阻,是一種默認(rèn)為高電平的輸入方式
在引腳輸入高電平時(shí),輸入高電平,引腳輸入低電平時(shí),輸入低電平:
引腳浮空(沒(méi)有輸入)時(shí),輸入高電平:
然后通過(guò)觸發(fā)器,這里的觸發(fā)器作用是給信號(hào)整形,因?yàn)樵谳斎氲倪^(guò)程中信號(hào)可能會(huì)失真,
觸發(fā)器的作用:當(dāng)數(shù)據(jù)高于上閾值時(shí)輸出高電平,低于下閾值時(shí)輸出低電平,在中間晃悠的不變化
然后這個(gè)數(shù)據(jù)就寫(xiě)入輸入數(shù)據(jù)寄存器,由程序讀取寄存器某一位的數(shù)據(jù)就可以知道端口的輸入電平了
然后是復(fù)用功能輸入這根線連接到其他需要讀取端口狀態(tài)的外設(shè)上,接收數(shù)字量
(2)下拉輸入
下拉輸入就是輸入驅(qū)動(dòng)器下方開(kāi)關(guān)接通,此時(shí)內(nèi)部連接下拉電阻,是一種默認(rèn)為低電平的輸入方式
在引腳輸入高電平時(shí),輸入高電平,引腳輸入低電平時(shí),輸入低電平:
在引腳浮空時(shí),輸入低電平:
(3)浮空輸入
當(dāng)上拉電阻和下拉電阻同時(shí)斷開(kāi)時(shí),此時(shí)引腳處于浮空輸入狀態(tài),此時(shí)輸入高電平為高電平,輸入低電平為低電平
當(dāng)引腳處于浮空狀態(tài)時(shí),輸入不確定,任意稍微的影響都有可能導(dǎo)致輸入發(fā)生變化
小總結(jié):不管是上拉輸輸入、下拉輸入還是浮空輸入,優(yōu)先保證I/O口的輸入如果為高電平(低電平),那么輸入一定是高電平(低電平),變化只是在引腳處為浮空輸入時(shí)有變化,我們一般使用浮空輸入(多數(shù)情況下)和上拉輸入(在有外界干擾的情況下),很少使用下拉輸入
當(dāng)使用浮空輸入時(shí)最好使用一個(gè)連續(xù)的驅(qū)動(dòng),防止輸入浮空
(4)模擬輸入
接收模擬量,接到觸發(fā)器前邊,直接接收真實(shí)信號(hào)
2、輸出模式
下半部分是輸出電路
數(shù)字?jǐn)?shù)據(jù)由輸出數(shù)據(jù)寄存器或外設(shè)控制,輸出數(shù)據(jù)寄存器控制輸出直接接普通I/O口,外設(shè)控制輸出則需要使用AFIO口,也就是復(fù)用功能IO口
輸出數(shù)據(jù)寄存器還接一個(gè)位設(shè)置/清除寄存器,用來(lái)隨時(shí)更改輸出數(shù)據(jù)寄存器的某一位上的值
通過(guò)將位設(shè)置寄存器某一位改為1(不需置輸出數(shù)據(jù)寄存器某一位為1的都為0),那么對(duì)應(yīng)的那一位的輸出數(shù)據(jù)寄存器的值就設(shè)置為1
通過(guò)將位清除寄存器的某一位改為1(不需置輸出數(shù)據(jù)寄存器某一位為0的都為0),那么對(duì)應(yīng)的那一位的輸出數(shù)據(jù)寄存器的值就設(shè)置為0
(1)推挽輸出
在推挽輸出模式下,P-MOS管、N-MOS管均可以使用
MOS管就相當(dāng)于一個(gè)開(kāi)關(guān),只是這個(gè)開(kāi)關(guān)可以用來(lái)轉(zhuǎn)換信號(hào)
數(shù)據(jù)寄存器為1時(shí),上管導(dǎo)通,下管斷開(kāi),引腳直接接VDD,輸出高電平
數(shù)據(jù)寄存器為0時(shí),上管斷開(kāi),下管導(dǎo)通,引腳直接接VSS,輸出低電平
在推挽輸出模式下STM32對(duì)I/O口有絕對(duì)的控制權(quán),高低電平的輸出都是由STM32決定的
(2)開(kāi)漏輸出
在開(kāi)漏輸出模式下,P-MOS管不可用,N-MOS管可用
數(shù)據(jù)寄存器為1時(shí),下管斷開(kāi),此時(shí)引腳處為高阻態(tài)(無(wú)驅(qū)動(dòng)能力)
數(shù)據(jù)寄存器為0時(shí),下管導(dǎo)通,引腳接VSS,輸出低電平(有驅(qū)動(dòng)能力)
在引腳外接一個(gè)上拉電阻到5V的電源,當(dāng)輸出低電平時(shí)N-MOS接VSS,輸出高電平時(shí),上拉電阻將電壓拉高至5V
(3)復(fù)用推挽輸出
同推挽輸出,不過(guò)是由外設(shè)控制的,不是數(shù)據(jù)寄存器控制的
(4)復(fù)用開(kāi)漏輸出
同開(kāi)漏輸出,不過(guò)是由外設(shè)控制的,不是數(shù)據(jù)寄存器控制的
EXIT外部中斷
一、中斷系統(tǒng)
在主程序運(yùn)行過(guò)程中,出現(xiàn)了特定的中斷觸發(fā)條件,也叫中斷源,使得CPU暫停當(dāng)前正在運(yùn)行的程序,去處理中斷程序,處理完成后再返回原來(lái)的位置繼續(xù)執(zhí)行主程序
當(dāng)有多個(gè)中斷源同時(shí)申請(qǐng)中斷時(shí),CPU會(huì)先相應(yīng)優(yōu)先級(jí)更高的中斷源,優(yōu)先級(jí)是可以自己設(shè)置的
當(dāng)一個(gè)中斷程序正在運(yùn)行時(shí),又有新的優(yōu)先級(jí)更高的中斷源申請(qǐng)中斷,CPU暫停當(dāng)前中斷程序,去處理該優(yōu)先級(jí)更高的中斷程序,處理完后返回該中斷程序
二、STM32中斷
STM32使用NVIC統(tǒng)一管理中斷,每個(gè)中斷通道有16個(gè)可編程的優(yōu)先級(jí),優(yōu)先級(jí)可再分為搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)
1、NVIC的基本結(jié)構(gòu)
在第一篇的博文里提到過(guò)外設(shè)表,外設(shè)表中的前兩個(gè)是內(nèi)核外設(shè),NVIC就是一個(gè)內(nèi)核外設(shè),是用來(lái)管理中斷的
每個(gè)中斷都可以直接連接到NVIC上,NVIC通過(guò)分配優(yōu)先級(jí)確定每個(gè)中斷的先后順序,它同一時(shí)間只會(huì)上交一個(gè)中斷給CPU,讓CPU處理中斷
2、NVIC優(yōu)先級(jí)分組
NVIC的中斷優(yōu)先級(jí)由優(yōu)先級(jí)寄存器的4位決定,這4位可以分為高n位的搶占優(yōu)先級(jí)和低4-n位的相應(yīng)優(yōu)先級(jí),當(dāng)搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)均相同時(shí)按照中斷號(hào)排隊(duì)
搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)分為五組
組別(位數(shù)以及取值范圍) | 搶占優(yōu)先級(jí) | 相應(yīng)優(yōu)先級(jí) |
---|---|---|
0 | 0位,0 | 4位,0~15 |
1 | 1位,0~1 | 3位,0~7 |
2 | 2位,0~3 | 2位,0~3 |
3 | 3位,0~7 | 1位,0~1 |
4 | 4位,0~15 | 0位,0 |
三、EXTI簡(jiǎn)介
EXTI可以監(jiān)測(cè)指定GPIO的電平信號(hào),當(dāng)電平變化時(shí),EXTI向NVIC發(fā)出中斷申請(qǐng)
支持上升沿、下降沿、雙邊沿、軟件觸發(fā)
上升沿:電平由低電平變?yōu)楦唠娖降乃查g觸發(fā)中斷
下降沿:電平由高電平變?yōu)榈碗娖降乃查g觸發(fā)中斷
雙邊沿:上升沿和下降沿都可以觸發(fā)中斷
軟件觸發(fā):程序代碼執(zhí)行觸發(fā)中斷
任意GPIO口都可以當(dāng)做外部中斷的引腳,但GPIO后邊跟的數(shù)字相同不能觸發(fā)中斷,這個(gè)數(shù)字叫做pin,也就是說(shuō)PA0和PB0不能同時(shí)做中斷引腳,如果需要多個(gè)中斷引腳的話pin值不能相同,原因是GPIO連接到AFIO上,起到中斷引腳選擇的作用,AFIO從pin值相同的通道里選擇一個(gè)接到EXTI邊沿檢測(cè)及控制電路上,一共選擇16個(gè),也就是PA0、PB0、PC0只能有一個(gè)接到EXTI邊沿檢測(cè)及控制電路上,再加上PVD、RTC、USB、ETH四個(gè)特殊外設(shè)一共20個(gè)輸入信號(hào),經(jīng)過(guò)EXTI分為兩種輸出:NVIC觸發(fā)中斷,其他外設(shè)觸發(fā)事件響應(yīng)
這里5 ~ 9、10 ~ 15整合到一條通道上了,一條通道上的觸發(fā)同一個(gè)中斷函數(shù),在中斷函數(shù)里還需要標(biāo)志位才能區(qū)分到底是哪一個(gè)中斷進(jìn)來(lái)的
如果發(fā)生EXTI外部中斷,可以發(fā)生中斷響應(yīng)或者事件響應(yīng),中斷響應(yīng)就是執(zhí)行中斷程序,事件響應(yīng)就是操作外設(shè)而不觸發(fā)中斷
四、EXTI實(shí)現(xiàn)
上方是總線和外設(shè)接口,輸入先遇到邊沿檢測(cè)電路,當(dāng)上升沿時(shí)上升沿觸發(fā)選擇寄存器為1,下降沿時(shí)下降沿觸發(fā)選擇寄存器為1,它們兩個(gè)只要有一個(gè)為1,邊沿檢測(cè)電路就可以為通路
之后遇到的這個(gè)元器件叫做或門(mén),執(zhí)行邏輯或的操作,當(dāng)軟件中斷事件寄存器和邊沿檢測(cè)電路傳來(lái)的數(shù)據(jù)中有一個(gè)為1則為1,全為0則為0
然后線路分為兩路,左路對(duì)應(yīng)的是事件響應(yīng),上路對(duì)應(yīng)的是中斷響應(yīng)
左路連接的元器件叫做與門(mén),執(zhí)行邏輯與的操作,如果事件屏蔽寄存器和全為1則為1,有一個(gè)為0則為0,然后連接到脈沖發(fā)生器,脈沖發(fā)生器起到將數(shù)字信號(hào)轉(zhuǎn)變?yōu)槟M信號(hào)的作用
上路連接請(qǐng)求掛起寄存器,可以通過(guò)讀取該寄存器知道是哪個(gè)通道觸發(fā)的中斷,如果該寄存器置1,就繼續(xù)往左走,與中斷屏蔽寄存器連接到一個(gè)與門(mén)上,最后連接到中斷控制器NVIC執(zhí)行中斷程序
今日分享就到這里了~