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

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

基于stm32mp157 linux開(kāi)發(fā)板ARM裸機(jī)開(kāi)發(fā)教程7:Cortex-A7 GPIO 實(shí)驗(yàn)(連載中)

2023-05-29 14:08 作者:華清遠(yuǎn)見(jiàn)研發(fā)中心  | 我要投稿

前言:

目前針對(duì)ARM Cortex-A7裸機(jī)開(kāi)發(fā)文檔及視頻進(jìn)行了二次升級(jí)持續(xù)更新中,使其內(nèi)容更加豐富,講解更加細(xì)致,全文所使用的開(kāi)發(fā)平臺(tái)均為華清遠(yuǎn)見(jiàn)FS-MP1A開(kāi)發(fā)板(STM32MP157開(kāi)發(fā)板)

針對(duì)對(duì)FS-MP1A開(kāi)發(fā)板,除了Cortex-A7裸機(jī)開(kāi)發(fā)篇外,還包括其他多系列教程,包括Cortex-M4開(kāi)發(fā)篇、FreeRTOS篇、Linux基礎(chǔ)及應(yīng)用開(kāi)發(fā)篇、Linux系統(tǒng)移植篇、Linux驅(qū)動(dòng)開(kāi)發(fā)篇、硬件設(shè)計(jì)篇、人工智能機(jī)器視覺(jué)篇、Qt應(yīng)用編程篇、Qt綜合項(xiàng)目實(shí)戰(zhàn)篇等。除此之外計(jì)劃針對(duì)Linux系統(tǒng)移植篇、Linux驅(qū)動(dòng)開(kāi)發(fā)篇均會(huì)進(jìn)行文檔及視頻的二次升級(jí)更新敬請(qǐng)關(guān)注!

開(kāi)發(fā)板更多資料可關(guān)注華清遠(yuǎn)見(jiàn)在線實(shí)驗(yàn)室(微信號(hào):hqyjlab)領(lǐng)取``


Cortex-A7 GPIO 實(shí)驗(yàn)

Cortex-A7 GPIO 點(diǎn)燈編程

GPIO 控制技術(shù)是接口技術(shù)中最簡(jiǎn)單的一種。本章通過(guò)介紹 STM32MP157 芯片的 GPIO 控制方法,

讓讀者初步掌握控制硬件接口的方法。本章的主要內(nèi)容:

GPIO 功能介紹

STM32MP157 芯片的 GPIO 控制器詳解

STM32MP157 的 GPIO 應(yīng)用

GPIO 功能介紹

首先應(yīng)該理解什么是 GPIO。GPIO 的英文全稱為 General-Purpose IO ports,也就是通用 IO 接口。在嵌入式系統(tǒng)中常常有數(shù)量眾多,但是結(jié)構(gòu)卻比較簡(jiǎn)單的外部設(shè)備/電路,對(duì)這些設(shè)備/電路,有的需要 CPU 為之提供控制手段,有的則需要被 CPU 用做輸入信號(hào)。而且,許多這樣的設(shè)備/電路只要求一位,即只要有開(kāi)/關(guān)兩種狀態(tài)就夠了。比如,控制某個(gè) LED 燈亮與滅,或者通過(guò)獲取某個(gè)引腳的電平屬性來(lái)達(dá)到判斷外圍設(shè)備的狀態(tài)。對(duì)這些設(shè)備/電路的控制,使用傳統(tǒng)的串行口或并行口都不合適。所以在微控制器芯片上一般都會(huì)提供一個(gè)“通用可編程 IO 接口”,即 GPIO。接口至少有兩個(gè)寄存器,即“通用 IO 控制寄存器”與“通用 IO 數(shù)據(jù)寄存器”。數(shù)據(jù)寄存器的各位都直接引到芯片外部,而對(duì)這種寄存器中

每一位的作用,即每一位的信號(hào)流通方向,則可以通過(guò)控制寄存器中對(duì)應(yīng)位獨(dú)立地加以設(shè)置。比如,可以設(shè)置某個(gè)引腳的屬性為輸入、輸出或其他特殊功能。

在實(shí)際的 MCU 中,GPIO 是有多種形式的。比如,有的數(shù)據(jù)寄存器可以按照位尋址,有些卻不能按照位尋址,這在編程時(shí)就要區(qū)分了。比如傳統(tǒng)的 8051 系列,就區(qū)分成可位尋址和不可位尋址兩種寄存器。另外,為了使用的方便,很多 MCU 的 GPIO 接口除必須具備兩個(gè)標(biāo)準(zhǔn)寄存器外,還提供上拉寄存器,可以設(shè)置 IO 的輸出模式是高阻,還是帶上拉的電平輸出,或者不帶上拉的電平輸出。這在電路設(shè)計(jì)中,外圍電路就可以簡(jiǎn)化不少。

