开发板官网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文件。引脚配置信息constioport_pin_cfg_tg_bsp_pin_cfg_data[]{{.pinBSP_IO_PORT_01_PIN_08,.pin_cfg((uint32_t)IOPORT_CFG_PERIPHERAL_PIN|(uint32_t)IOPORT_PERIPHERAL_DEBUG)},{.pinBSP_IO_PORT_03_PIN_00,.pin_cfg((uint32_t)IOPORT_CFG_PERIPHERAL_PIN|(uint32_t)IOPORT_PERIPHERAL_DEBUG)},{.pinBSP_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_000x0000,/// IO port 0 pin 0BSP_IO_PORT_00_PIN_010x0001,/// IO port 0 pin 1...BSP_IO_PORT_04_PIN_000x0400,/// IO port 4 pin 0...}bsp_io_port_pin_t;设置结构体里的pin_cfg成员在r_ioport_api.h中有如下定义typedefenume_ioport_cfg_options{IOPORT_CFG_PORT_DIRECTION_INPUT0x00000000,// 输入方向IOPORT_CFG_PORT_DIRECTION_OUTPUT0x00000004,// 输出方向IOPORT_CFG_PORT_OUTPUT_LOW0x00000000,// 低电平IOPORT_CFG_PORT_OUTPUT_HIGH0x00000001,// 高电平IOPORT_CFG_PULLUP_ENABLE0x00000010,// 使能内部上拉电阻IOPORT_CFG_PIM_TTL0x00000020,// 使能引脚的输入模式IOPORT_CFG_NMOS_ENABLE0x00000040,// NMOS outputNMOS开漏输出IOPORT_CFG_PMOS_ENABLE0x00000080,// PMOS ouput, PMOS开漏输出IOPORT_CFG_DRIVE_MID0x00000400,// 引脚驱动能力为中等IOPORT_CFG_DRIVE_HS_HIGH0x00000800,// 引脚驱动能力为高并且支持高速率IOPORT_CFG_DRIVE_MID_IIC0x00000C00,// 引脚的输出能力可用于I2C的20mA端口IOPORT_CFG_DRIVE_HIGH0x00000C00,/// Sets pin drive output to highIOPORT_CFG_EVENT_RISING_EDGE0x00001000,// 事件触发方式为上升沿IOPORT_CFG_EVENT_FALLING_EDGE0x00002000,// 事件触发方式为下降沿IOPORT_CFG_EVENT_BOTH_EDGES0x00003000,// 事件触发方式为双边沿IOPORT_CFG_IRQ_ENABLE0x00004000,// 使能引脚的中断功能IOPORT_CFG_ANALOG_ENABLE0x00008000,// 引脚用作模拟信号IOPORT_CFG_PERIPHERAL_PIN0x00010000// 引脚用作外设的引脚}ioport_cfg_options_t;2.3 程序设计程序的入口函数 main 函数调用了 hal_entry 函数。 打开 “\src\hal_entry.c” 文件在 hal_entry 函数里面编写代码。实现LED灯的闪烁效果首先初始化配置 LED 引脚 然后在一个死循环里面重复此流程LED 灯亮延时1sLED 灯灭延时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#includehal_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);#endif3.4 led.c文件代码#includeled.h//LED初始化函数voidled_Init(void){//初始化配置引脚R_IOPORT_Open(g_ioport_ctrl,g_ioport.p_cfg);}4 下载验证连接下载器将程序编译并下载到开发板之后按下复位按键来复位开发板可以观察到开发板上面 LED1 灯在1s亮1s灭循环闪烁。