IOT-9608I-L 的GPIO应用

目录

概述

1 GPIO接口介绍

2 板卡上操作IO

2.1 查看IO驱动

2.2 使用ECHO操作IO

2.2.1 端口选择

 2.2.2 查看IO

 2.2.3 echo操作IO

3 C语言实现一个操作IO的案例

3.1 功能介绍

3.2 代码实现

3.3 详细代码

4 测试


测试视频地址:

IOT-9608I-L的一个简单测试,官方不提供源码内核,说是驱动程序已经做好了,直接用就行。

概述

本文主要IOT-9608I-L 的GPIO的一般操作方法,IoT-9608已经实现lIO相关的driver,开发者只需调用相应的接口,就可以实现配置IO为输出或者输入、以及置高或者置低操作。

1 GPIO接口介绍

IoT-9608提供了多路通用数字I/O接口,连接器为2×10Pin, 2.54mm间距的简易牛角座,
主板上的标志为“GPIO”。

板卡上的编号处理器 IOLinux 驱动的编号
P0.2GPIO0_2gpio2
P0.3GPIO0_3gpio3
P0.8GPIO0_8gpio8
P0.9GPIO0_9gpio9
P0.10GPIO0_10gpio10
P0.11GPIO0_11gpio11
P1.28GPIO1_28gpio60
P2.20GPIO2_10gpio74

2 板卡上操作IO

2.1 查看IO驱动

GPIO 的全部操作通过/sys/class/gpio 目录下的文件来完成。该目录下提供了 GPIO 的相关操作接口。该目录下默认有如下文件。使用如下命令查看IO信息:

ls /sys/class/gpio/   -l

执行命令后,系统会列出IO的驱动信息 

2.2 使用ECHO操作IO

2.2.1 端口选择

笔者选择gpio10作为测试端口,板卡上再该端口连接一个LED,通过观察LED的状态变化,以确定IO端口的状态。

板卡上的编号处理器 IOLinux 驱动的编号
P0.10GPIO0_10gpio10

 2.2.2 查看IO

需要操作某个 GPIO,只需操作 gpioN 里面的文件即可。例如操作 gpio10,首先进入gpio10 目录,查看里面可操作的文件:

cd gpio10ls

 2.2.3 echo操作IO

direction 用于设置或查询 GPIO 的方向,可能值为“in” 或者“out”,分别表示输入或者输出; value 表示 GPIO 的电平值,在输入模式下表示该引脚的电平(0 或者 1),在输出模式下表示写入该引脚的值(0 或者 1)。
1) 设置IO为输出端口

echo out > direction

设置IO 为高电平

echo 1 > value

设置IO 为低电平

echo 0 > value

2) 设置IO为输入端口

echo in > direction

读取IO的值

cat value

测试读取IO值功能

state-1:   将IO连接上一个高电平,读取IO的值

state-2:   将IO连接上一个高电平,读取IO的值 

3 C语言实现一个操作IO的案例

3.1 功能介绍

使用C语言编写一个案例,控制IO输出端口IO电平的变化,软件流程如下:

1)配置IO为输出模式

while( cnt   > 0  )

{

       1)设置IO端口为高电平,延时1s

       2)  设置IO端口为低电平,延时1s

       cnt --

}

3.2 代码实现

代码介绍

代码第17行: 进入到该驱动文件夹

代码第20行:使能IO操作

代码第24行:设置IO为输出

代码第29行:设置IO为高电平

代码第33行:设置IO为低电平

3.3 详细代码

/***************************************************************
Copyright  2024-2029. All rights reserved.
文件名     : IOT_9608_IO_Test.c
作者       : tangmingfei2013@126.com
版本       : V1.0
描述       : IOT_9608 IO端口测试程序
其他       : 无
日志       : 初版V1.0 2024/04/23
***************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
#include <string.h>
#include <time.h>int main(void)
{int count = 10;if(access("/sys/class/gpio/gpio10/value",F_OK) != 0){/* enable IO port */system("echo 10 > /sys/class/gpio/export"); }/*set IO as output */system("echo out > /sys/class/gpio/gpio10/direction");while( count-- ){/* turn on led */system("echo '1' > /sys/class/gpio/gpio10/value");sleep(1);/* turn off led */system("echo '0' > /sys/class/gpio/gpio10/value");sleep(1);}}/* End of this file */

4 测试

编译代码,然后将生成的.bin文件共享到NFS目录,然后在板卡中运行。

1)编译代码

2)板卡上运行程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/660548.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于昇腾AI | 英码科技EA500I使用AscendCL实现垃圾分类和视频物体分类应用