STM32MP1 芯片的 GPIO 控制器詳解

每個(gè)通用 I/O 端口有四個(gè) 32 位配置寄存器(GPIOx_MODER,GPIOx_OTYPE,GPIOx_OSPEEDR 和GPIOx_PUPDR),兩個(gè) 32 位數(shù)據(jù)寄存器(GPIOx_IDR 和 GPIOx_ODR)和 32 位設(shè)置/重置寄存器(GPIOx_BSRR)。此外,所有 GPIO 都有一個(gè) 32 位的鎖定寄存器(GPIOx_LCKR)和兩個(gè) 32 位的備用函數(shù)選擇寄存器(GPIOx_AFRH 和 GPIOx_AFRL)。

主要特征

每個(gè)通用 I/O (GPIO)端口的端口位都可以通過(guò)軟件在幾種模式下單獨(dú)配置:

浮空輸入

浮空輸入在 VDD 和 VSS 所在路徑的兩個(gè)開(kāi)關(guān)同時(shí)斷開(kāi)。此時(shí)沒(méi)有上拉和下拉的情況,所以當(dāng)IO 口沒(méi)有接輸入的時(shí)候,此時(shí)的電平會(huì)是一個(gè)不確定的值,也就是我們所說(shuō)的浮空。電平會(huì)處于一個(gè)跳變的狀態(tài),一會(huì)高,一會(huì)低。只有輸入了一個(gè)高/低電平才會(huì)確定下來(lái)。

這么做的優(yōu)勢(shì)在于輸入模式的電平會(huì)完全取決于外部電路而與內(nèi)部電路無(wú)關(guān)。但是在沒(méi)有外部電路接入的時(shí)候,IO 腳浮空會(huì)使得電平不確定TTL

施密特觸發(fā)器由于電源的特性,或者是由于外部開(kāi)關(guān)輸入的特性,輸入的數(shù)字信號(hào),極有可能會(huì)出現(xiàn)脈沖等噪聲的影響,為了讓我們的波形更好看,或者信號(hào)更加清晰,所以就設(shè)置了 TTL施密特觸發(fā)器這個(gè)東西。經(jīng)過(guò)之后,我們就會(huì)把這個(gè)數(shù)字信息存儲(chǔ)在輸入數(shù)據(jù)寄存器中。這樣我們就讀到了 IO 過(guò)來(lái)的數(shù)字信號(hào)

輸入上拉

輸入上拉 VDD 所在上拉電阻開(kāi)關(guān)閉合,下拉電阻的開(kāi)關(guān)斷開(kāi)。

此時(shí)的電平就是 VDD 的電平,此時(shí)讀取到的電平就是高電平。如果輸入了一個(gè)高電平,VDD 和 O點(diǎn)(上拉電阻和下拉電阻中間)之間就幾乎沒(méi)有電勢(shì)差,此時(shí) O 點(diǎn)(上拉電阻和下拉電阻中間)的電平就仍然是高電平,讀取到的電平就是高電平。但是由于在沒(méi)有電壓輸入的時(shí)候,電平也是高電平,所以這一種輸入情況下是沒(méi)有辦法確定信號(hào)是否輸入了。

當(dāng)輸入信號(hào)是一個(gè)低電平的時(shí)候,此時(shí) O 點(diǎn)(上拉電阻和下拉電阻中間)的電平的電平就會(huì)變成低電平,那么 VDD 和 O 點(diǎn)(上拉電阻和下拉電阻中間)之間形成了電勢(shì)差,但是因?yàn)樯侠娮璧拇嬖?,所以不?huì)出現(xiàn)一個(gè)大電流。此時(shí)主控制器讀取到的一個(gè)電平就是一個(gè)低電平。

在上拉輸入的情況下,低電平的是能夠非常明顯的讀取到的。

上拉輸入的好處就是輸入的電平不會(huì)上下浮動(dòng)而導(dǎo)致輸入信號(hào)不穩(wěn)定,在沒(méi)有信號(hào)輸入的情況下可以穩(wěn)定在高電平。

注意:上拉和下拉電阻電路的開(kāi)關(guān)在實(shí)際應(yīng)用中一般使用 MOS 管來(lái)代替開(kāi)關(guān)來(lái)提到。

輸入下拉

VDD 所在上拉電阻開(kāi)關(guān)斷開(kāi),下拉電阻的開(kāi)關(guān)閉合。

