RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡(jiǎn)易實(shí)現(xiàn)GPIO應(yīng)用程序在V85x上編寫

全志在線 ? 來源:全志在線開發(fā)者論壇 ? 2023-05-19 09:33 ? 次閱讀

GPIO應(yīng)用程序編寫

作者@chhjnavy

查找合適的GPIO

在這里我們選取 GPIOH14(注意目前開發(fā)使用這個(gè)pin 作為觸摸屏的pin腳,需要將觸摸屏connect斷開) ,因?yàn)榭梢酝ㄟ^排插使用杜邦線將其引出,用于連接別的設(shè)備。

4fa95f84-f575-11ed-90ce-dac502259ad0.png

計(jì)算GPIO IO號(hào)

Linux 系統(tǒng)中,GPIO 通常由 Pinctrl 系統(tǒng)進(jìn)行管理。Linux 定義了 Pinctrl 框架,統(tǒng)一了各大 SoC 廠商的 Pin 管理方式,避免了各大廠商自行實(shí)現(xiàn)自己的 Pin 管理系統(tǒng),是一個(gè)非常有用的功能。

每個(gè)gpio 都對(duì)應(yīng)一個(gè)IO 號(hào):
- PH14: 7 * 32 + 14 = 238
- PH13: 7 * 32 + 13 = 237
- PH12: 7 * 32 + 12 = 236
- PH11: 7 * 32 + 11 = 235

導(dǎo)出GPIO節(jié)點(diǎn)

通過終端操作手動(dòng)導(dǎo)出:

echo 238 > /sys/class/gpio/export

查看導(dǎo)出的gpio節(jié)點(diǎn)

cd /sys/class/gpio

可以看到gpio238

如果通過應(yīng)用程序?qū)С?,code 如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 


#define GPIOH14 238


#define XGPIO_HIGH 1
#define XGPIO_LOW  0


/****************************************************************
* Constants
****************************************************************/


#define SYSFS_GPIO_DIR "/sys/class/gpio"
#define POLL_TIMEOUT (3 * 1000) /* 3 seconds */
#define MAX_BUF 64


/****************************************************************
 * gpio_export
 ****************************************************************/
