0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【EK-RA6E2开发指南】GPIO使用

嵌入式大杂烩 来源:嵌入式大杂烩 作者:嵌入式大杂烩 2025-09-23 18:13 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

我相信大多数学习嵌入式的朋友学习单片机的第一个程序都是点灯,毕竟点灯简单嘛,操作下GPIO即可。当然,本教程的第一个应用也从GPIO的使用开始。

1 RT-Thread PIN设备驱动简介

RT-Thread 提供了一套简单的 I/O 设备模型框架,如下图所示。

I/O 设备模型框架

它位于硬件和应用程序之间,共分成三层,从上到下分别是 I/O 设备管理层、设备驱动框架层、设备驱动层。

应用程序通过 I/O 设备管理接口获得正确的设备驱动,然后通过这个设备驱动与底层 I/O 硬件设备进行数据(或控制)交互。关于I/O模型的详细描述请参看RT-Thread官方手册。

I/O设备模型:

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/device

PIN设备属于Miscellaneous类型,在驱动文件pin.c中的rt_device_pin_register()函数可以看到其注册的设备类型,PIN设备是很多驱动的基础,其他驱动的开发还会依赖PIN设备,比如软件I2C的驱动就是在PIN设备的基础上开发的。

应用程序通过 RT-Thread 提供的 PIN 设备管理接口来访问 GPIO,相关接口如下所示:

函数描述
rt_pin_get()获取引脚编号
rt_pin_mode()设置引脚模式
rt_pin_write()设置引脚电平
rt_pin_read()读取引脚电平
rt_pin_attach_irq()绑定引脚中断回调函数
rt_pin_irq_enable()使能引脚中断
rt_pin_detach_irq()脱离引脚中断回调函数

关于PIN驱动API的详细描述请参看以下内容:

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/pin/pin

2 PIN设备使用实例之按键

笔者这里使用的是EK-RA6E2开发板,MCU资源很丰富,但是板载资源较少。EK-RA6E2开发板的用户LED已经在主线程中使用了,因此这里就用户按键来举例说明如何使用PIN设备。

2.1 硬件电路

首先看下电路图:

1.png

[]()Figure ‑ 按键电路

当然不同开发板,其引脚可能不同,请根据具体情况使用。由以上电路图可以看到,当P304输入低电平,表示按键按下,反之亦然。

2.2 按键实现

核心代码如下:

#define KEY_PIN    BSP_IO_PORT_03_PIN_04 /* Onboard LED3 pins */

/* 按键检测线程入口函数*/
static void key_thread_entry(void *parameter)
{
    static rt_uint8_t key_up = 1;   /* 按键松开标志 */

    /* 初始化按键 */
    rt_pin_mode(KEY_PIN, PIN_MODE_INPUT);

    while (1)
    {
        /* 检测按键是否按下 */
        if (key_up && (rt_pin_read(KEY_PIN) == PIN_LOW) )
        {
            rt_thread_mdelay(50);   /* 延时消抖*/
            key_up = 0;

            if (rt_pin_read(KEY_PIN) == PIN_LOW)
            {
                /* 按键KEY按下,按键按下处理*/
                rt_kprintf("KEY pressed!n");
            }
        }
        else if((rt_pin_read(KEY_PIN) == PIN_HIGH) )
        {
            key_up = 1;     /* 按键已松开 */
        }
        rt_thread_mdelay(100);
    }
}

/* 线程初始化*/
int key_init(void)
{
    /* 创建线程,名称是 key_thread,入口是 key_thread*/
    rt_thread_t key_tid= RT_NULL;
    key_tid = rt_thread_create( "gpio",
                             key_thread_entry,
                             RT_NULL,
                             1024,
                             3,
                             10);
    /* 如果获得线程控制块,启动这个线程 */
    if(key_tid == RT_NULL)
    {
        rt_kprintf("Thread_gpio ERROR");
        return RT_ERROR;
    }
    else
    {
        rt_thread_startup(key_tid);
        return RT_EOK;
    }
}

/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(key_init, key init);

构建并下载程序,并使用msh 命令初始化KEY线程,按下按键,则可以看到串口终端输出以下信息:

2.png

当然啦,在finsh输入list device可以查到注册到RT-Thread的PIN设备:

