Ubuntu GPIO操作

參考:

https://blog.csdn.net/kris_fei/article/details/69553422

https://blog.csdn.net/qwq1503/article/details/89321291

  • 查詢GPIO信息

# 目錄跳轉
cd /sys/kernel/debug
# 查詢信息
cat gpio

查詢結果如下


可以看到gpio1是以nubmer爲32開始, 那麼GPIO1_A1就是 32 + 1 = 33

  • 導入GPIO1_A1

echo 33 > /sys/class/gpio/export
  • 導出GPIO1_A1

echo 33 > /sys/class/gpio/unexport
  • 定義GPIO1_A1輸入輸出方向

# direction接受的參數:in, out, high, low。high/low同時設置方向爲輸出,並將value設置爲相應的1/0。
echo out > /sys/class/gpio/gpio33/direction
  • 定義GPIO1_A1 Value值

echo 1 >/sys/class/gpio/gpio33/value

下面是C語言編寫的GPIO控制例程,實現LED的每隔一秒閃爍一次。

示例1:

// 參考:https://blog.csdn.net/qwq1503/article/details/89321291
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main( void )
{
	FILE	*p	= NULL;
	int	i	= 0;
	p = fopen( "/sys/class/gpio/export", "w" );
	fprintf( p, "%d", 38 );
	fclose( p );
	p = fopen( "/sys/class/gpio/gpio38/direction", "w" );
	fprintf( p, "out" );
	fclose( p );
	for ( i = 0; i < 100; i++ )
	{
		p = fopen( "/sys/class/gpio/gpio38/value", "w" );
		fprintf( p, "%d", 1 );
		sleep( 1 );
		fclose( p );
		p = fopen( "/sys/class/gpio/gpio38/value", "w" );
		fprintf( p, "%d", 0 );
		sleep( 1 );
		fclose( p );
	}
	p = fopen( "/sys/class/gpio/unexport", "w" );
	fprintf( p, "%d", 38 );
	fclose( p );
	return(0);
}

 示例2:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main( void )
{
	FILE	*p	= NULL;
	int	i	= 0;
	for ( i = 0; i < 100; i++ )
	{
		p = fopen( "/proc/rp_gpio/gpio0", "w" );
		fprintf( p, "%d", 1 );
		sleep( 1 );
		fclose( p );
		p = fopen( "/proc/rp_gpio/gpio0", "w" );
		fprintf( p, "%d", 0 );
		sleep( 1 );
		fclose( p );
		
	}
	return(0);
}

 

發佈了39 篇原創文章 · 獲贊 16 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章