【GoRK3288】4.GPIO操作方法(2)

请先在https://github.com/tjCFeng/GoRK3288下载
GoRK3288 开源库。

上一节通过不靠谱的方法控制了WorkLED,那么对于一个具有功能复用的GPIO应该怎样操作呢?为了能够表达的更清楚一些,这次先不看代码,而是找一个具有代表性的端口来针对它说明。

Firefly-RK3288有两排引出接口,从这里做文章吧

找来找去,发现GPIO7_A1这个口很好,是PWM和GPIO复用的端口,就对它下手。

由于它本身没有连接到任何地方,直接操作看不出效果,所以我翻箱倒柜找到了个小板子

上面有LED和蜂鸣器,特别适合做这个试验。不过它是排针而Firefly-RK3288的是排座,还得用杜邦线来连接。最好的是一头公一头母的。手头上没有这种线,只能用公对公、母对母的来连接了

开发板这端按照第一张图来连接好

另外还有VCC和GND别忘了。

连接完毕,可以看看代码了。如果按照上一节那样的操作,会发现根本不起作用,改变不了电平。

差在什么地方呢?来看看示例代码

比上一节的代码多了不少呀。不过不用担心,这里面有一些不需要的。

首先,两个Flip(),就是电平翻转用的,这个已经知道了,可以忽略掉。

其次,Print打印状态和Sleep延时函数,都是Go语言的东西,也可以忽略,一下子少了5行代码。

在来看SetPP(),这个是设置内部上拉下拉电阻的,LED小板已经有上拉电阻了,这句可以省略;

SetSR(),设置GPIO的速度,分为Fast和Slow,控制个LED快慢都无所谓,也可以省略;

SetE(),设置GPIO驱动电流,LED小板上有三极管来驱动,只要个GPIO的信号就可以了,所以也可以省略。

最关键的就一句,SetDir(),设置为输出。复用的端口改变为GPIO后,默认是输入的,所以要手动设置为输出,这也是为什么原来的代码不能控制LED的原因。

当然,不要怪我故弄玄虚,不就是个设置方向吗,讲了这么多。其实隐藏在表面的背后,还有一部分操作,就是设置功能复用,通过RK3288的IOMUX来改变功能。说起来简单,但是在手册中查找每一个端口的复用操作很繁琐。当初在尝试使用这个GPIO口的时候,按照手册一点一点的配置好功能复用后居然发现还是不能操作电平,原因就是把方向设置给忘了,还以为是代码的问题而费了不少时间,所以这里特别强调了一下。

不过经过封装后,想操作一个GPIO就再也不用去担心IOMUX了,直接使用就可以了,这就是封装的威力。

好了,为了庆祝一下,来看看LED的效果吧

可以根据代码每次的翻转来改变LED的亮灭。

下面总结一下GPIO类常用的方法:

CreateGPIO:初始化端口

FreeGPIO:释放端口

GetData:获取高低电平(仅在输出时有效)

Flip:翻转电平(仅在输出时有效)

SetData:设置高低电平(仅在输出时有效)

SetPP:设置内部拉电阻

SetSR:设置GPIO速度

SetE:设置驱动电流

GetInputValue:获取输入的高低电平(仅在输入时有效)

GoRK3288库请在https://github.com/tjCFeng/GoRK3288下载。

时间: 2024-08-27 13:51:31

【GoRK3288】4.GPIO操作方法(2)的相关文章

【GoRK3288】3.GPIO操作方法(1)

从这一节开始,正式讲述 GoRK3288 的使用方法.请先在https://github.com/tjCFeng/GoRK3288下载 GoRK3288 开源库 . 经过前两节的铺垫,大概了解了Go语言的结构,并且在开发板上每个功能都对应 GoRK3288 库中的一个文件,比如GPIO功能就是通过GPIO.go文件来实现的.而所有的示例代码都在上一层文件夹的Test.go中. 先来看Test.go中的第一段代码 func main() {} 函数前面的部分不用再重复叙述,从这个函数开始,是真正对

DA14683开发:GPIO操作