此時(shí) O 點(diǎn)(上拉電阻和下拉電阻中間)電平就是 VSS 的電平,此時(shí)讀取到的電平就是低電平。此時(shí)輸入的電平如果是一個(gè)低電平,就沒(méi)有辦法和之前的情況進(jìn)行區(qū)分。但如果輸入的是一個(gè)高電平,O 點(diǎn)(上拉電阻和下拉電阻中間)和 VSS 之間同樣形成了電勢(shì)差,O 點(diǎn)(上拉電阻和下拉電阻中間)的電平會(huì)變成外部的高電平,那么主控得到的就是一個(gè)高電平信號(hào)。

下拉輸入的好處就是輸入的電平不會(huì)上下浮動(dòng)而導(dǎo)致輸入信號(hào)不穩(wěn)定,在沒(méi)有信號(hào)輸入的情況下可以穩(wěn)定在低電平。

注意:上拉和下拉電阻電路的開(kāi)關(guān)在實(shí)際應(yīng)用中一般使用 MOS 管來(lái)代替開(kāi)關(guān)來(lái)提到。

模擬輸入

有時(shí)候我們需要用 AD 采集 IO 口上面的真實(shí)電壓。這就有了我們所需要的模擬輸入。為了讓外部的電壓真實(shí)的讀取到單片機(jī)的 AD 模塊,我們既不能閉合上拉和下拉的開(kāi)關(guān),也不能讓信號(hào)經(jīng)過(guò)施密特觸發(fā)器。

開(kāi)漏輸出

在開(kāi)漏輸出中 P-MOS 不工作,這里我們只考慮 N-MOS。我們可以把這一個(gè) MOS 管當(dāng)成一個(gè)三極管,對(duì)于圖中所示的這種三極管我們可以簡(jiǎn)單的理解成一個(gè)水龍頭,左側(cè)就是一個(gè)水龍頭開(kāi)關(guān),當(dāng)通過(guò)控制器給一個(gè)高電平的時(shí)候,信號(hào)經(jīng)過(guò)輸出控制電路會(huì)對(duì)該信號(hào)取反,既當(dāng)控制器給出高電平時(shí)會(huì)輸出低。此時(shí) N-MOS 不工作,O 點(diǎn)(P-MOS 和 N-MOS 中間)和 VSS 就會(huì)導(dǎo)通。O 點(diǎn)(P-MOS和 N-MOS 中間)的輸出就是一種反向器的輸出,也就是 O 點(diǎn)(P-MOS 和 N-MOS 中間)的電平會(huì)和左側(cè) MOS 的柵極(三極管的基極)相反

所以說(shuō),開(kāi)漏輸出就很好理解了。當(dāng)我們給一個(gè)高電平的時(shí)候,MOS 管關(guān)閉,此時(shí)輸出的電壓就是一個(gè)浮空,即不確定的電壓。如果給一個(gè)低電平,那么 MOS 管導(dǎo)通,相當(dāng)于 IO 口與 VSS 相連,此處就輸出了一個(gè)低電平電壓。

這樣做有以下兩個(gè)好處

一、雖然我們可以看到開(kāi)漏輸出是沒(méi)有辦法在內(nèi)部輸出一個(gè)高電平,但是這一個(gè)看似是缺點(diǎn)。其實(shí)實(shí)際上是一種優(yōu)點(diǎn)。我們可以得到,當(dāng)給一個(gè)高電平的時(shí)候,MOS 管沒(méi)有導(dǎo)通,此時(shí)電壓不確定導(dǎo)致無(wú)法輸出高電平,但是一旦我們?cè)谕獠吭黾右粋€(gè)上拉,那么這一個(gè)缺點(diǎn)就會(huì)被有效避免。并且,因?yàn)槭俏覀冏约涸O(shè)計(jì)一個(gè)上拉,這個(gè)上拉的電壓是由我們自己確定,這樣我們就可以根據(jù)外部電路需要多少 V 的高電平來(lái)給這一個(gè)上拉的電壓

二、開(kāi)漏輸出的實(shí)質(zhì)其實(shí)就是一個(gè) OD 門(OD:漏極輸出(Open Drain))。而在數(shù)電中,OD 門有一個(gè)非常重要的特性就是可以實(shí)現(xiàn)線與的功能,簡(jiǎn)單來(lái)說(shuō),就是在像 IIC 這樣的總線協(xié)議中,只要有一個(gè)給低電平,那么總線都會(huì)被拉低。

推挽輸出

推挽輸出就是可以需要利用兩個(gè)不同的 MOS 管來(lái)實(shí)現(xiàn)輸出。

