有關(guān)GPIO,先看來(lái)個(gè)嘲笑
招聘者:“聽聞過GPIO么?”
技術(shù)工程師:“聽聞過,常常用?!?/p>
“GPIO是啥?“”
“。。。。。。GPIO便是GPIO啊。。?!?/p>
“GPIO有什么作用?”
“。。。。。。不清楚。。。”
“好啦,你能回去了?!?/p>
下邊就來(lái)好好說(shuō)說(shuō)這一了解又生疏的GPIO。
GPIO是啥?
字面意思看,GPIO=General Purpose Input Output,通用性I/O。有時(shí)通稱為“IO口”。通用性,就是它是萬(wàn)花油,做什么都可以。I/O,就是既能當(dāng)鍵入口應(yīng)用,又能當(dāng)輸出口應(yīng)用。端口號(hào),便是電子器件上的一個(gè)腳位。如何使用?寫手機(jī)軟件操縱。
匯總:GPIO便是處理芯片上的一根做什么都可以的腳位。
講了這么多,堅(jiān)信不明白的人還是一頭霧水,我們沖著實(shí)例看一下GPIO如何使用對(duì)于下拉、往下拉、懸在空中、高阻、開漏、推挽這類的定義,能夠之后再漸漸地揣摩。
GPIO的簡(jiǎn)易使用方法
輸出操縱數(shù)據(jù)信號(hào)
GPIO操縱LED燈的電源開關(guān)
GPIO用于做電源開關(guān)操縱,是最普遍的應(yīng)用領(lǐng)域。
如圖,P21這一GPIO口,輸出1的情況下,LED403照亮,輸出0或是沒有輸出的情況下,LED403滅掉。
GPIO口是怎么被控制的呢?根據(jù)手機(jī)軟件編碼。必須閃燈的情況下啟用GPIO口拉升的涵數(shù),必須關(guān)燈的情況下啟用GPIO降低的涵數(shù),就可以完成操縱。涵數(shù)的實(shí)際操作,最后變成了向這一GPIO的硬件配置存儲(chǔ)器載入數(shù)據(jù)信息,硬件配置的情況會(huì)追隨存儲(chǔ)器的數(shù)據(jù)信息更改而更改。
硬件配置存儲(chǔ)器在這兒能夠了解為一個(gè)開關(guān)元件,如同你告知家中的家庭保姆說(shuō)“去吧大客廳的燈合上”,他就走以往按壓燈的電源開關(guān),隨后燈就滅了。你下的這一命令的姿勢(shì)等同于啟用了GPIO實(shí)際操作的涵數(shù),家庭保姆去按電源開關(guān)這一姿勢(shì)等同于涵數(shù)配備存儲(chǔ)器。
自然你也能夠立即去按這一電源開關(guān)(立即實(shí)際操作存儲(chǔ)器),這一作法盡管能工作中,可是在代碼設(shè)計(jì)中不是符合標(biāo)準(zhǔn)的。事后改動(dòng)中非常容易造成 操作失誤。操作過程中必須事先復(fù)位,配備GPIO的主要參數(shù),把存儲(chǔ)器創(chuàng)建插口給別的過程啟用等手機(jī)軟件類的實(shí)際操作,這兒也不詳細(xì)描述了。
鍵入終斷數(shù)據(jù)信號(hào)
重力傳感器輸出終斷數(shù)據(jù)信號(hào)給MCU的GPIO口
G-sensor,也稱為重力傳感器/瞬時(shí)速度感應(yīng)器/運(yùn)動(dòng)傳感器,檢測(cè)儀器是不是在健身運(yùn)動(dòng)的。我們平常用的藍(lán)牙手環(huán)的計(jì)步軟件關(guān)鍵便是依據(jù)G-sensor取樣回家的健身運(yùn)動(dòng)數(shù)據(jù)信息測(cè)算而成的。
機(jī)器設(shè)備沒動(dòng)的情況下,G-sensor和MCU全是休眠模式以節(jié)約用電量。
機(jī)器設(shè)備動(dòng)一動(dòng),G-sensor體會(huì)來(lái)到就被喚起了,就往終斷口邊(GSENSOR_INT)發(fā)一個(gè)上拉電阻數(shù)據(jù)信號(hào),MCU感受到這一終斷口的脈沖信號(hào)從低變?yōu)楦吡?,就撤出休眠狀態(tài)剛開始一切正常運(yùn)作。
隨后MCU就根據(jù)I2Capi接口載入G-sensor里的數(shù)據(jù)信息。
怎樣看待終斷呢?你已經(jīng)入睡,忽然有些人來(lái)約你,他就需要先將你搖醒才行。這就是將你的睡眠質(zhì)量終斷了,給你從睡眠質(zhì)量中被喚起(好似所述事例)。
一樣,假如你已經(jīng)看電視劇,忽然鈴聲響了,一看是女友來(lái)電話了,就需要把影片中止,保存影片當(dāng)今的播放視頻部位,隨后去接女友的電話。接完了電話,再再次從以前的播放視頻部位開播。
這一電話便是終斷數(shù)據(jù)信號(hào),儲(chǔ)存影片部位便是終斷回應(yīng)前的情況入棧,接聽電話的全過程便是終斷系統(tǒng)服務(wù),掛掉電話繼續(xù)播放便是終斷的情況出棧。
很有可能有些人要說(shuō),為何多此一舉,G-sensor不可以立即把數(shù)據(jù)信息發(fā)給MCU么?這是由于I2C只有由關(guān)鍵設(shè)備積極進(jìn)行傳輸數(shù)據(jù)的要求,從機(jī)器設(shè)備是不可以積極傳送數(shù)據(jù)的(只有任憑關(guān)鍵設(shè)備回來(lái)獲取數(shù)據(jù))。有關(guān)I2C協(xié)議書的內(nèi)容,請(qǐng)見類似文章。
只要是I2C插口且不斷工作中的機(jī)器設(shè)備,都必須有一個(gè)終斷輸出,用于告知服務(wù)器“我已經(jīng)準(zhǔn)備好數(shù)據(jù)信息了,你快點(diǎn)回來(lái)取回去吧”。
用GPIO做終斷,還必須尤其需注意一條:假如挑選這一終斷口來(lái)喚起系統(tǒng)軟件,那一定要對(duì)比處理芯片說(shuō)明書看清,挑選的終斷口是否可以使喚起系統(tǒng)軟件?
針對(duì)絕大多數(shù)單片機(jī)設(shè)計(jì),基本上每一個(gè)終斷口都能夠喚起系統(tǒng)軟件,但針對(duì)高cpu主頻的CPU,如手機(jī)上和平板的,并并不一定的GPIO都能夠配備成終斷,也并不一定的終斷都能喚起系統(tǒng)軟件。
假如挑選了一個(gè)不可以喚起系統(tǒng)軟件的終斷口做所述實(shí)例,一旦MCU進(jìn)到休眠狀態(tài),外接設(shè)備就無(wú)效了。
作為功能鍵鍵入
GPIO做按鍵檢測(cè)
功能鍵嚴(yán)苛而言也是個(gè)終斷。GPIO口默認(rèn)設(shè)置情況是低電頻,功能鍵按住后被拖到上拉電阻,這時(shí)系統(tǒng)軟件可以檢驗(yàn)到終斷,判斷為功能鍵按住。
直到功能鍵釋放出來(lái)了,GPIO口檢驗(yàn)到工作電壓重歸低電頻,就判斷為功能鍵松掉了。這類作法是單片機(jī)設(shè)計(jì)上較為普遍的作法。在智能化一些的硬件系統(tǒng)上,通常會(huì)出現(xiàn)單獨(dú)的硬件配置功能鍵插口(非GPIO口),在處理芯片內(nèi)部添加功能鍵控制板,根據(jù)硬件配置完成功能鍵的去抖、雙擊鼠標(biāo)和長(zhǎng)按分辨。
針對(duì)單片機(jī)設(shè)計(jì),一旦被功能鍵開啟以后,內(nèi)部就剛開始跑程序流程,每過好多個(gè)ms載入一次功能鍵情況,分辨功能鍵是不是被釋放出來(lái)。根據(jù)手機(jī)軟件完成去抖、雙擊鼠標(biāo)和長(zhǎng)按的作用。
圖上的電容器,用途是濾掉外界影響,防止被誤開啟,另外具有一定的功能鍵去抖功效。圖上的TVS管,是為了更好地避免 靜電感應(yīng)進(jìn)到CPU。
很有可能會(huì)有些人問,功能鍵按住便是按住了,怎么會(huì)顫動(dòng)?
由于功能鍵全是腳踏式的,2個(gè)銅片在觸碰的一瞬間,從分秒級(jí)的時(shí)間范圍看來(lái),會(huì)存有觸碰-斷掉-再觸碰那樣的輕度的顫動(dòng)。直至2個(gè)銅片緊緊的觸碰到一起以后,顫動(dòng)才會(huì)消退。說(shuō)白了功能鍵去顫動(dòng),便是根據(jù)廷時(shí)來(lái)清除掉觸碰再斷掉這類出現(xiàn)異常情況的。
假如GPIO口不足,可是必須做好幾個(gè)功能鍵的檢驗(yàn),還可以把功能鍵配備變成ADC,根據(jù)不一樣功能鍵造成不一樣的工作電壓,來(lái)運(yùn)用一個(gè)ADC口檢驗(yàn)到不一樣的鍵值。這一作法一般用以手機(jī)上3.5毫米有線耳機(jī)上的3個(gè)功能鍵的檢驗(yàn)。
GPIO的高級(jí)運(yùn)用
GPIO除開簡(jiǎn)易的I/O以外,還能夠做一些相對(duì)性繁雜的實(shí)際操作,比如仿真模擬I2C或SPI手機(jī)充電線、ADC工作電壓檢驗(yàn)、輸出PWM波型等。
這種作用一些能夠立即配備成硬件配置插口,還可以根據(jù)手機(jī)軟件來(lái)仿真模擬波型。
作為I2C插口
GPIO作為I2C系統(tǒng)總線
I2C時(shí)序圖
I2C是智能產(chǎn)品電源電路上最常見的傳輸數(shù)據(jù)系統(tǒng)總線,只必須2個(gè)線,就可以初始化好幾個(gè)從機(jī)器設(shè)備,可以雙重傳送,較大 速率達(dá)到400Kbps,特別適合傳送控制代碼和少量數(shù)據(jù)信息。
平常大伙兒用的G-sensor感應(yīng)器、光距離感應(yīng)器、電容式觸摸屏、LED燈控制板、監(jiān)控?cái)z像頭的操縱指令等,基本上全是I2C插口的。
GPIO口作為I2C,算作GPIO傳數(shù)據(jù)信息的最常見的方法。假如處理芯片內(nèi)部?jī)?nèi)置I2C控制板,能夠立即配備GPIO轉(zhuǎn)換到硬件配置I2C上。比如單片機(jī)設(shè)計(jì)基本上都能夠那么做。
假如處理芯片內(nèi)部的I2C插口不足用,還能夠根據(jù)手機(jī)軟件操縱GPIO口拉升拉低來(lái)仿真模擬I2C的波型和時(shí)鐘頻率,仍舊能夠作為I2C應(yīng)用。
一樣的仿真模擬手機(jī)充電線的作法,還能夠用GPIO來(lái)仿真模擬SPI。要是是帶數(shù)字時(shí)鐘的低速檔同歩手機(jī)充電線,都能夠用GPIO口來(lái)仿真模擬。
可是GPIO口不可以用于仿真模擬UART串口通信。由于UART沒有數(shù)字時(shí)鐘線,必須十分精確的依照承諾的間隔時(shí)間輸出波型,手機(jī)軟件計(jì)時(shí)器禁止,硬件配置計(jì)時(shí)器占有服務(wù)器資源多,因此 難以完成。
PWM輸出
GPIO輸出PWM波操縱蜂鳴片
不一樣pwm占空比的PWM波型
GPIO口輸出PWM波,跟作為I2C應(yīng)用的特性上是一樣的。操縱GPIO口 定時(shí)執(zhí)行拉升降低,就可以輸出PWM波型。
如圖,便是根據(jù)PWM來(lái)操縱外界升壓電路,驅(qū)動(dòng)器蜂鳴片發(fā)出聲響的。PWM還能夠用以操縱LED燈的變光,更改PWM輸出的pwm占空比,調(diào)整燈光效果色度
ADC取樣
GPIO作為ADC取樣,收集電池電壓
充電電池分壓電路后給ADC取樣
ADC,Analog-to-Digital Converter,把脈沖信號(hào)轉(zhuǎn)化成模擬信號(hào)。ADC的運(yùn)用范疇很廣,話筒聲頻數(shù)據(jù)信息的取樣、電流電壓數(shù)據(jù)信號(hào)的取樣、仿真模擬感應(yīng)器輸出的數(shù)據(jù)信息的量化分析等。
受制于精密度、測(cè)量范圍、取樣速率等,GPIO的ADC一般不做太繁雜的運(yùn)用,絕大多數(shù)情況下只做工作電壓收集。
如圖,把GPIO口配備變成ADC方式,收集電池電壓,用以做電池容量顯示信息。這一作法只適合做簡(jiǎn)易的電池電壓顯示信息,假如要做相近智能機(jī)的百分之一精密度的電池容量管理方法,還必須另加更高精密的ADC和充電電池賠償優(yōu)化算法。
GPIO做ADC,最常碰到的難題是:
一,并不一定的GPIO口能夠做ADC應(yīng)用,一定要看清說(shuō)明書!
二,ADC有工作電壓域限定的,3V供電系統(tǒng)的ADC精確測(cè)量不上超出3V的工作電壓。比如上邊第一張圖,MCU用3V充電電池供電系統(tǒng),這時(shí)GPIO/ADC的供電系統(tǒng)工作電壓是3V,較大 測(cè)量范圍也是3V,能夠精確測(cè)量到電池電壓。而第二張圖鋰電池工作電壓是4.2V,MCU供電系統(tǒng)是3V,GPIO/ADC工作標(biāo)準(zhǔn)電壓也是3V,就量不上那么高的工作電壓了。超過測(cè)量范圍精確測(cè)量出去的全是一樣的。因而運(yùn)用電阻分壓,把4.2V的電池電壓折半減少到2.1V,給3V測(cè)量范圍的ADC應(yīng)用。
1.《有關(guān)GPIO,先看來(lái)個(gè)嘲笑》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《有關(guān)GPIO,先看來(lái)個(gè)嘲笑》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/guonei/324860.html