色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

簡易實現GPIO應用程序在V85x上編寫

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

GPIO應用程序編寫

作者@chhjnavy

查找合適的GPIO

在這里我們選取 GPIOH14(注意目前開發使用這個pin 作為觸摸屏的pin腳,需要將觸摸屏connect斷開) ,因為可以通過排插使用杜邦線將其引出,用于連接別的設備。

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

計算GPIO IO號

Linux 系統中,GPIO 通常由 Pinctrl 系統進行管理。Linux 定義了 Pinctrl 框架,統一了各大 SoC 廠商的 Pin 管理方式,避免了各大廠商自行實現自己的 Pin 管理系統,是一個非常有用的功能。

每個gpio 都對應一個IO 號:
- PH14: 7 * 32 + 14 = 238
- PH13: 7 * 32 + 13 = 237
- PH12: 7 * 32 + 12 = 236
- PH11: 7 * 32 + 11 = 235

導出GPIO節點

通過終端操作手動導出:

echo 238 > /sys/class/gpio/export

查看導出的gpio節點

cd /sys/class/gpio

可以看到gpio238

如果通過應用程序導出,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;
}

根據IO 號導出gpio 節點是很重要的一個環節,接下來就可以通過gpio 節點,對gpio 進行操作。

設置高低電平

#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 設定為高電平輸出
 ? ?gpio_set_value(GPIOH14, XGPIO_HIGH );
 ? ?//將gpio238 設定為低電平輸出
 ? ?gpio_set_value(GPIOH14, XGPIO_LOW);
}

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 觸摸屏
    +關注

    關注

    42

    文章

    2315

    瀏覽量

    116613
  • soc
    soc
    +關注

    關注

    38

    文章

    4199

    瀏覽量

    218806
  • Linux
    +關注

    關注

    87

    文章

    11342

    瀏覽量

    210148
  • 應用程序
    +關注

    關注

    38

    文章

    3292

    瀏覽量

    57846
  • GPIO
    +關注

    關注

    16

    文章

    1216

    瀏覽量

    52282

原文標題:簡易實現GPIO應用程序在V85x上編寫

文章出處:【微信號:gh_79acfa3aa3e3,微信公眾號:全志在線】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    labview編寫應用程序W10能用嗎?

    labview編寫應用程序W10能用嗎?我2010版本編寫W10
    發表于 04-08 14:46

    怎樣測試am335x系統中編寫應用程序

    am335x的arm系統中編寫應用程序時,發現想將數據保存在文本文件中,下次啟動應用程序時就能從文件中讀出上次的數據。結果一直保存不成功,
    發表于 07-16 06:15

    如何在AVRX編寫應用程序

    AVRX系統具有哪些特點應用?如何在AVRX編寫應用程序
    發表于 09-26 09:13

    【沁恒微CH32V307評估板試用體驗】第一個應用程序編寫-LED流水燈

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

    全志V853芯片 如何在Tina V85x平臺切換sensor?

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

    每日推薦 | Tina V85x 平臺E907啟動方式,OpenHarmony征文活動獲獎名單

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

    全志V853芯片 如何在Tina V85x平臺切換sensor?

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

    如何將引導加載程序0x00000000和應用程序放置0x00008000?

    代碼的情況下編寫引導加載程序代碼 我將 s32kds 用于 arm ide,每當我嘗試刷新引導加載程序代碼時,它都會擦除整個閃存,包括我位于 0x00008000 的
    發表于 03-27 08:26

    鼠標應用程序設計

    鼠標應用程序設計     用匯編語言編寫的鼠標和鍵盤應用程序。   程序執行后
    發表于 06-12 23:17 ?1286次閱讀

    如何編寫C應用程序并在Cyclone V SoC DevKit中運行ARM DS-5 AE

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

    如何利用C/C++編寫應用程序加速內核運行

    SDAccel編譯器支持OpenCL C,C和C ++,用于定義FPGA執行的內核功能。 了解如何利用用C / C ++編寫的現有函數作為FPGA運行的OpenCL應用程序的加速內核。
    的頭像 發表于 11-20 06:40 ?2923次閱讀

    X-HDL V4.21應用程序免費下載

    X-HDL V4.21應用程序免費下載
    發表于 04-24 08:00 ?124次下載
    <b class='flag-5'>X</b>-HDL <b class='flag-5'>V</b>4.21<b class='flag-5'>應用程序</b>免費下載

    Tina Linux E907開發指南

    介紹v85X E907 的啟動環境和AMP 的環境搭建。
    的頭像 發表于 03-06 10:36 ?1155次閱讀
    Tina Linux E907開發指南

    基于OpenHarmony編寫GPIO平臺驅動和應用程序

    程序是基于OpenHarmony標準系統編寫的基礎外設類:GPIO驅動。
    的頭像 發表于 09-12 10:04 ?934次閱讀
    基于OpenHarmony<b class='flag-5'>編寫</b><b class='flag-5'>GPIO</b>平臺驅動和<b class='flag-5'>應用程序</b>

    怎樣codeblocks編寫程序

    CodeBlocks編寫程序是一項相對簡單而又重要的任務。CodeBlocks是一個廣泛使用的集成開發環境(IDE),它能夠幫助程序編寫
    的頭像 發表于 11-26 09:26 ?1700次閱讀
    主站蜘蛛池模板: 囯产精品一区二区三区线 | 沙发上小泬12P | 久草在线新是免费视频 | 国产偷抇久久精品A片蜜臀A | 国产三级多多影院 | 99成人在线 | A片毛片免费视频在线看 | 男女肉大捧进出全过程免费 | 日韩精品真人荷官无码 | 午夜影视不用充钱的免费 | 久久视频在线视频观看精品15 | 大地影院在线播放 | 男人扒开添女人屁股 | 国产成人精品视频免费大全 | 无人影院在线播放 | 久久精品视频在线直播6 | 亚洲色欲色欲WWW在线丝 | 国产精品爽爽久久久久久蜜桃网站 | 久久综合久综合久久鬼色 | 精品福利一区 | 午夜免费国产体验区免费的 | 日韩a视频在线观看 | 亚洲性无码AV久久成人 | 久久综合久久鬼色 | 免费毛片a在线观看67194 | 旧里番6080在线观看 | 亚洲精品午夜VA久久成人 | 丝袜情趣在线资源二区 | 果冻传媒AV精品一区 | 日韩专区亚洲国产精品 | 国产成人免费片在线视频观看 | 韩国g奶空姐 | 暖暖 免费 日本 高清 在线1 | 亚洲国产精品免费线观看视频 | 国产做国产爱免费视频 | 高清无码中文字幕在线观看视频 | 亚洲高清无在码在线无弹窗 | 又黄又粗又爽免费观看 | 一本道亚洲区免费观看 | 久久亚洲这里只有精品18 | 国产人妻精品久久久久久很牛 |