P-MOS 和 N-MOS 是不同的控制方式,當(dāng)給一個(gè)高電平的時(shí)候經(jīng)過(guò)輸出控制電路后被轉(zhuǎn)換為低電平,P-MOS 導(dǎo)通,N-MOS 不導(dǎo)通,此時(shí) IO 口接通在 VDD,此時(shí)輸出的是高電平。當(dāng)給一個(gè)低電平的時(shí)候,則是 N-MOS 導(dǎo)通,P-MOS 不導(dǎo)通,此時(shí) IO 口接通在 VSS 電源上面,此時(shí)輸出的是高電平。使用 MOS 管的優(yōu)勢(shì)在于帶載能力強(qiáng)。

推挽復(fù)用功能和開(kāi)漏復(fù)用功能

復(fù)用推挽和復(fù)用開(kāi)漏其實(shí)很簡(jiǎn)單,在你理解了開(kāi)漏和推挽的原理之后,如果你不想用單片機(jī)內(nèi)部來(lái)輸出,那么你可以進(jìn)行復(fù)用,將輸出轉(zhuǎn)移到其他外設(shè)上面

寄存器每個(gè) I/O 端口位都是自由可編程的,然而 I/O 端口寄存器必須是以 32 位字、半字或字節(jié)的形式訪問(wèn)。GPIOx_BSRR 和 GPIOx_BRR 寄存器允許對(duì)任何 GPIOx_ODR 進(jìn)行原子讀/修改訪問(wèn)寄存器。這樣,在讀取和修改之間就沒(méi)有發(fā)生 IRQ 的風(fēng)險(xiǎn)訪問(wèn)。

下面介紹在 GPIO 控制時(shí)常用的寄存器。

匯編控制點(diǎn)燈實(shí)驗(yàn)

實(shí)驗(yàn)?zāi)康?/span>

本示例將利用匯編語(yǔ)言控制 STM32MP157 開(kāi)發(fā)板的三個(gè) LED 發(fā)光二極管,使其有規(guī)律閃爍。通過(guò)本實(shí)例熟悉、掌握匯編語(yǔ)言的使用方法。

實(shí)驗(yàn)內(nèi)容

本次實(shí)驗(yàn)以 PZ5 管腳所對(duì)應(yīng)的 LED1 為例進(jìn)行編程,由原理圖可知 LED1 對(duì)應(yīng) D35,當(dāng) PZ5 為高電平時(shí) D35 點(diǎn)亮,當(dāng) PZ5 為低電平時(shí) D35 熄滅。

寄存器設(shè)置?

查看原理圖可得, LED1 對(duì)應(yīng)可由 PZ5 引腳控制,為了實(shí)現(xiàn)控制 LED 燈的目的,首先使能對(duì)應(yīng) GPIO 時(shí)鐘,需要通過(guò)配置 MODER 寄存器將對(duì)應(yīng)的端口配置成輸出模式,通過(guò) OTYPER 設(shè)置輸出類 型,然后可以通過(guò) ODR 寄存器實(shí)現(xiàn) LED 燈的點(diǎn)亮與熄滅。

程序編寫(xiě)

查看原理圖可得, LED1 對(duì)應(yīng)可由 PZ5 引腳控制,為了實(shí)現(xiàn)控制 LED 燈的目的,首先使能對(duì)應(yīng)GPIO 時(shí)鐘,需要通過(guò)配置 MODER 寄存器將對(duì)應(yīng)的端口配置成輸出模式,通過(guò) OTYPER 設(shè)置輸出類型,然后可以通過(guò) ODR 寄存器實(shí)現(xiàn) LED 燈的點(diǎn)亮與熄滅。

相關(guān)代碼如下

實(shí)驗(yàn)步驟

1、 導(dǎo)入工程源碼

相關(guān)內(nèi)容請(qǐng)參考導(dǎo)入一個(gè)已有工程章節(jié)導(dǎo)入已有工程。

光盤實(shí)驗(yàn)源碼路徑:【資料光盤\華清遠(yuǎn)見(jiàn)-FS-MP1A 開(kāi)發(fā)資料-2020-11-06\02-程序源碼\03-ARM 體系結(jié)構(gòu)與接口技術(shù)\Cortex-A7\h_led】

2、 連接好開(kāi)發(fā)板,打開(kāi)調(diào)試工具,準(zhǔn)備調(diào)試

具體方法可以參考 Eclipse Debug 調(diào)試章節(jié),當(dāng)程序正常運(yùn)行時(shí),可以發(fā)現(xiàn) LED 燈有規(guī)律的閃爍

?

GPIO 控制點(diǎn)燈實(shí)驗(yàn)