现如今&#xff0c;人工智能迅猛发展&#xff0c;AI赋能产业发展的速度正在加快&#xff0c;“AI”的需求蜂拥而来&#xff0c;但AI应用快速落地的过程中仍存在很大的挑战&#xff1a;向下需要适配的硬件&#xff0c;向上需要完善的技术支持&#xff0c;两者缺一不可。 基于此&…

Leetcode——面试题02.04.分割链表

面试题 02.04. 分割链表 - 力扣&#xff08;LeetCode&#xff09; 对于该链表OJ&#xff0c;我们两种大的方向&#xff1a; 1.在原链表上修改&#xff1b;2.创建新链表&#xff0c;遍历原链表。 在原链上进行修改&#xff1a;如果该节点的val小于x则继续往后走&#xff0c;如…

低成本微调长文本LLM

低成本微调长文本LLM 最近有一个需求微调长文本的大模型LLM。通常情况下&#xff0c;数据长度扩大后&#xff0c;需要的显存更大。在有限的设备资源上微调长文本的LLM显得很重要了。中文Llama2-7b支持的最大长度为4k&#xff0c;Qwen1.5-7b支持的最大长度为32k&#xff0c;Qwe…

代码随想录算法训练营DAY44|C++动态规划Part6|完全背包理论基础、518.零钱兑换II、377. 组合总和 Ⅳ

文章目录 完全背包理论基础完全背包问题的定义与01背包的核心区别为什么完全背包的循环顺序可以互换&#xff1f;CPP代码 518.零钱兑换II思路CPP代码 377. 组合总和 Ⅳ思路CPP代码扩展题 完全背包理论基础 卡码网第52题 文章链接&#xff1a;完全背包理论基础 视频链接&#xf…

Flutter笔记:Widgets Easier组件库(2)阴影盒子

Flutter笔记 Widgets Easier组件库&#xff08;2&#xff09;&#xff1a;阴影盒子 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress o…

SpringBoot之自定义注解参数校验

SpringBoot之自定义注解参数校验 为什么要自定义注解 我这里先引入一个例子&#xff0c;就比如我现在要写文章&#xff0c;文章也许写完正要发布&#xff0c;也可以是还没写完正要存草稿&#xff0c;前端往后端发送数据&#xff0c;如果前端的state不是草稿或者已发布状态&…

vue3、element-plus递归实现动态菜单

vue3、element-plus递归实现动态菜单 使用场景&#xff1a;动态菜单为什么使用递归递归在动态菜单中的实现 使用场景&#xff1a;动态菜单 动态菜单是指菜单项的数量和层次结构可能是动态的&#xff0c;通常来自后端或用户输入。这些菜单的特征包括&#xff1a; 多层嵌套&…

笔记-PPT绘图导出高清无失真图片

问题描述&#xff1a;PPT绘图已经用了高清图&#xff08;jpg、tif格式&#xff09;&#xff0c;但论文图片还是不清晰&#xff0c;打印出来还是有点糊 以下是PPT导出高清不失真图片&#xff08;emf格式&#xff09;的具体描述。 目录 一、绘图工具二、操作步骤 一、绘图工具 …

SSH远程登录实操实验!

ssh远程登录协议&#xff1a;默认端口号22 以下实验7-2是服务端&#xff0c;7-1是客户端 服务器的相关信息&#xff1a; 服务名称&#xff1a;sshd 服务端主程序&#xff1a;/usr/sbin/sshd 服务端配置文件&#xff1a;/etc/ssh/sshd_config 客户端相关信息&#xff1a; …

SQL如何利用Bitmap思想优化array_contains()函数

目录 0 问题描述 1 位图思想 2 案例实战 3 小结 0 问题描述 在工作中&#xff0c;我们往往使用array_contains()函数来进行存在性问题分析&#xff0c;如判断某个数是否在某个数组中&#xff0c;但是当表数据量过多&#xff0c;存在大量array_contains()函数时&#xff0c;…

未来已来:深入探索LLAMA3驱动的人工智能革命

大家好&#xff01;相信大家对于AI&#xff08;人工智能&#xff09;的发展已经有了一定的了解&#xff0c;但你是否意识到&#xff0c;到了2024年&#xff0c;AI已经变得如此强大和普及&#xff0c;带来了我们从未想象过的便利和创新呢&#xff1f;让我们一起来看看AI在这个时…

Open CASCADE学习|BRepFill_SectionPlacement

BRepFill_SectionPlacement 是一个与计算机辅助设计&#xff08;CAD&#xff09;相关的术语&#xff0c;通常用于指代一个几何对象或操作&#xff0c;它是Open CASCADE Technology&#xff08;OCCT&#xff09;中的一个类。Open CASCADE Technology是一个开源的CAD内核&#xf…