Firefly开源社区

标题: [fireflyP] GPIO使用 [打印本页]

作者: zhansb    时间: 2016-7-25 15:52
标题: [fireflyP] GPIO使用
本帖最后由 zhansb 于 2016-7-26 11:33 编辑

模块安装请参考:http://developer.t-firefly.com/thread-10503-1-2.html

fireflyP的GPIO使用独立于内核的gpio接口,即两边的控制互相独立。所以在控制GPIO时,要注意内核是否申请和控制了该GPIO,重复控制会导致不可预计的问题。

在python中使用help(Gpio)可以打印Gpio使用的方法,主要的接口有:
|  init()
|      Init GPIO function
|      implement it before using Gpio
|
|  get_level(self)
|      Returns the level of the pin for input direction
|      or return setting of the DR register for output gpios.
|  
|  set_dir(self, dir)
|      set GPIO direction
|      :dir: refer to GpioDir
|  
|  set_drv(self, drv)
|      set GPIO drv
|      :drv: refer to GpioDrv
|  
|  set_level(self, level)
|      set GPIO output signal
|      :level: refer to GpioLevel
|  
|  set_mux(self, mux)
|      set GPIO mux
|      :mux: refer to GpioMux
|  
|  set_pull(self, pull)
|      set GPIO pull
|      :pull: refer to GpioPull


GPIO使用的流程大致如下:
1.初始化Gpio:Gpio.init()
2.申请使用的GPIO,如:pin=Gpio('GPIO0B5')
3.输入输出的控制:
3.1.设置成输出:
    配置GPIO为输出,参数为Gpio.OUTPUT,如:pin.set_dir(Gpio.OUTPUT)
    设置输出的电平,输出高电平参数为Gpio.HIGH,低电平为Gpio.LOW,如:pin.set_level(Gpio.HIGH)
3.2.设置成输入:
    配置GPIO为输入,参数为Gpio.INPUT,如:pin.set_dir(Gpio.INPUT)
    读取输入的电平,如:pin.get_level(),高电平时返回值为Gpio.HIGH,低电平为Gpio.LOW


其他接口介绍:

        gpio7a1_sel                                                                                                                    
        GPIO7A[1] iomux select
        1'b0: gpio
        1'b1: pwm_1
        因此pin.set_mux(Gpio.MUX_1)为设置gpio7a1功能为PWM1


        2'b00: Z(Noraml operaton)
        2'b01: weak 1(pull-up)
        2'b10: weak 0(pull-down)
        2'b11: Repeater(Bus keeper)   


下面讲个简单例子,用于控制开发板上黄色LED:
先看看黄色LED灯对应的引脚,如红色框内所示为GPIO8A2:

找到GPIO引脚定义后,我们就可以开始编写控制代码:
  1. $sudo python
  2. >>> from fireflyP import Gpio
  3. >>> Gpio.init()
  4. >>> LED_YELLOW="GPIO8A2"
  5. >>> led_yellow=Gpio(LED_YELLOW)
  6. >>> led_yellow.set_dir(Gpio.OUTPUT)  #set_dir 已经包含set_mux(Gpio.MUX_GPIO)
  7. >>> led_yellow.set_level(Gpio.LOW)    #打开黄色LED
复制代码
如下图红框所示,黄色LED灯已经点亮


  1. >>> led_yellow.set_level(Gpio.HIGH)   #关闭黄色LED
复制代码
关闭后的效果:


完整的demo可以参考github上的demo/gpio_test.py














作者: sixwww    时间: 2016-7-29 17:19
赞,大赞
作者: kevin6861    时间: 2017-3-18 00:32

作者: 22222    时间: 2017-3-22 19:22
学习了
作者: 吟风子燕    时间: 2017-5-10 14:48
学习了!感谢
作者: amberfly    时间: 2017-10-8 21:50
不错,学习学习
作者: amberfly    时间: 2017-10-8 21:50
学习学习
作者: 13920513512    时间: 2017-11-23 14:25
感谢大神。看到这个python 的库受益匪浅。
另外问一下,看到所有的C、/C++教程都是针对内核编译,来控制GPIO(LED)的。
有没有对应的C/c++的库,来实现应用层控制GPIO的方法啊?
作者: zhansb    时间: 2017-11-23 14:28
13920513512 发表于 2017-11-23 14:25
感谢大神。看到这个python 的库受益匪浅。
另外问一下,看到所有的C、/C++教程都是针对内核编译,来控制GP ...

目前没有C/C++,可以参考python写一个,比较类似
作者: 13920513512    时间: 2017-12-1 10:37
zhansb 发表于 2017-11-23 14:28
目前没有C/C++,可以参考python写一个,比较类似

用C/C++,写应用层的时候,除了用read(),write()函数还有什么好的方法吗?
作者: 13920513512    时间: 2017-12-1 10:37
zhansb 发表于 2017-11-23 14:28
目前没有C/C++,可以参考python写一个,比较类似

用C/C++,写应用层的时候,除了用read(),write()函数还有什么好的方法吗?
作者: shitonyou3    时间: 2017-12-9 11:20
"7.3.2 Detail Register Description " datasheet里面哪来这个章节? 你用的是哪个版本的datasheet,我的最多4.2
作者: 胖砸    时间: 2018-5-19 04:38
链接打不开啊,版主求助python库
作者: fresure    时间: 2018-9-22 16:15
AIO-RK3288  ubuntu
我设置set_pull时 系统直接死掉 怎么回事
作者: xiaoshi_xiaoshi    时间: 2018-10-13 23:07
不错 赞
作者: hihasnail    时间: 2018-12-10 16:16
正好在学这个,有点用~ 谢谢楼主
作者: jyf3691    时间: 2019-4-5 21:34
感谢大神的分享。。。。
作者: lovenr    时间: 2019-6-29 15:39
无法使用  会提示这样的错误


系统版本为 RK3288-UBUNTU16.04


作者: halfpastone    时间: 2019-8-7 23:35
学习
作者: lovenr    时间: 2019-12-18 00:30
运行  gpio_test.py  无效~ 灯状态无任何反应~
作者: lovenr    时间: 2019-12-18 00:36
  1. 不加 sudo 运行提示:
  2. [code]Traceback (most recent call last):
  3.   File "demo/gpio_test.py", line 14, in <module>
  4.     Gpio.init()
  5.   File "build/bdist.linux-armv7l/egg/fireflyP/gpio.py", line 231, in init
  6.   File "build/bdist.linux-armv7l/egg/fireflyP/gpio.py", line 217, in _set_mapreg
  7.   File "build/bdist.linux-armv7l/egg/fireflyP/lib/devmem.py", line 131, in __init__
  8.   File "build/bdist.linux-armv7l/egg/fireflyP/lib/devmem.py", line 53, in __init__
  9. OSError: [Errno 13] Permission denied: '/dev/mem'
复制代码
[/code]
作者: liufirefly    时间: 2020-7-29 21:02
我顶
作者: sdsajdka    时间: 2020-11-23 15:59
lovenr 发表于 2019-12-18 00:30
运行  gpio_test.py  无效~ 灯状态无任何反应~

我也是没反应  请问您解决这个问题了吗

作者: shuxiad    时间: 2020-12-14 17:57
nice




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1