文档章节

shumei gpio

捍卫机密
 捍卫机密
发布于 2016/12/13 23:57
字数 952
阅读 5
收藏 0
点赞 0
评论 0

• 树莓派GPIO介绍

树莓派包含8个通用IO (GPIO) 用于开关控制 (switch control),配合扩展版可以进行继电器、电机、LED等外设的驱动。该扩展IO的位置如下所示:

1330870446_80fd3de
Figure 1. 树莓派1扩展IO在板上的位置

树莓派的各引脚功能定义如下,其中横线下方为RPi B+,2,3新增加的GPIO:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

+-------+---------+-------------+-----+-----+------------+----------+--------+

| BCM   | WIRING  | FUNCTION    | PIN | PIN | FUNCTION   | WIRING   | BCM    |

+-------+---------+-------------+-----+-----+------------+----------+--------+

|       |         | 3v3         | 1   | 2   | 5v         |          |        |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| 2     | 8       | SDA1        | 3   | 4   | 5v         |          |        |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| 3     | 9       | SCL1        | 5   | 6   | GND        |          |        |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| 4     | 7       | GPCLK0      | 7   | 8   | TXD0       | 15       | 14     |

+-------+---------+-------------+-----+-----+------------+----------+--------+

|       |         | GND         | 9   | 10  | RXD0       | 16       | 15     |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| 17    | 0       |             | 11  | 12  | PWM0       | 1        | 18     |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| 27    | 2       |             | 13  | 14  | GND        |          |        |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| 22    | 3       |             | 15  | 16  |            | 4        | 23     |

+-------+---------+-------------+-----+-----+------------+----------+--------+

|       |         | 3v3         | 17  | 18  |            | 5        | 24     |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| 10    | 12      | MOSI0       | 19  | 20  | GND        |          |        |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| 9     | 13      | MISO0       | 21  | 22  |            | 6        | 25     |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| 11    | 14      | SCLK0       | 23  | 24  | CE0        | 10       | 8      |

+-------+---------+-------------+-----+-----+------------+----------+--------+

|       |         | GND         | 25  | 26  | CE1        | 11       | 7      |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| ----- | ------- | ----------- | --- | --- | ---------- | -------- | ------ |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| 0     | 30      | SDA0        | 27  | 28  | SCL0       | 31       | 1      |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| 5     | 21      | GPCLK1      | 29  | 30  | GND        |          |        |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| 6     | 22      | GPCLK2      | 31  | 32  | PWM0       | 26       | 12     |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| 13    | 23      | PWM1        | 33  | 34  | GND        |          |        |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| 19    | 24      | MISO1       | 35  | 36  |            | 27       | 16     |

+-------+---------+-------------+-----+-----+------------+----------+--------+

| 26    | 25      |             | 37  | 38  | MOSI1      | 28       | 20     |

+-------+---------+-------------+-----+-----+------------+----------+--------+

|       |         | GND         | 39  | 40  | SCLK1      | 29       | 21     |

+-------+---------+-------------+-----+-----+------------+----------+--------+

目前有三种方式可以实现对树莓派GPIO的驱动:raspberry-gpio-pythonWiringPibcm2835驱动库,以下将分别介绍这三种方法。注意因为涉及硬件操作,程序执行时需要使用管理员权限sudo;同时注意各函数库使用的IO引脚号不同,编程时请参照上表中对引脚的定义。

• RPi.GPIO (raspberry-gpio-python)

项目主页:http://sourceforge.net/projects/raspberry-gpio-python/

RPi.GPIO是树莓派官方推荐的GPIO驱动库,该程序库使用Python语言。RPi.GPIO可用于对实时性要求不高的项目中,如果熟悉Python语言很快就能上手,该程序库的缺点是目前尚不支持SPI、IIC及1-wire。

本代码实现了使用RPi.GPIO程序库控制GPIO 7以1s频率进行开-关操作,如果外接一个220欧姆电阻和LED,可观察到LED以1HZ的频率闪烁。

Code 1. Python RPi.GPIO实现GPIO控制

1

2

3

4

5

6

7

8

9

10

11

12

13

#!/usr/bin/python

 

import RPi.GPIO as GPIO

