概述

本篇文章主要介绍如何使用e2studio对瑞萨单片机进行GPIO输入检测。

最近在瑞萨RA的课程,需要样片的可以加qun申请:925643491。

在这里插入图片描述

视频教学

https://www.bilibili.com/video/BV12BRsYxEgf/

e2studio开发RA4L1(5)----GPIO输入检测

样品申请

https://www.wjx.top/vm/rCrkUrz.aspx

硬件准备

首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为R7FA4L1BD4CFP

在这里插入图片描述

参考程序

https://github.com/CoreMaker-lab/RA4L1

https://gitee.com/CoreMaker/RA4L1

源码下载

https://download.csdn.net/download/xinzuofang/91622353

新建工程

在这里插入图片描述

工程模板

在这里插入图片描述

保存工程路径

在这里插入图片描述

芯片配置

本文中使用R7FA4L1BD4CFP来进行演示。

在这里插入图片描述

工程模板选择

在这里插入图片描述

时钟设置

开发板上的外部高速晶振为8M.

在这里插入图片描述

需要修改XTAL为8M。

在这里插入图片描述

GPIO口配置

由下图我们可以得知,板子上有3个LED灯,同时需要给高电平才可以点亮,故以P601、P610管脚为例,配置方式如下所示。
在这里插入图片描述

在e2studio中可以直接设置P601、P610为输出口。

在这里插入图片描述

按键口配置

由下图我们可以得知,按键在P000、P001管脚,并且有一个上拉。

在这里插入图片描述

在e2studio中可以直接设置P000、P001为输入口。

在这里插入图片描述

按键口&Led配置

案例:当按下按键P000,P601亮;按下按键P001,P610亮。

R_IOPORT_PortRead()函数原型

该函数用于读取IO端口的值。指定的端口将被读取,所有引脚的电平将被返回。返回值中的每一位对应于端口上的一个引脚,例如,位7对应引脚7,位6对应引脚6,以此类推。

在这里插入图片描述

故可以用R_IOPORT_PortRead()函数进行读取IO口电平状态,该函数是把一个PORT口的16个端口一起读取出来。

        ioport_size_t p_port_value_port_0;
        R_IOPORT_PortRead(&g_ioport_ctrl, BSP_IO_PORT_00, &p_port_value_port_0);
        ioport_size_t p_port_value_port_1;
        R_IOPORT_PortRead(&g_ioport_ctrl, BSP_IO_PORT_01, &p_port_value_port_1);
        if(p_port_value_port_0 & 0x2000)//按下按键P013,P104亮
        {
            R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_04, BSP_IO_LEVEL_LOW);
        }
        else
        {
            R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_04, BSP_IO_LEVEL_HIGH);
        }

R_IOPORT_PinRead()函数原型

在这里插入图片描述
故可以用R_IOPORT_PinRead()函数进行读取IO口电平状态,该函数只能读取一个端口的电平。

        bsp_io_level_t p_port_value_pin_013;
        R_IOPORT_PinRead(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_13, &p_port_value_pin_013);
        if(p_port_value_pin_013)//按下按键P013,P104亮
            R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_04, BSP_IO_LEVEL_LOW);
        else
            R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_04, BSP_IO_LEVEL_HIGH);

代码

在hal_entry()中添加如下。

    while(1)
    {

//        ioport_size_t p_port_value_port_0;
//        R_IOPORT_PortRead(&g_ioport_ctrl, BSP_IO_PORT_00, &p_port_value_port_0);
//
//        if(p_port_value_port_0 & 0x0001)//按下按键P601亮,松开P601灭
//
//            R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_01, BSP_IO_LEVEL_LOW);
//        else
//            R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_01, BSP_IO_LEVEL_HIGH);
//
//        if(p_port_value_port_0 & 0x0002)//按下按键P610亮,松开P610灭
//            R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_10, BSP_IO_LEVEL_LOW);
//        else
//            R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_10, BSP_IO_LEVEL_HIGH);


        bsp_io_level_t p_port_value_pin_000;
        R_IOPORT_PinRead(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_00, &p_port_value_pin_000);
        if(p_port_value_pin_000)//按下按键P601亮,松开P601灭
            R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_01, BSP_IO_LEVEL_LOW);
        else
            R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_01, BSP_IO_LEVEL_HIGH);

        bsp_io_level_t p_port_value_pin_001;
        R_IOPORT_PinRead(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_01, &p_port_value_pin_001);
        if(p_port_value_pin_001)//按下按键P610亮,松开P610灭
            R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_10, BSP_IO_LEVEL_LOW);
        else
            R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_10, BSP_IO_LEVEL_HIGH);

    }
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