嵌入式Linux中GPIO設置的一些基本指令和步驟

一、GPIO的介紹

??嵌入式Linux中的GPIO(General Purpose Input/Output,通用輸入/輸出)是一種常用的接口,允許開發者直接控制硬件設備的某些引腳,進行諸如LED控制、傳感器讀取、設備狀態監測等任務。

二、設置步驟和示例

??在嵌入式Linux系統中,GPIO的設置和管理通常涉及以下幾個方面:

  • GPIO的導出和配置:首先,需要將GPIO引腳導出到用戶空間,以便用戶空間的程序可以訪問和控制它。這通常通過 /sys/class/gpio接口完成。例如,要將GPIO引腳79導出,可以使用以下命令:
echo 79> /sys/class/gpio/export

導出后,可以使用以下命令查看已導出的GPIO列表:

ls /sys/class/gpio
  • 設置GPIO的方向:GPIO引腳可以配置為輸入或輸出模式。對于輸出引腳,可以設置其電平(高電平或低電平)。對于輸入引腳,可以讀取其電平狀態。使用以下命令可以設置GPIO79為輸出模式:
echo out > /sys/class/gpio/gpio79/direction
  • 設置和讀取GPIO的電平:
    對于輸出引腳,可以使用以下命令設置其電平:
echo 1 > /sys/class/gpio/gpio79/value  # 設置GPIO79為高電平  
echo 0 > /sys/class/gpio/gpio79/value  # 設置GPIO79為低電平

對于輸入引腳,可以使用以下命令讀取其電平:

cat /sys/class/gpio/gpio79/value  # 讀取GPIO79的電平

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

#導出GPIO到用戶空間
echo 8 > /sys/class/gpio/export
#查看目錄的變化,增加了gpio8目錄
ls /sys/class/gpio/
#把gpio8從用戶空間中取消導出
echo 8 > /sys/class/gpio/unexport
#查看目錄變化,gpio8目錄消失了
ls /sys/class/gpio/

export文件:導出GPIO,該文件只能寫不能讀,用戶向該文件寫 入GPIO的編號N可以向內核申請將該編號的GPIO導出到用戶空間,若內核本 身沒有把該GPIO用于其它功能,那么在/sys/class/gpio目錄下會新增一 個對應編號的gpioN目錄,如導出了gpio8。

unexport文件:export的相反操作,取消導出GPIO,該文件同樣只能寫不能讀。如往unexport寫入8后,gpio8目錄消失了。
在這里插入圖片描述
查看GPIO8文件下的內容

ls -lH /sys/class/gpio/gpio8
或者
cd /sys/class/gpio/gpio8
ls 

在這里插入圖片描述
在這里插入圖片描述

常用的屬性文件介紹如下:

  1. direction文件:表示GPIO引腳的方向,它的可取值如下:

    • in:引腳為輸入模式。
    • out:引腳為輸出模式,且默認輸出電平為低。
    • low:引腳為輸出模式,且默認輸出電平為低。
    • high:引腳為輸出模式,且默認輸出電平為高。
  2. value文件:GPIO的電平,1表示高電平,0表示低電平。當GPIO被配置為輸出模式, 那么修改該文件的內容可以改變引腳的電平。也可配置為輸入模式,檢測電平的高低。

  3. edge文件:用于配置GPIO的中斷觸發方式,當GPIO被配置為中斷時,可以通過系統 的poll函數監聽。edge文件可取如下的屬性值:

    • none:沒有使用中斷模式。
    • rising:表示引腳為中斷輸入模式,上升沿觸發。
    • falling:表示引腳為中斷輸入模式,下降沿觸發。
    • both:表示引腳為中斷輸入模式,邊沿觸發。

三、其它

引腳值計算公式:

index = GPIOn_IOx = (n-1)*32 + x

A為1,B為2,C為3…
比如 :
PB15的引腳值為
index=(2-1)32+15=47
PE12的引腳值為
index=32
(5-1)+12 =140

