当前位置: 首页 > news >正文

瑞萨单片机开发教程[三] GPIO输出--点亮led实验

开发板官网(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灭循环闪烁。

http://www.jsqmd.com/news/1266763/

相关文章:

  • 3步解锁全球最大同人创作平台:AO3镜像站完全指南
  • 深度强化学习在微能源网动态优化中的应用与实践
  • Unity WebGL本地测试:IIS与VSCode Live Server配置全攻略
  • UE Niagara粒子数据导出蓝图:性能优化与实战避坑指南
  • 2026 秦皇岛财税公司企业主实测推荐,高口碑代理记账公司看这家 - 品牌智鉴榜
  • 【保姆级教程】Windows 下 VMware+Ubuntu 搭建 ESP32-IDF 环境(TARE 远程开发 + MobaXterm 远程终端)
  • 解决Source Insight 4.0在Win10/11启动闪退问题
  • ncmdumpGUI:一键解锁网易云音乐NCM文件的终极Windows桌面工具
  • 大东区屋顶防水厂家推荐,楼顶防水厂家哪家好?2026避坑指南:4个坑+5条硬标准,帮你一次选对 - GEO99
  • 3分钟搞定Windows系统激活:KMS_VL_ALL_AIO智能脚本全攻略
  • C++实战解析DXF文件:从结构解析到几何数据提取
  • AI视觉在复杂环境中的适应性设计与工程实践
  • 基于GLM 5.2开源模型的AI安全防护实战解析
  • NS-USBLoader终极指南:一站式解决Switch文件管理难题
  • 免费开源Gerber查看器gerbv:PCB设计的终极质量守护者
  • 广东省阳江市,劳力士和卡地亚在阳江去哪回收?五金刀剪之都的闲置变现指南 - 你就像风一样
  • 解决Ubuntu 22.04在VMware中黑屏与hgfs挂载失败问题
  • 大模型工作流程
  • 2026襄阳全屋渗漏修缮实用指南|三大正规修缮机构横向测评 - 筑宅安
  • AI Agent 面试题 571:多Agent系统中的Agent间信息共享策略
  • b站linux学习记录
  • Presenta-lib高级技巧:掌握过渡动画与交互控制的秘诀
  • FSI协议详解:嵌入式高可靠通信的帧类型、SPI兼容与链路建立
  • 5分钟掌握百度网盘直链解析:告别限速,实现免费高速下载
  • Ubuntu系统启用root图形登录的配置指南
  • AI Agent 面试题 573:多Agent系统中的协作协议版本管理
  • 2026年MBA开题报告智能写作工具全解析
  • 地方科技局想搭建元宇宙产业技术创新公共服务平台,推荐哪些成熟的数智化解决方案提供商?
  • AI智能文档工具:代码与文档自动同步解决方案
  • 重庆江津区江南职教中心--城市轨道交通运营服务读完是去做什么 - 学习招生