瑞萨单片机开发教程[三] GPIO输出--点亮led实验
2026/7/26 9:56:28 网站建设 项目流程

开发板官网(https://www.edevkit.com/)

瑞萨单片机开发教程
瑞萨单片机开发教程[一] e2-studio + DAP LINK开发环境搭建
瑞萨单片机开发教程[二] Keil/RASC开发环境搭建​
瑞萨单片机开发教程[三] GPIO输出–点亮led实验

本章目标

熟悉RASC配置IO的操作使用

掌握GPIO的读写API的使用

1. 硬件设计

2. 软件设计

2.1 新建工程

在keil的工作空间有一份之前的模板工程“03_template”,复制一份修改文件夹名“04 GPIO-led”,双击打开“EBF_RA6M5.uvprojx”工程,通过keil的新建文件新建“led.c”和“led.h”保存到目录下的\src文件夹下。

将代码文件放到 “src” 文件夹下之后, Keil 软件并不会自动将它们加入到工程,这时候需要打开 RASC FSP 配置界面, 点击一次中间的 “Generate Project Content” 按钮,自动生成文件架构。从而 “src” 文件夹下的代码文件就会被自动加入进工程中。

接着关闭 FSP 配置界面返回到 Keil,进行一次编译后会弹出一个提示框提示工程结构发生了变化,点击“是”即可。

最后led.c和led.h加入到工程中。

2.2 FSP配置

keil界面选择“Tools”->“RA Smart configuarater”打开RASC界面。

在 FSP 配置界面里面点开 “Pins”-> “Ports”-> “P4”-> “P400”, 然后将连接到LED灯的 IO 引脚的 “Mode” 属性配置为 “Output mode (Initial High)”, 表示该引脚默认输出高电平,其他的属性默认即可。

①选择“Pins”,包含所有IO和外围设备。

②选择“Ports”。

③led灯的IO引脚是P400,选择P4。

④选择P4端口的00引脚。

⑤设置P400 IO属性,Mode模式选择“Output mode(Initial High)”,设置为输出。

配置项取值/描述
Model “Input mode”(输入模式)l “Output mode(Initial Low)”(输出模式,初始电平为低)l “Output mode(Initial High)”(输出模式,初始电平为高)
Pull up(上拉电阻)l “None”(禁止内部上拉)l “input pull-up”(使能内部上拉)当引脚被配置为Output mode时无法设置Pull up参数
IRQ(中断)l “None”(不使用中断)l “IRQ10”(使用中断)
Output type(输出类型)l “CMOS”l “n-ch open drain”(开漏)当引脚被配置为Input mode时无法设置本参数

配置好引脚后,点击右上角的“Generate Project Content”就会生成代码。RASC会为这些引脚生成配置信息,保存在pin_data.c文件里。

打开pin_data.c文件。

  1. 引脚配置信息

    constioport_pin_cfg_tg_bsp_pin_cfg_data[]={{.pin=BSP_IO_PORT_01_PIN_08,.pin_cfg=((uint32_t)IOPORT_CFG_PERIPHERAL_PIN|(uint32_t)IOPORT_PERIPHERAL_DEBUG)},{.pin=BSP_IO_PORT_03_PIN_00,.pin_cfg=((uint32_t)IOPORT_CFG_PERIPHERAL_PIN|(uint32_t)IOPORT_PERIPHERAL_DEBUG)},{.pin=BSP_IO_PORT_04_PIN_00,.pin_cfg=((uint32_t)IOPORT_CFG_PORT_DIRECTION_OUTPUT|(uint32_t)IOPORT_CFG_PORT_OUTPUT_HIGH)},};

对于要配置的每一个引脚,都会生成一个ioport_pin_cfg_t数组项。

typedefstructst_ioport_pin_cfg{uint32_tpin_cfg;//< 引脚的配置值,取值类型ioport_cfg_options_tbsp_io_port_pin_tpin;// 引脚ID,即:哪个引脚}ioport_pin_cfg_t;

指定引脚时需要2个参数:它是哪一组?它是这组里的哪一个?比如引脚P400属于第4组里的第0个引脚。在bsp_io.h里,为每一引脚都定义了一个宏,比如:

typedefenume_bsp_io_port_pin_t{BSP_IO_PORT_00_PIN_00=0x0000,///< IO port 0 pin 0BSP_IO_PORT_00_PIN_01=0x0001,///< IO port 0 pin 1...BSP_IO_PORT_04_PIN_00=0x0400,///< IO port 4 pin 0...}bsp_io_port_pin_t;

设置结构体里的pin_cfg成员,在r_ioport_api.h中有如下定义:

typedefenume_ioport_cfg_options{IOPORT_CFG_PORT_DIRECTION_INPUT=0x00000000,// 输入方向IOPORT_CFG_PORT_DIRECTION_OUTPUT=0x00000004,// 输出方向IOPORT_CFG_PORT_OUTPUT_LOW=0x00000000,// 低电平IOPORT_CFG_PORT_OUTPUT_HIGH=0x00000001,// 高电平IOPORT_CFG_PULLUP_ENABLE=0x00000010,// 使能内部上拉电阻IOPORT_CFG_PIM_TTL=0x00000020,// 使能引脚的输入模式IOPORT_CFG_NMOS_ENABLE=0x00000040,// NMOS output,NMOS开漏输出IOPORT_CFG_PMOS_ENABLE=0x00000080,// PMOS ouput, PMOS开漏输出IOPORT_CFG_DRIVE_MID=0x00000400,// 引脚驱动能力为中等IOPORT_CFG_DRIVE_HS_HIGH=0x00000800,// 引脚驱动能力为高,并且支持高速率IOPORT_CFG_DRIVE_MID_IIC=0x00000C00,// 引脚的输出能力可用于I2C的20mA端口IOPORT_CFG_DRIVE_HIGH=0x00000C00,///< Sets pin drive output to highIOPORT_CFG_EVENT_RISING_EDGE=0x00001000,// 事件触发方式为上升沿IOPORT_CFG_EVENT_FALLING_EDGE=0x00002000,// 事件触发方式为下降沿IOPORT_CFG_EVENT_BOTH_EDGES=0x00003000,// 事件触发方式为双边沿IOPORT_CFG_IRQ_ENABLE=0x00004000,// 使能引脚的中断功能IOPORT_CFG_ANALOG_ENABLE=0x00008000,// 引脚用作模拟信号IOPORT_CFG_PERIPHERAL_PIN=0x00010000// 引脚用作外设的引脚}ioport_cfg_options_t;

2.3 程序设计

程序的入口函数 main 函数调用了 hal_entry 函数。 打开 “\src\hal_entry.c” 文件,在 hal_entry 函数里面编写代码。

实现LED灯的闪烁效果,首先初始化配置 LED 引脚, 然后在一个死循环里面重复此流程:LED 灯亮,延时1s,LED 灯灭,延时1s,然后 LED 灯又亮。 如此反复循环,就能实现 LED 灯的闪烁效果。

1.初始化IOPORT模块

//调用 R_IOPORT_Open 函数来初始化 IOPORT 模块R_IOPORT_Open(&g_ioport_ctrl,g_ioport.p_cfg);

通过 R_IOPORT_Open 函数来初始化 IOPORT 模块, 在调用 R_IOPORT_Open 函数时,需要传入控制块参数 g_ioport_ctrl 和配置参数 g_ioport.p_cfg。

2.控制IO输出高低电平

fsp_err_tR_IOPORT_PinWrite(ioport_ctrl_t*constp_ctrl,bsp_io_port_pin_tpin,bsp_io_level_tlevel);

使用 R_IOPORT_PinWrite 函数可以控制引脚的输出高低电平,从而控制 LED 灯的亮灭。 第一个参数需要传入控制块 g_ioport_ctrl,第二个参数传入IO端口和引脚号,第三个参数传入IO引脚电平。

3.延时函数

voidR_BSP_SoftwareDelay(uint32_tdelay,bsp_delay_units_tunits);

使用 R_BSP_SoftwareDelay 函数可以进行延时,第一个参数表示延时的时间量,第二个参数表示时间单位。

时间单位参数可选:

BSP_DELAY_UNITS_SECONDS,表示秒;

BSP_DELAY_UNITS_MILLISECONDS,表示毫秒;

BSP_DELAY_UNITS_MICROSECONDS,表示微秒。

3 完整代码

3.1 源码目录结构

3.2 hal_entry.c文件代码

voidhal_entry(void){/* TODO: add your own code here */while(1){LED1_ON();// LED1亮R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);//延时1秒LED1_OFF();// LED1灭R_BSP_SoftwareDelay(1,BSP_DELAY_UNITS_SECONDS);//延时1秒}#ifBSP_TZ_SECURE_BUILD/* Enter non-secure code */R_BSP_NonSecureEnter();#endif}

3.3 led.h文件代码

#ifndef__BSP_LED_H#define__BSP_LED_H#include"hal_data.h"// LED引脚置低电平 LED灯亮#defineLED1_ON()R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_04_PIN_00,BSP_IO_LEVEL_LOW)// LED引脚置高电平 LED灯灭#defineLED1_OFF()R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_04_PIN_00,BSP_IO_LEVEL_HIGH)// LED初始化函数voidled_Init(void);#endif

3.4 led.c文件代码

#include"led.h"//LED初始化函数voidled_Init(void){//初始化配置引脚R_IOPORT_Open(&g_ioport_ctrl,g_ioport.p_cfg);}

4 下载验证

连接下载器,将程序编译并下载到开发板之后,按下复位按键来复位开发板,可以观察到开发板上面 LED1 灯在1s亮1s灭循环闪烁。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询