2613|3

1535

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【平头哥RVB2601创意应用开发】+GPIO的使用 [复制链接]

  本帖最后由 jinglixixi 于 2022-5-10 19:19 编辑

在解决了开发环境的构建后,首要学习的就是GPIO口的使用。其实,如果没有过高的设计要求,在通常的情况下基本上用GPIO口与延时函数相配合就能解决大部分的问题,因此掌握GPIO口的使用是十分重要的。

那如何来学习GPIO口的使用呢?

在没有相关学习教程的情况下,学习例程的程序设计是最简捷的途径。

作为GPIO口学习的硬件支持则是开发板上的现有资源,即LED和KEY,其电路原理图见图1所示。

 

 

图1原理图

 

1.点亮LED

由图2可知LED的引脚连接关系为:

红色 -- PA7

绿色 -- PA25

蓝色 -- PA4

当然在使用时,是需要用短接子来连接的,否则是影响效果观察的。

 

图2接口的原理图

 

要点亮LED就必须对所用的引脚进行功能设置,即设置为输出模式,然后再通过高低电平的输出来控制LED的亮灭。

将相关引脚设为输出模式的函数为:

static uint32_t g_ctr = 0;

staticcsi_gpio_pin_t r;

staticcsi_gpio_pin_t g;

staticcsi_gpio_pin_t b;

voidled_pinmux_init()
{
csi_pin_set_mux(PA7, PIN_FUNC_GPIO);
csi_pin_set_mux(PA25, PIN_FUNC_GPIO);
csi_pin_set_mux(PA4, PIN_FUNC_GPIO);
csi_gpio_pin_init(&r, PA7);
csi_gpio_pin_dir(&r, GPIO_DIRECTION_OUTPUT);
csi_gpio_pin_init(&g, PA25);
csi_gpio_pin_dir(&g, GPIO_DIRECTION_OUTPUT);
csi_gpio_pin_init(&b, PA4);
csi_gpio_pin_dir(&b, GPIO_DIRECTION_OUTPUT);
g_ctr = 0;
}

实现LED灯依次点亮的函数为:

voidled_refresh()
{
    g_ctr++;
    if (g_ctr % 3 == 0)
    {
         csi_gpio_pin_write(&r, GPIO_PIN_LOW);
         csi_gpio_pin_write(&g, GPIO_PIN_HIGH);
         csi_gpio_pin_write(&b, GPIO_PIN_HIGH);
    }
    else if (g_ctr % 3 == 1)
    {
         csi_gpio_pin_write(&r, GPIO_PIN_HIGH);
         csi_gpio_pin_write(&g, GPIO_PIN_LOW);
         csi_gpio_pin_write(&b, GPIO_PIN_HIGH);
    }
    else
    {
         csi_gpio_pin_write(&r, GPIO_PIN_HIGH);
         csi_gpio_pin_write(&g, GPIO_PIN_HIGH);
         csi_gpio_pin_write(&b, GPIO_PIN_LOW);
    }
}

 

也就是说,通过计数值的变化就可以控制LED工作状态的转换。由原理图可知,LED灯是低高电平点亮,高电平熄灭。

程序下载后,其效果如图3所示。

       

图3运行效果

 

2.按键判别

由图1可知KEY的引脚连接关系为:

K1 -- PA11

K2 -- PA12

 

要判别按键所处的状态,就必须将引脚设置为输入模式,并通过读取位状态来识别电位的高与低。

将相关引脚设为输入模式的函数为:

staticcsi_gpio_pin_t key1;

staticcsi_gpio_pin_t key2;

static void key_init(void)
{
    csi_pin_set_mux(PA11, PIN_FUNC_GPIO);
    csi_pin_set_mux(PA12, PIN_FUNC_GPIO);
    csi_gpio_pin_init(&key1, PA11);
    csi_gpio_pin_dir(&key1, GPIO_DIRECTION_INPUT);
    csi_gpio_pin_init(&key2, PA12);
    csi_gpio_pin_dir(&key2, GPIO_DIRECTION_INPUT);
}

由原理图可知,按键在常规状态是处于高电平状态,当按下按键时则处于低电平状态。

 

读取按键状态的语句为:

csi_gpio_pin_read(&key1)

csi_gpio_pin_read(&key2)

 

3.按键控制LED

若按键K1,则点亮红色LED; 按键K2,则点亮绿色LED,则其控制程序为:

static void key_Lgc(void)
{
         //  按下Key1红灯亮
         if(GPIO_PIN_LOW == csi_gpio_pin_read(&key1))
         {
              csi_gpio_pin_write(&r, GPIO_PIN_LOW);
              csi_gpio_pin_write(&g, GPIO_PIN_HIGH);
              csi_gpio_pin_write(&b, GPIO_PIN_HIGH);
         }
         //  按下Key2绿灯亮
         if(GPIO_PIN_LOW == csi_gpio_pin_read(&key2))
         {
              csi_gpio_pin_write(&r, GPIO_PIN_HIGH);
              csi_gpio_pin_write(&g, GPIO_PIN_LOW);
              csi_gpio_pin_write(&b, GPIO_PIN_HIGH);
         }
}

 

这样就以开发板的作用为基础,掌握了GPIO口的使用,后面就可以利用GPIO来设计自己的程序了。

在设计使用过程中,一个比较讨厌的现象是关机后再次使用就只能编译而无法下载了不知为何?

最新回复

关机后再次使用就只能编译而无法下载了 这个好像不应该   详情 回复 发表于 2022-5-11 08:31
点赞 关注
 
 

回复
举报

7063

帖子

11

TA的资源

版主

沙发
 
藏了不少文章呀!
 
 
 

回复

6828

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 

关机后再次使用就只能编译而无法下载了

这个好像不应该

点评

就是这么怪,是否麻烦。  详情 回复 发表于 2022-5-11 09:46
 
 
 

回复

1535

帖子

1

TA的资源

五彩晶圆(初级)

4
 
本帖最后由 jinglixixi 于 2022-5-11 11:20 编辑
Jacktang 发表于 2022-5-11 08:31 关机后再次使用就只能编译而无法下载了 这个好像不应该

就是这么怪,十分麻烦。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表