??編寫GPIO驅動程序:對于更復雜的GPIO控制需求,可能需要編寫GPIO驅動程序。驅動程序通常包括GPIO的初始化、配置、讀取和設置等操作。 驅動程序編寫完成后,需要將其編譯為內核模塊,并使用insmod命令加載到內核中。
??請注意,具體的GPIO編號和操作方法可能因不同的硬件平臺和Linux版本而有所差異。因此,在實際操作中,請參考相關硬件和Linux版本的文檔和參考資料。
??以上是關于嵌入式Linux中GPIO設置的一些基本指令和步驟。通過學習和實踐這些指令和步驟,開發者可以更好地掌握GPIO的控制方法,實現各種硬件設備的控制和管理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715812.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715812.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715812.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

藍橋杯復習之二分法與前綴和

題目:最佳牛圍欄 題目鏈接:https://www.acwing.com/problem/content/104/ 題意:農夫約翰的農場由 N 塊田地組成,每塊地里都有一定數量的牛,其數量不會少于 1 頭,也不會超過 2000 頭。 約翰希望用圍欄將一…

GEE學習筆記003-訪問asset文件

在 Google Earth Engine (GEE) 中,您可以通過將 asset 文件的路徑直接寫入代碼中來引用它。這是通過在文件路徑前加上 ee.Image() 或 ee.FeatureCollection() 來實現的,具體取決于您想要導入的是影像還是矢量數據。 以下是導入 asset 文件并將其直接寫入…

第四十四天| 卡爾網 52. 攜帶研究材料、518. 零錢兌換 II、377. 組合總和 Ⅳ

01背包問題卡爾網 52. 攜帶研究材料 題目鏈接:52 攜帶研究材料 題干:小明是一位科學家,他需要參加一場重要的國際科學大會,以展示自己的最新研究成果。他需要帶一些研究材料,但是他的行李箱空間有限。這些研究材料包括…

centos7安裝夜鶯

一、前期準備 1.1.關閉防火墻,SELINUX systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0 sed -i "s/SELINUXenforcing/SELINUXdisabled/g" /etc/selinux/config查看狀態 systemctl status firewalld systemctl sta…

Vue開發實例(三)項目引入Element-UI

項目引入Element-UI 一、引入Element-UI二、注冊組件1、vue2使用element-ui2、vue3使用element-ui 三、使用Element組件1、輕微改造2、驗證element是否生效 一、引入Element-UI npm i element-ui --save npm install element-ui -S等待安裝完成 二、注冊組件 1、vue2使用ele…

【Leetcode每日一題】前綴和(難度?)(25)

1. 題目解析 題目鏈接:DP34 【模板】前綴和 這個問題的理解其實相當簡單,只需看一下示例,基本就能明白其含義了。 核心在于計算題目所給區間數組元素和返回即可。 2. 算法原理 為了提高計算效率,我們可以預先計算出一個「前綴…

在github的README.md中插入視頻;在github的README.md中添加gif演示動畫