?本章節(jié)通過(guò)一個(gè)簡(jiǎn)單實(shí)例說(shuō)明 STM32MP157 的 GPIO 接口的輸出功能

?實(shí)驗(yàn)?zāi)康?/span>

本示例將利用 STM32MP157 的 PZ5 這個(gè) I/O 引腳控制開(kāi)發(fā)板中 LED 發(fā)光二極管,使其有規(guī)律閃爍。

實(shí)驗(yàn)內(nèi)容

關(guān)于 LED 燈的原理圖可以參考匯編控制點(diǎn)燈實(shí)驗(yàn)章節(jié)。

程序編寫(xiě)

相關(guān)代碼如下

實(shí)驗(yàn)步驟

1、 導(dǎo)入工程源碼

相關(guān)內(nèi)容請(qǐng)參考導(dǎo)入一個(gè)已有工程章節(jié)導(dǎo)入已有工程。

光盤實(shí)驗(yàn)源碼路徑:【資料光盤\華清遠(yuǎn)見(jiàn)-FS-MP1A 開(kāi)發(fā)資料-2020-11-06\02-程序源碼\03-ARM 體系結(jié)構(gòu)與接口技術(shù)\Cortex-A7\c_led

2、 連接好開(kāi)發(fā)板,打開(kāi)調(diào)試工具,準(zhǔn)備調(diào)試

具體方法可以參考 Eclipse Debug 調(diào)試章節(jié),當(dāng)程序正常運(yùn)行時(shí),可以發(fā)現(xiàn) LED 燈有規(guī)律的閃爍。

Cortex-A7 GPIO 按鍵編程

?在本章實(shí)驗(yàn)中,同樣對(duì) GPIO 編程,測(cè)試 I/O 的輸入功能,對(duì)于 GPIO 的有關(guān)描述不在贅述,本節(jié)以按鍵為例進(jìn)行實(shí)驗(yàn)。

實(shí)驗(yàn)?zāi)康?/span>

本次實(shí)驗(yàn)以采集按鍵狀態(tài)為例,輪詢檢測(cè)按鍵是否按下,以 LED 燈的亮滅進(jìn)行檢測(cè)。

實(shí)驗(yàn)內(nèi)容

1.寄存器設(shè)置

查看原理圖可得,STM32MP157 主板的按鍵對(duì)應(yīng) PA0 這個(gè) I/O 引腳,需要通過(guò)配置 GPIOZ_MODER寄存器將 PA0 端口配置成輸入模式,然后在 while 循環(huán)中通過(guò) GPIOZ_IDR 輪詢檢測(cè)是否有輸入值,另外可以參考 GPIO 控制點(diǎn)燈實(shí)驗(yàn)配置 LED 燈。

2.程序編寫(xiě)

相關(guān)代碼如下

實(shí)驗(yàn)步驟

1、 導(dǎo)入工程源碼

相關(guān)內(nèi)容請(qǐng)參考導(dǎo)入一個(gè)已有工程章節(jié)導(dǎo)入已有工程。

光盤實(shí)驗(yàn)源碼路徑:【資料光盤\華清遠(yuǎn)見(jiàn)-FS-MP1A 開(kāi)發(fā)資料-2020-11-06\02-程序源碼\03-ARM體系結(jié)構(gòu)與接口技術(shù)\Cortex-A7\c_key】

2、 連接好開(kāi)發(fā)板,打開(kāi)調(diào)試工具,準(zhǔn)備調(diào)試

具體方法可以參考 Eclipse Debug 調(diào)試章節(jié),當(dāng)程序正常運(yùn)行時(shí),可以發(fā)現(xiàn)當(dāng)按鍵按下時(shí),LED1燈點(diǎn)亮,當(dāng)按鍵抬起,LED1 燈一直處于熄滅狀態(tài)。

基于stm32mp157 linux開(kāi)發(fā)板ARM裸機(jī)開(kāi)發(fā)教程7:Cortex-A7 GPIO 實(shí)驗(yàn)(連載中)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
米林县| 泰宁县| 新野县| 巴彦淖尔市| 黄冈市| 汤原县| 上饶县| 香港| 大渡口区| 稷山县| 安顺市| 襄垣县| 遂川县| 靖宇县| 措勤县| 长沙县| 郓城县| 昂仁县| 汾西县| 大关县| 左权县| 元阳县| 绥芬河市| 定安县| 泾源县| 鄱阳县| 从江县| 新宾| 新余市| 麻城市| 马龙县| 双流县| 西昌市| 福建省| 滕州市| 云安县| 浑源县| 五大连池市| 秦皇岛市| 五莲县| 札达县|