日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

uboot更改gpio电平_ECBM系列教程4:单片机的手和脚——GPIO

發布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uboot更改gpio电平_ECBM系列教程4:单片机的手和脚——GPIO 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GPIO全稱叫做General-Purpose Input/Output,即通用輸入/輸出口。是單片機和外界交流的重要部件,你可能看到過沒有ADC的單片機、沒有定時器的單片機或者沒有串口的單片機,但是沒有GPIO的單片機是不存在的。

本篇教程不會過多去講解電路層面的原理,但會用實例演示GPIO的各方面特性。

首先讓我們看看本篇教程用到的開發板——Bread board。

一塊和面包板“天衣無縫”結合的開發板

在電路上,將一個LED的正極接到P3.7腳,負極接到GND。準備就緒后,打開之前建好的工程,接著打開gpio.h。

在控件界面里,能看到兩個設置組。一個是Px口使能,推薦只有在ROM空間不夠的情況才關掉不用的Px口使能。我之前遇到過,為了優化空間關掉了P2的使能,結果把模塊接到P2口上死活也通信不了,卡了一天才發現P2使能沒打開。二是深度優化,用于把不需要的gpio庫函數優化掉,理由同第一點,沒事別優化!

在上圖中,我們可以看到gpio庫一共有10個函數。接下來我們一一講解。

  • gpio_write:這是一個8位IO口寫函數,可以一次性寫入8位數據。gpio_write(GPIO_P0,0x06);的效果其實等同P0=0x06;其實該函數的作用主要還是提供給其他并口通信的外設庫使用。

  • gpio_read:這是一個8位IO口讀函數,可以一次性讀整個P口8個腳的數據。val=gpio_read(GPIO_P0);的效果等同于val=P0;所以就算是我,也會因為字數原因懶得用。不過它與直接用val=P0;的最大區別就是:讀取的Px口作為函數的參數是可以在程序運行的時候修改的。因此在外設庫使用該函數,就能在應用中切換P口而不用去改函數定義區里的代碼了。

  • gpio_in/gpio_out:既然說到I/O,當然核心就是這兩個函數啦。這兩個函數主要用于讀取某一個IO口的電平值和寫某一個IO口的電平值。gpio_out(D10,1);等同于P11=1;flag=gpio_in(D10);等同于flag=P10;和上面一樣,做成庫函數的最大優點,便是IO作為參數,可以隨意切換,甚至在單片機運行時切換都可以(具體的例子在解說外設庫的復用性時詳細說明)。

  • gpio_toggle:IO電平的翻轉函數,假設某個IO口原來是高電平,翻轉之后就變成了低電平。反之亦然。

  • gpio_in_fast/gpio_out_fast/gpio_toggle_fast:這三個函數是上面列舉的那三個的快速運行版,只會用在外設庫中,學習本教程的時候可以不用管他們。.

以上就是gpio的操作函數。那么究竟使用它們為了操作什么呢?這就不得不說數字電路的一個特性了(電路基礎穩固的人可以跳過這一段):數字電路里只有兩個明確狀態——0和1。0和1是一個虛擬的概念,是我們人為定義出來的。比如TTL電平里+5V代表1,+0V代表0。而在232電平里-12V代表1,+12V代表0。在文中提到的開發板里,由于板載單片機工作在3.3V,所以1代表+3.3V,操作IO輸出1就是讓IO輸出+3.3V的高電平;0代表+0V,操作IO輸出0就是讓IO輸出+0V的低電平。因為數字電路就是圍繞著1和0設計的,所以只要單片機按一定規律輸出1或者0就能控制數字電路!

還記得文章開頭的LED嗎?LED點亮的條件就是正極接VCC,負極接GND,且正負極壓差大于LED壓降(一般LED壓降為1.8V~3.0V)。那么如果你想點亮LED,在這個電路中,只要使P3.7腳輸出高電平3.3V就行了。那么立刻用庫函數寫一遍吧:

#include "ecbm_core.h" //加載庫函數的頭文件。 void main(){ //main函數,必須的。system_init(); //系統初始化函數,也是必須的。gpio_out(D37,1);//就是這一句啦,讓P3.7口輸出高電平3.3V。while(1){} }

需要注意的參數的形式為Dxx型,就是說P3.7口就是D37,P2.5口就是D25。運行結果如下:

小燈已經開始發出原諒的綠光了

那如果P3.7腳輸出0呢?那么P3.7腳的電壓將會是0V,而LED兩端都是0V,LED就不會亮了。