import time

 

GPIO.setmode(GPIO.BOARD)

GPIO.setup(7, GPIO.OUT)

 

while True:

    GPIO.output(7, GPIO.LOW)

    time.sleep(0.5)

    GPIO.output(7, GPIO.HIGH)

    time.sleep(0.5)

 

• WiringPi

项目主页:http://wiringpi.com/

WiringPi是一个类似Arduino以C/C++实现的IO驱动库,该函数库在LGPL v3协议下发布。Wiring Pi是这三种程序库中功能最强大的,除了支持GPIO操作,还支持IIC、SPI、串口以及很多外扩外设:如Gertboards、74595、12864 LCD及PiFace扩展板。使用WiringPi之前需要下载相应的函数库,配置方法请参见:http://wiringpi.com/download-and-install/

使用Wiring Pi操作GPIO的代码如下:

Code 2. WiringPi实现GPIO控制

1

2

3

4

5

6

7

8

9

10

11

12

#include <wiringPi.h>

int main (void)  {

    wiringPiSetup() ;

    pinMode(0, OUTPUT) ;

    for (;;)  {

        digitalWrite(0, HIGH) ;

        delay (500) ;

        digitalWrite(0,  LOW) ;

        delay (500) ;

    }

    return 0 ;

}

通过以下命令进行编译,编译时需i包含WiringPi库:

1

gcc -Wall -o blink blink.c -lwiringPi

 

• bcm2835 C驱动库

项目主页:http://www.airspayce.com/mikem/bcm2835/

该程序库使用C语言,跨过Linux内核层,直接操控BCM2835的GPIO。因为并不是以Linux device driver的方式实现,这种方式会存在一些潜在的副作用。不过该函数库除了支持GPIO的操作,还支持SPI、IIC以及系统定时器。

示例代码:

Code 3. bcm2835驱动库实现GPIO控制

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#include <bcm2835.h>

 

// Blinks on RPi Plug P1 pin 11 (which is GPIO pin 17)

#define PIN RPI_GPIO_P1_11

 

int main(int argc, char **argv)

{

  if (!bcm2835_init())

  return 1;

 

  // Set the pin to be an output

  bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);

 

  // Blink

  while (1)

  {

    bcm2835_gpio_write(PIN, HIGH);

    bcm2835_delay(100);

 

    bcm2835_gpio_write(PIN, LOW);

    bcm2835_delay(100);

  }

  bcm2835_close();

  return 0;

}

编译方法:

1

gcc -o blink blink.c -l bcm2835

本文转载自:

共有 人打赏支持
捍卫机密
粉丝 4
博文 119
码字总数 34542
作品 0
成都
程序员
GPIO_113、GPIO_114不能完成控制

下面是内核的Log信息: [ 2.931274] LY:::drivers/input/keyboard/gpio_keys.c,gpio_keys_setup_key,button->gpio=18 [ 2.939636] LY:::drivers/input/keyboard/gpio_keys.c,gpio_keys_setu......

beijingluoyi
2012/06/20
504
0
学习嵌入式linux开发板之iTOP-4412 开发板如何操作GPIO

本文转自迅为论坛:http://www.topeetboard.com 平台:迅为嵌入式linux开发板 Exynos4412 所有的 GPIO 都有固定的地址,为了方便操作这些 GPIO,Linux 内核 在 gpio-exynos4.h 里面定义了一些...

歌之王子殿下
2016/03/29
326
0
STM32通过FSMC读写CPLD

STM32通过FSMC读写CPLD的程序,CPLD挂在STM32的地址线和数据线上,将CPLD看做片外RAM的方式来进行读写,在我做的板子上CPLD挂在第四个区,因此基地址是0x6c000000,通过FSMC来进行读写,程序...

文艺小青年
2017/06/01
0
0
RK3288 GPIO 驱动

简介 GPIO, 全称 General-Purpose Input/Output(通用输入输出),是一种软件运行期间能够动态配置和控制的通用引脚。 RK3288 有 9 组 GPIO bank: GPIO0,GPIO1, ..., GPIO8。每组又以 A0~A...

倔强的小蚂蚁
2016/12/14
64
0
树莓派mqtt通信