最近需要再github中上傳項目的源代碼,應導師的要求,需要再README中加入對實驗視頻的展示,但是github的README.md其實就是一個markdown文件,據我的理解這個文件里應該無法直接插入視頻吧?(如果后續有辦法直接…

UE4c++ ConvertActorsToStaticMesh ConvertProceduralMeshToStaticMesh

UE4c ConvertActorsToStaticMesh 創建Edior模塊(最好是放Editor模塊畢竟是編輯器代碼)創建藍圖函數UBlueprintFunctionLibraryUTestFunctionLibrary.hUTestFunctionLibrary.cpp:.Build.cs 目標:為了大量生成模型,我們把虛幻帶有的方法遷移成函…

機器學習_10、集成學習-隨機森林

隨機森林算法 隨機森林(Random Forest)是一種集成學習方法,特別用于分類、回歸和其他任務,它通過構建多個決策樹(Decision Trees)在訓練時進行預測,并采用平均或多數投票的方式來提高整體模型的…

【vue】keep-alive清除緩存最簡單暴力的方法

項目場景: 場景一: 使用vue開發移動端, 有ABC三個頁面,點擊A跳轉到B,點B跳轉到C; 點C返回B,點B返回A。 場景二: 場景一實現之后,會出現這樣一個問題: 先從A跳…

LeetCode 每日一題 2024/2/26-2024/3/3

記錄了初步解題思路 以及本地實現代碼;并不一定為最優 也希望大家能一起探討 一起進步 目錄 2/26 938. 二叉搜索樹的范圍和2/27 2867. 統計樹中的合法路徑數目2/28 2673. 使二叉樹所有路徑值相等的最小代價2/29 2581. 統計可能的樹根數目3/1 2369. 檢查數組是否存在…

leetcode 熱題 100_三數之和

題解一: 雙指針遍歷:暴力解法的三層遍歷會超時,因此需要優化遍歷的過程。首先是需要對結果進行去重,這里采用排序跳過重復值的做法,在指針遍歷時跳過已經遍歷過的相同值。在第一層循環確定第一個值后,剩下兩…

模型部署 - onnx 的導出和分析 -(1) - PyTorch 導出 ONNX - 學習記錄

onnx 的導出和分析 一、PyTorch 導出 ONNX 的方法1.1、一個簡單的例子 -- 將線性模型轉成 onnx1.2、導出多個輸出頭的模型1.3、導出含有動態維度的模型 二、pytorch 導出 onnx 不成功的時候如何解決2.1、修改 opset 的版本2.2、替換 pytorch 中的算子組合2.3、在 pytorch 登記&…

vscode+remote突然無法連接服務器以及ssh連接出問題時的排錯方法

文章目錄 設備描述狀況描述解決方法當ssh連接出問題時的排錯方法 設備描述 主機:win11,使用vscode的remote-ssh插件 服務器:阿里云的2C2GUbuntu 22.04 UFIE 狀況描述 之前一直使用的是vscode的remote服務,都是能夠正常連接服務…

【Qt】界面布局

Qt常用布局 除Qt Designer支持可視化設計和布局界面之外,Qt 提供了代碼方式來進行界面布局, 以下是幾種常用的界面布局方式: 水平布局(QHBoxLayout)和垂直布局(QVBoxLayout): QHBo…

Redis常用數據結構--Zset

Zset ZADDZCARDZCOUNTZRANGE/ZREVRANGEZRANGEBYSCOREZPOPMAX/ZPOPMINBZPOPMAX/BZPOPMINZRANK/ZREVRANKZSCOREZREMZREMRANGEBYRANKZREMRANGEBYSCOREZINCRBYZINTERSTORE/ZUNIONSTORE內部編碼使?場景 ZADD 添加或者更新指定的元素以及關聯的分數到 zset 中,分數應該符…

如何在 Angular 測試中使用 spy

簡介 Jasmine spy 用于跟蹤或存根函數或方法。spy 是一種檢查函數是否被調用或提供自定義返回值的方法。我們可以使用spy 來測試依賴于服務的組件,并避免實際調用服務的方法來獲取值。這有助于保持我們的單元測試專注于測試組件本身的內部而不是其依賴關系。 在本…

空調壓縮機補充潤滑油的方法

空調壓縮機補充潤滑油的方法有三種,從吸氣截止閥旁邊通孔吸入,從加油孔中加入,從曲軸箱下部加入,具體操作步驟如下: 1關閉吸氣截止閥,啟動壓縮機幾分鐘,將曲軸箱中制冷劑排入冷凝器&#xff0c…

vue2結合electron開發桌面端應用

一、Electron是什么? Electron是一個使用 JavaScript、HTML 和 CSS 構建桌面應用程序的框架。 嵌入 Chromium 和 Node.js 到 二進制的 Electron 。允許您保持一個 JavaScript 代碼代碼庫并創建可在Windows、macOS和Linux上運行的跨平臺應用 。 Electron 經常與 Ch…

scrapy 中間件

就是發送請求的時候,會經過,中間件。中間件會處理,你的請求 下面是代碼: # Define here the models for your spider middleware # # See documentation in: # https://docs.scrapy.org/en/latest/topics/spider-middleware.html…