細心的你可能發現了,這LED的亮度根本不夠看,沒注意的話根本看不到它在發光(我在拍攝的時候也特意降低了曝光值才勉強讓它的亮度看起來明顯一些)。這就設計到IO工作模式了。當年工程師也發現了這些問題,所以為IO口在不同環境下的應用設計了不同的模式。在8051單片機中一共有4種。(為了照顧新手的理解能力,我不會去說高深的電路知識。)

  • 弱上拉模式:這是一種最常用的模式。所謂“上拉”,就是指把IO電平“拉”到電源VCC?!跋吕碑斎痪褪侵赴袸O電平“拉到”地GND。當IO獨立的時候,一切都好理解。但是當兩個IO連在一起的時候呢?如果一個IO輸出高電平,另一個輸出低電平,那么連起來會是什么電平呢?這種感覺就像是拔河,一個IO把電平往VCC拉,另一個IO把電平往GND拉。如果兩個勢均力敵的話,可能到2090年都不會有結果。所以為了讓電平明確,必須讓其中一個更“弱”一些。當初的設計者們選擇了讓“上拉”的能力弱一些。這樣再來競爭的時候,電平會立刻被更強的“下拉”拉到低電平。所以該模式適合單片機與外界的雙向通行。
  • 推挽模式:“推挽”這個名字來源于“推挽電路”,換成我們的理解,就是“上拉”能力和“下拉”能力都強!當時的設計者也知道,弱上拉模式雖然解決了競爭問題,但是如果驅動的電路里沒有競爭,又特別需要高電平驅動呢?于是推挽模式就出來了,它和弱上拉的區別就是加強了上拉能力,因此適用于驅動被動元件(就比如本篇提到的驅動LED燈)或者和外界的單向通信(只輸出不輸入)。
  • 高阻模式:有些朋友可能要問了,上面兩個模式都會使得IO上有一個確定的電平,那么這個電平會不會影響到我要讀取的信息呢?這個確實是有可能的,如果某個電路設計不好或者導線阻值影響等因素導致了目標信號的對上拉和下拉都很敏感,那么IO的默認電平是會有影響的。又或者一個帶ADC的單片機,想讀目標器件輸出的電壓值,那么這個電壓值被IO的電平這么一拉,就不是原來的值了。針對這種情況,高阻模式被設計出來。它的特點就是斷開了所有上下拉電路,使得IO不輸出電平值。沒錯,“高阻”并不是讓IO輸出電壓為0V,那個叫輸出低電平。高阻就是什么都不輸出,即不輸出高電平也不輸出低電平。就好像IO口和電源VCC、地GND之間被什么東西“阻斷”了一樣。因此這個模式主要是用于輸入的。同時由于它什么都不輸出的特性,也會用在端口復用上,保證端口不會被上下拉影響。
  • 開漏模式:和推挽一樣,“開漏”這個名字也是來源于內部電路構造的名字。其實就是把IO的上拉能力“廢掉”,只保留下拉能力。這樣做的目的之一就是電壓匹配,可能大家在之前都看過一些教單片機的書籍,里面用的單片機都是工作在5V的。那么5V的單片機要和我現在的3.3V單片機通信怎么辦?5V單片機輸出高電平的話,就是輸出+5V,這都大于了3.3V單片機的工作電壓了,鬧不好就得燒芯片。但是如果5V單片機處于開漏模式就安全了(同時3.3V單片機使用弱上拉模式,并輸出高電平),當5V單片機輸出高電平的時候,由于上拉能力沒有了,連線的電平會被3.3V單片機拉到+3.3V。當5V單片機輸出低電平的時候,由于下拉能力還在,而3.3V單片機是弱上拉模式,那么連線電平會被拉到低電平。這樣一來,連線上的電平就不會超過3.3V單片機的電源,就不會燒壞單片機了。
  • 四種模式都講解完了,那么能解決LED亮度的問題的辦法就出來了。既然亮度低的原因是上拉能力太弱,那么只要把P3.7口切換到推挽模式就可以了。

    兩個參數,一個是要設置的IO口,一個是IO的模式。IO模式的定義可以參考宏定義:

    所以代碼更改如下:

    #include "ecbm_core.h" //加載庫函數的頭文件。 void main(){ //main函數,必須的。system_init(); //系統初始化函數,也是必須的。gpio_mode(D37,GPIO_PP);//推挽模式。 gpio_out(D37,1); //就是這一句啦,讓P3.7口輸出高電平3.3V。while(1){} }

    運行效果如下:

    啊,原諒的光芒更加閃耀了呢。

    最后一個函數gpio_uppull其實用處不大,僅在某些應用會用到,比如IIC通信要求IO是開漏模式同時外接上拉電阻。而STC8內置了上拉電阻,可以節省一些元件錢。該函數就是用來打開和關閉上拉電阻的。在IIC章的時候會說明它。

    對于這篇文章,還有什么不懂的問題呢?歡迎留言告訴我。

    預告:下一篇文章中,會講解外部中斷的應用,敬請期待。

    總結

    以上是生活随笔為你收集整理的uboot更改gpio电平_ECBM系列教程4:单片机的手和脚——GPIO的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。