1、sudo pip install paho-mqtt 2、python代码 # -- coding: utf-8 -- import paho.mqtt.client as mqtt import RPi.GPIO as GPIO import json,sys if sys.version_info < (3, 0): reload(s......

monster13
2016/06/14
59
0
s3c2410_gpio_cfgpin等内核导出函数

//这里面的函数都是内核导出函数/plat-s3c24XX/gpio.c中 #include #include #include #include #include #include #include #include #incl...

晨曦之光
2012/04/13
276
0
/sys/class/gpio 操作方法

在嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的。其实linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gpio”...

宁宁爸
2016/01/29
207
0
Android应用层操作GPIO

Android应用层操作GPIO的方法: http://my.oschina.net/u/1176566/blog/177554 在使用某个GPIO之前首先的保证此GPIO没有正在被使用,否则是无法操作的; 如NAND模块的NCE3/PC18,此io口正被使...

wangjian19
2014/07/28
0
5
Cubieboard通过GPIO驱动步进电机--完结

2013-4-3更新:由于标准GPIO库(gpio-sunxi.ko)已经可用了,不建议再使用sun4i-gpio.ko这个驱动。此文仅作思路上的参考,不用照搬 This driver is not recommended now. For the new gpio dri...

cubieboard
2014/08/22
0
0
Go 语言控制 pcDuino的 GPIO ,实现星星点灯

星星点灯啦! 让我们看看怎么用 Go 来点灯。 如果你更新过image,有些时候,GPIO, ADC, PWM这些驱动没有自动装载, 我们需要首先装载: $sudo modprobe gpio $sudo modprobe adc $sudo modpr...

pc朵拉
2013/08/16
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaEE——JavaScript

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 JavaScript 内置对象 String对象方法: date对象...

凯哥学堂
11分钟前
0
0
Git 远程代码回滚master

方式一(推荐): git revert commit-id 方式二(不推荐):不推荐原因:推送到线上后,其它开发人员需要重新clone git reset --hard commit-id git push origin HEAD --force...

浮躁的码农
11分钟前
0
0
Elasticesearch学习(7)—— ES查询与Java API的对应关系

1、普通查询 类型 ES查询语句 Java查询实现 结果 查询格式 { "query": { "bool": { "must": [], "must_not": [], "should": [], "filter": [] } }, "from": 0, "size": 10, "sort": [] } Que......

叶枫啦啦
12分钟前
15
0
getElementsByClassName()与getElementById()区别

1.document.getElementsByClassName() 返回的是数组 使用:document.getElementsByClassName("className")[0].innerText='具体内容' 2.document.getElementById() 返回的是单个元素 使用:d......

botkenni
23分钟前
0
0
MyBatis入门

一、安装 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version></dependency> 二、从 XML 中构建 SqlSessionFactory String r......

一个yuanbeth
23分钟前
0
0
聊聊spring cloud的LoadBalancerAutoConfiguration

序 本文主要研究一下spring cloud的LoadBalancerAutoConfiguration RibbonAutoConfiguration spring-cloud-netflix-ribbon-2.0.0.RC2-sources.jar!/org/springframework/cloud/netflix/ribb......

go4it
26分钟前
0
0
【转】使用Lombok来优雅的编码

前言 Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。 正文 添加依赖 在 pom.xml 文件中添加相关依赖:...

HAVENT
28分钟前
0
0
Dubbo 源码解读 —— 可支持序列化及自定义扩展

一、概述 从源码中,我们可以看出来。目前,Dubbo 内部提供了 5 种序列化的方式,分别为 fastjson、Hessian2、Kryo、fst 及 Java原生支持的方式 。 针对不同的序列化方式,对比内容如下: 名...

Ryan-瑞恩
36分钟前
0
0
MySQL内存设置—— MySQL server has gone away

set global max_allowed_packet=268435456

一梦心草
45分钟前
0
0
推导式

列表、集合和字典推导式 列表推导式是Python最受喜爱的特性之一。它允许用户方便的从一个集合过滤元素,形成列表,在传递参数的过程中还可以修改元素。形式如下: [expr for val in collect...

火力全開
50分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部