int gpio_export(unsigned int gpio)
{
  int fd, len;
  char buf[MAX_BUF];


  fd = open(SYSFS_GPIO_DIR"/export", O_WRONLY);
  printf("open device ==================fd = %d
", fd);
  if (fd < 0) {
 ? ? ? ?printf("gpio/export
");
 ? ? ? ?return fd;
 ? ?}


 ? ?len = snprintf(buf, sizeof(buf), "%d", gpio);
 ? ?write(fd, buf, len);


 ? ?close(fd);


 ? ?return 0;
}

根據(jù)IO 號(hào)導(dǎo)出gpio 節(jié)點(diǎn)是很重要的一個(gè)環(huán)節(jié),接下來就可以通過gpio 節(jié)點(diǎn),對(duì)gpio 進(jìn)行操作。

設(shè)置高低電平

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 


#include "gpioAPIs.h"


/****************************************************************
* Constants
****************************************************************/


#define SYSFS_GPIO_DIR "/sys/class/gpio"
#define POLL_TIMEOUT (3 * 1000) /* 3 seconds */
#define MAX_BUF 64


/****************************************************************
 * gpio_export
 ****************************************************************/
int gpio_export(unsigned int gpio)
{
  int fd, len;
  char buf[MAX_BUF];


  fd = open(SYSFS_GPIO_DIR"/export", O_WRONLY);
  printf("open device ==================fd = %d
", fd);
  if (fd < 0) {
 ? ? ? ?printf("gpio/export
");
 ? ? ? ?return fd;
 ? ?}


 ? ?len = snprintf(buf, sizeof(buf), "%d", gpio);
 ? ?write(fd, buf, len);


 ? ?close(fd);


 ? ?return 0;
}


/****************************************************************
 * gpio_unexport
 ****************************************************************/
int gpio_unexport(unsigned int gpio)
{
 ? ?int fd, len;
 ? ?char buf[MAX_BUF];


 ? ?fd = open(SYSFS_GPIO_DIR"/unexport", O_WRONLY);
 ? ?if (fd < 0) {
 ? ? ? ?printf("gpio/export
");
 ? ? ? ?return fd;
 ? ?}


 ? ?len = snprintf(buf, sizeof(buf), "%d", gpio);
 ? ?write(fd, buf, len);
 ? ?close(fd);
 ? ?return 0;
}


/****************************************************************
 * gpio_set_dir
 ****************************************************************/
int gpio_set_dir(unsigned int gpio, unsigned int out_flag)
{
 ? ?int fd, len;
 ? ?char buf[MAX_BUF];


 ? ?len = snprintf(buf, sizeof(buf), SYSFS_GPIO_DIR"/gpio%d/direction", gpio);


 ? ?fd = open(buf, O_WRONLY);
 ? ?if (fd < 0) {
 ? ? ? ?printf("gpio/direction
");
 ? ? ? ?return fd;
 ? ?}


 ? ?if (out_flag)
 ? ? ? ?write(fd, "out", 4);
 ? ?else
 ? ? ? ?write(fd, "in", 3);


 ? ?close(fd);
 ? ?return 0;
}


/****************************************************************
 * gpio_set_value
 ****************************************************************/
int gpio_set_value(unsigned int gpio, unsigned int value)
{
 ? ?int fd, len;
 ? ?char buf[MAX_BUF];


 ? ?len = snprintf(buf, sizeof(buf), SYSFS_GPIO_DIR"/gpio%d/value", gpio);


 ? ?fd = open(buf, O_RDWR );
 ? ?if (fd < 0) {
 ? ? ? ?printf("gpio/set-value
");
 ? ? ? ?return fd;
 ? ?}


 ? ?if (value)
 ? ? ? ?write(fd, "1", 2);
 ? ?else
 ? ? ? ?write(fd, "0", 2);


 ? ?close(fd);
 ? ?return 0;
}


/****************************************************************
 * gpio_get_value
 ****************************************************************/
int gpio_get_value(unsigned int gpio, unsigned int *value)
{
 ? ?int fd, len;
 ? ?char buf[MAX_BUF];
 ? ?char ch;


 ? ?len = snprintf(buf, sizeof(buf), SYSFS_GPIO_DIR"/gpio%d/value", gpio);


 ? ?fd = open(buf, O_RDWR );
 ? ?if (fd < 0) {
 ? ? ? ?printf("gpio/get-value
");
 ? ? ? ?return fd;
 ? ?}


 ? ?read(fd, &ch, 1);


 ? ?if (ch != '0') {
 ? ? ? ?*value = 1;
 ? ?} else {
 ? ? ? ?*value = 0;
 ? ?}


 ? ?close(fd);
 ? ?return 0;
}




/****************************************************************
 * gpio_set_edge
 ****************************************************************/


int gpio_set_edge(unsigned int gpio, char *edge)
{
 ? ?int fd, len;
 ? ?char buf[MAX_BUF];


 ? ?len = snprintf(buf, sizeof(buf), SYSFS_GPIO_DIR"/gpio%d/edge", gpio);


 ? ?fd = open(buf, O_WRONLY);
 ? ?if (fd < 0) {
 ? ? ? ?printf("gpio/set-edge
");
 ? ? ? ?return fd;
 ? ?}


 ? ?write(fd, edge, strlen(edge) + 1);
 ? ?close(fd);
 ? ?return 0;
}


/****************************************************************
 * gpio_fd_open
 ****************************************************************/


int gpio_fd_open(unsigned int gpio)
{
 ? ?int fd, len;
 ? ?char buf[MAX_BUF];


 ? ?len = snprintf(buf, sizeof(buf), SYSFS_GPIO_DIR"/gpio%d/value", gpio);


 ? ?fd = open(buf, O_RDONLY | O_NONBLOCK );
 ? ?if (fd < 0) {
 ? ? ? ?printf("gpio/fd_open
");
 ? ?}
 ? ?return fd;
}


/****************************************************************
 * gpio_fd_close
 ****************************************************************/


int gpio_fd_close(int fd)
{
 ? ?return close(fd);
}


void gpio_init() {


 ? ?gpio_export(GPIOH14);
 ? ?gpio_set_dir(GPIOH14, 0);
 ? ?//gpio_set_edge(GPIOH14, "rising");
}


void gpio_uninit() {
 ? ?gpio_unexport(GPIOH14);


}


void mian(void) {
 ? ?gpio_init();
 ? ?//將gpio238 設(shè)定為高電平輸出
 ? ?gpio_set_value(GPIOH14, XGPIO_HIGH );
 ? ?//將gpio238 設(shè)定為低電平輸出
 ? ?gpio_set_value(GPIOH14, XGPIO_LOW);
}

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 觸摸屏
    +關(guān)注

    關(guān)注

    42

    文章

    2301

    瀏覽量

    116118
  • soc
    soc
    +關(guān)注

    關(guān)注

    38

    文章

    4161

    瀏覽量

    218160
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209323
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3265

    瀏覽量

    57677
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1204

    瀏覽量

    52051

原文標(biāo)題:簡(jiǎn)易實(shí)現(xiàn)GPIO應(yīng)用程序在V85x上編寫

文章出處:【微信號(hào):gh_79acfa3aa3e3,微信公眾號(hào):全志在線】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    labview編寫應(yīng)用程序W10能用嗎?

    labview編寫應(yīng)用程序W10能用嗎?我2010版本編寫W10
    發(fā)表于 04-08 14:46

    怎樣測(cè)試am335x系統(tǒng)中編寫應(yīng)用程序

    am335x的arm系統(tǒng)中編寫應(yīng)用程序時(shí),發(fā)現(xiàn)想將數(shù)據(jù)保存在文本文件中,下次啟動(dòng)應(yīng)用程序時(shí)就能從文件中讀出上次的數(shù)據(jù)。結(jié)果一直保存不成功,
    發(fā)表于 07-16 06:15

    如何在AVRX編寫應(yīng)用程序?

    AVRX系統(tǒng)具有哪些特點(diǎn)應(yīng)用?如何在AVRX編寫應(yīng)用程序?
    發(fā)表于 09-26 09:13

    【沁恒微CH32V307評(píng)估板試用體驗(yàn)】第一個(gè)應(yīng)用程序編寫-LED流水燈

    _rcc.c、ch32v30x_gpio.h/ch32v30x_gpio.c編寫一個(gè)LED_Init()函數(shù),具體代碼如下: (7)編寫LED流水燈
    發(fā)表于 05-21 18:44

    全志V853芯片 如何在Tina V85x平臺(tái)切換sensor?

    原文鏈接:https://bbs.aw-ol.com/topic/1666/作者@budbool目的V85x某方案目前默認(rèn)Sensor是GC2053。實(shí)際使用時(shí)若需要用到GC4663(比如wdr功能
    發(fā)表于 06-28 09:27

    每日推薦 | Tina V85x 平臺(tái)E907啟動(dòng)方式,OpenHarmony征文活動(dòng)獲獎(jiǎng)名單

    大家好,以下為電子發(fā)燒友推薦每日好帖,歡迎留言點(diǎn)評(píng)討論~1、全志V853芯片 Tina下RISC-V核E907啟動(dòng)方式的選擇推薦理由:Tina V85x 平臺(tái)E907支持2種啟動(dòng)方式
    發(fā)表于 08-08 10:14

    全志V853芯片 如何在Tina V85x平臺(tái)切換sensor?

    全志V853開發(fā)板購(gòu)買鏈接:https://item.hqchip.com/2500386536.html目的V85x某方案目前默認(rèn)Sensor是GC2053。實(shí)際使用時(shí)若需要用到GC4663(比如
    發(fā)表于 02-13 11:03

    如何將引導(dǎo)加載程序0x00000000和應(yīng)用程序放置0x00008000?

    代碼的情況下編寫引導(dǎo)加載程序代碼 我將 s32kds 用于 arm ide,每當(dāng)我嘗試刷新引導(dǎo)加載程序代碼時(shí),它都會(huì)擦除整個(gè)閃存,包括我位于 0x00008000 的
    發(fā)表于 03-27 08:26

    鼠標(biāo)應(yīng)用程序設(shè)計(jì)

    鼠標(biāo)應(yīng)用程序設(shè)計(jì)     用匯編語(yǔ)言編寫的鼠標(biāo)和鍵盤應(yīng)用程序。   程序執(zhí)行后
    發(fā)表于 06-12 23:17 ?1285次閱讀

    如何編寫C應(yīng)用程序并在Cyclone V SoC DevKit中運(yùn)行ARM DS-5 AE

    如何編寫C應(yīng)用程序并使用ARM DS-5 AE運(yùn)行在Cyclone V SoC DevKit
    的頭像 發(fā)表于 06-20 00:04 ?3952次閱讀
    如何<b class='flag-5'>編寫</b>C<b class='flag-5'>應(yīng)用程序</b>并在Cyclone <b class='flag-5'>V</b> SoC DevKit中運(yùn)行ARM DS-5 AE

    X-HDL V4.21應(yīng)用程序免費(fèi)下載

    X-HDL V4.21應(yīng)用程序免費(fèi)下載
    發(fā)表于 04-24 08:00 ?123次下載
    <b class='flag-5'>X</b>-HDL <b class='flag-5'>V</b>4.21<b class='flag-5'>應(yīng)用程序</b>免費(fèi)下載

    為ZynqberryZero編寫嵌入式C應(yīng)用程序

    電子發(fā)燒友網(wǎng)站提供《為ZynqberryZero編寫嵌入式C應(yīng)用程序.zip》資料免費(fèi)下載
    發(fā)表于 11-07 17:55 ?2次下載
    為ZynqberryZero<b class='flag-5'>編寫</b>嵌入式C<b class='flag-5'>應(yīng)用程序</b>

    Tina Linux E907開發(fā)指南

    介紹v85X E907 的啟動(dòng)環(huán)境和AMP 的環(huán)境搭建。
    的頭像 發(fā)表于 03-06 10:36 ?1094次閱讀
    Tina Linux E907開發(fā)指南

    基于OpenHarmony編寫GPIO平臺(tái)驅(qū)動(dòng)和應(yīng)用程序

    程序是基于OpenHarmony標(biāo)準(zhǔn)系統(tǒng)編寫的基礎(chǔ)外設(shè)類:GPIO驅(qū)動(dòng)。
    的頭像 發(fā)表于 09-12 10:04 ?892次閱讀
    基于OpenHarmony<b class='flag-5'>編寫</b><b class='flag-5'>GPIO</b>平臺(tái)驅(qū)動(dòng)和<b class='flag-5'>應(yīng)用程序</b>

    怎樣codeblocks編寫程序

    CodeBlocks編寫程序是一項(xiàng)相對(duì)簡(jiǎn)單而又重要的任務(wù)。CodeBlocks是一個(gè)廣泛使用的集成開發(fā)環(huán)境(IDE),它能夠幫助程序編寫
    的頭像 發(fā)表于 11-26 09:26 ?1594次閱讀
    RM新时代网站-首页