3.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6078

    文章

    45643

    浏览量

    676167
  • 嵌入式
    +关注

    关注

    5212

    文章

    20814

    浏览量

    339278
  • GPIO
    +关注

    关注

    16

    文章

    1337

    浏览量

    56676
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    EK-RA6E2开发指南开发环境搭建

    瑞萨电子的开发工具有很多,笔者习惯使用MDK开发,因此本文将基于MDK+RA Smart Configurator搭建开发环境。
    的头像 发表于 09-23 18:12 3363次阅读
    【<b class='flag-5'>EK-RA6E2</b><b class='flag-5'>开发指南</b>】<b class='flag-5'>开发</b>环境搭建

    EK-RA6E2开发指南】ADC获取电压值

    RA6E22个ADC单元,每个ADC单元有12位、10位、8位读取数据的格式可以选择,在单元0上有13个ADC通道,而在单元1上有16个ADC通道。 ADC单元具有三种扫描方式分别为:单次描模式、连续扫描模式和分组扫描模式,
    的头像 发表于 09-23 18:15 2347次阅读
    【<b class='flag-5'>EK-RA6E2</b><b class='flag-5'>开发指南</b>】ADC获取电压值

    EK-RA2E2-快速入门指南

    EK-RA2E2-快速入门指南
    发表于 01-30 18:47 0次下载
    <b class='flag-5'>EK-RA2E2</b>-快速入门<b class='flag-5'>指南</b>

    EK-RA2E1 – 快速入门指南

    EK-RA2E1 – 快速入门指南
    发表于 02-03 19:08 0次下载
    <b class='flag-5'>EK-RA2E</b>1 – 快速入门<b class='flag-5'>指南</b>

    EK-RA6M2– 快速入门指南

    EK-RA6M2 – 快速入门指南
    发表于 03-13 19:36 0次下载
    <b class='flag-5'>EK-RA6M2</b>– 快速入门<b class='flag-5'>指南</b>

    EK-RA6E2v1 – 用户手册

    EK-RA6E2 v1 – 用户手册
    发表于 05-12 19:18 0次下载
    <b class='flag-5'>EK-RA6E2</b>v1 – 用户手册

    EK-RA6E2– 快速入门指南

    EK-RA6E2 – 快速入门指南
    发表于 05-12 19:20 1次下载
    <b class='flag-5'>EK-RA6E2</b>– 快速入门<b class='flag-5'>指南</b>

    EK-RA4E2– 快速入门指南

    EK-RA4E2 – 快速入门指南
    发表于 05-12 19:23 0次下载
    <b class='flag-5'>EK-RA4E2</b>– 快速入门<b class='flag-5'>指南</b>

    EK-RA6E2v1 – 用户手册

    EK-RA6E2 v1 – 用户手册
    发表于 06-29 19:10 1次下载
    <b class='flag-5'>EK-RA6E2</b>v1 – 用户手册

    EK-RA6E2– 快速入门指南

    EK-RA6E2 – 快速入门指南
    发表于 06-29 19:11 1次下载
    <b class='flag-5'>EK-RA6E2</b>– 快速入门<b class='flag-5'>指南</b>

    EK-RA4E2– 快速入门指南

    EK-RA4E2 – 快速入门指南
    发表于 06-29 19:14 0次下载
    <b class='flag-5'>EK-RA4E2</b>– 快速入门<b class='flag-5'>指南</b>

    EK-RA2E2-快速入门指南

    EK-RA2E2-快速入门指南
    发表于 07-03 20:12 0次下载
    <b class='flag-5'>EK-RA2E2</b>-快速入门<b class='flag-5'>指南</b>

    EK-RA2E1 – 快速入门指南

    EK-RA2E1 – 快速入门指南
    发表于 07-04 19:40 0次下载
    <b class='flag-5'>EK-RA2E</b>1 – 快速入门<b class='flag-5'>指南</b>

    EK-RA6M2– 快速入门指南

    EK-RA6M2 – 快速入门指南
    发表于 07-04 20:54 0次下载
    <b class='flag-5'>EK-RA6M2</b>– 快速入门<b class='flag-5'>指南</b>

    Renesas EK - RA8D2评估套件快速上手与定制开发指南

    Renesas EK - RA8D2评估套件快速上手与定制开发指南 在嵌入式开发领域,一款好的评估套件能极大地加速开发进程,帮助
    的头像 发表于 12-26 15:50 744次阅读