DA14683GPIO操作 勤基科技  陈杰明 添加GPIO初始化函数 在main.c中,添加以下子函数,初始化GPIO口,按键的引脚设置为输入,LED灯的引脚设置为输出. /*按键GPIO设置*/ void key_led_init() { hw_gpio_set_pin_function(HW_GPIO_PORT_1,HW_GPIO_PIN_6, HW_GPIO_MODE_INPUT, HW_GPIO_FUNC_GPIO);//按键 hw_gpio_set_pin_function(HW_G

【GoRK3288】5.PWM操作方法

请先在https://github.com/tjCFeng/GoRK3288下载 GoRK3288 开源库. 这一节来看看PWM的操作方法.前面说到了GPIO7_A1是个复用端口,包括GPIO和PWM,那么这次还是使用这个端口把它变成PWM输出. 还是来看这张图 可以发现PWM在前,GPIO在后,也就是说默认的功能为PWM.如果想使用PWM功能的话,上电后可以直接使用了.不过为了能更加清楚的说明它是个复用端口,可以在上一节作为GPIO使用后,不要断电或重启,可以重新配置为PWM功能再来使用,其他

【GoRK3288】6.TSADC操作方法

请先在https://github.com/tjCFeng/GoRK3288下载 GoRK3288 开源库. Rockchip RK3288中有好多ADC,HS-ADC(High Speed ADC).TS-ADC(Temperature Sensor ADC). 其中HS-ADC 主要用于传输数据,例如手册中说的GPS数据等:而TS-ADC顾名思义,就是采集各种温度传感器的数据了. 咱们先从简单的开始,所以想办法使用TS-ADC取得各种温度. 由于温度传感器是集成在CPU内部的,所以本次试验不

【GoRK3288】7.WatchDog操作方法

请先在https://github.com/tjCFeng/GoRK3288下载 GoRK3288 开源库. WatchDog在做服务器程序时很有用处,服务器在运行过程中,一旦发生死机.程序异常等情况,造成系统运行紊乱,可以通过WatchDog来自动控制整个系统重新启动,可以最大限度地减少人员维护的工作量. WatchDog也叫看门狗,它其实就是一个定时器,每隔一段时间检测一个标志位是否被程序赋值,即所谓的喂狗. 如果在某次检测中发现这个标志位没有被人为干预,那么意味着应用程序或系统不能正常运行

GPIO引脚翻转技巧

所谓翻转,就是1变0,0变1. 即第一次执行时,若引脚为高电平,则下一次再执行时,则让其变为低电平. 对于GPIO引脚来说,实现电平翻转,有很多方法. 其中两种比较好的方法如下: (1)采用位带操作方法. 在stm32中,关于位带操作,有以下一些内容需要清晰: 1.支持位带操作的两个内存区的范围是: 0x2000_0000‐0x200F_FFFF(SRAM 区中的最低 1MB) 0x4000_0000‐0x400F_FFFF(片上外设区中的最低 1MB) 2.对于SRAM 位带区的某个比特,记它

【GoRK3288】2.Go语法简要说明及GoRK3288结构

Go语言的语句很简单,写起来像是动态语言那样简单.不过虽说代码符号简单,但是刚刚接触的时候却是有些不适应,这里就先把使用 GoRK3288库 的时候需要用到的语法列举一下,其他高深的东西以后再去学习吧. 1.操作符: +.-.*./.%.&.|.^.<<.>>.==.!=.|= 等这些和C语言是一样的,不过在取反的时候就不是~符号了,而是^.跟亦或是同一个符号,怎么区分呢?单目操作是取反,双目操作是亦或.另外要将某一位置0的话 &= ^x是不对的,而是 &^

linux 标准 GPIO 操作

Linux 提供了GPIO 操作的 API,具体初始化及注册函数在 driver/gpio/lib_gpio.c 中实现. #include int gpio_request(unsigned gpio, const char *label); 获得并占有 GPIO port 的使用权,由参数 gpio 指定具体 port.非空的label指针有助于诊断.主要告诉内核这块地址被占用了.当其他地方调用同一地址的gpio_request就会报告错误,该地址已经被申请.在/proc/mem有地址占用表

Linux中的gpio口使用方法

Linux中的IO使用方法 应该是新版本内核才有的方法.请参考:./Documentation/gpio.txt文件 提供的API:驱动需要包含 #include <linux/gpio.h> 判断一个IO是否合法:int gpio_is_valid(int number); 设置GPIO的方向,如果是输出同时设置电平:/* set as input or output, returning 0 or negative errno */int gpio_direction_input(unsi