瑞萨RA2E1点亮LED

简介: 瑞萨RA2E1点亮LED
对于从事电子方面开发的技术工程师来说,跑马灯大概是最简单的例子,就类似于每种编程语言中程序员接触的第一个程序 Hello World 一样,所以这个例子就从跑马灯开始。让它定时地对 LED 进行更新(亮或灭)。

用自家的IDE会更容易上手一些。所以我选择了e2studio。

新建项目

新建一个瑞萨RA的项目

image.png

如果没有RA,则需要在“帮助”菜单下安装设备。

image.png

选择合适的FSP

有些FSP的board列表是没有RA2E1板子的。需要导入合适的板级支持包BSP。
BSP下载地址:https://www.renesas.com/cpk-ra2l1

点击“帮助”,在二级菜单中选择“关于e2studio”,在新窗口中选择“安装细节”,按图中顺序打开目录。

然后将BSP压缩包内容解压到目录中,一级目录有重名文件夹“internal”,如果是第一次安装,win环境下不会报重复文件的提示,如果有,覆盖即可。
image.png
回到上一步中到“新建项目”,项目名称随便写一个,然后会到这个界面。
如果BSP安装成功,则在对应版本的FSP下,board菜单会有CPK-RA2E1开头的选项。
可以选择CPK-RA2E1开头的选项,也可以选择第一个选项“Any Device”。
image.png

以下三段是瑞萨产品手册的指示:
  1. 对于小型动手实验,请选择“Executable”(可执行文件)和“No RTOS”(无 RTOS),然后单击“下一步”。
  2. 这将打开“Project Template Selection”(项目模板选择)页面,可以在其中选择初始项目内容的模板。 项目模板可能包含多个条目;至少包括适合所选电路板/器件组合的板级支持包。有些模板甚至包括一个完整 的示例项目,但“Project Configurator”(项目配置器)将仅显示与您在先前屏幕上所做选择匹配的模板。在 本例中,选择“Bare Metal – Minimal”(裸机 – 最小化)条目,以加载评估板的板级支持包。单击“完成”。完成项目的配置。
  3. “Project Configurator”(项目配置器)将关闭并在最后一步中创建项目所需的所有文件。完成此后处理 后,将出现一个对话框,询问您是否要打开“FSP Configuration”(FSP 配置)透视图。选择“Open Perspective”(打开透视图)。

开始编写

不要修改main.c,要修改hal_entry.c

获取所有自动生成的文件之后,接下来查看创建的内容。 IDE 左侧的“Project Explorer”(项目资源管理器)列出了当前 包含的所有内容。ra_gen 文件夹保存通道号等配置集。src 目录包 含一个名为 hal_entry.c 的文件。这是稍后要编辑的文件。请注 意,尽管在 ra_gen 文件夹中有一个名为 main.c 的文件,但用户 代码必须转到 hal_entry.c 中。否则,如果您在 FSP 配置器中进 行修改并重新创建项目内容,在 main.c 中的更改会丢失,因为每次单击“Generate Project Content”(生成项目内容)时,都将覆盖该文件。
该项目还包含几个名称中带有“ra”或“fsp”的目录,其中 包含 FSP 的源文件、包含文件和配置文件。通常的规则是,不得 修改这些文件夹(和子文件夹)的内容。其中包含由配置器生成 的文件,在此所做的任何更改都将在下次生成或刷新项目内容时 丢失。用户可编辑的源文件是直接位于 \src 文件夹或您添加的任 何其他文件夹为根目录中的文件。

在common_data.c中, 写有 I/O 端口驱动程序实例 g_ioport
const ioport_instance_t g_ioport =
{ .p_api = &g_ioport_on_ioport, 
  .p_ctrl = &g_ioport_ctrl, 
  .p_cfg = &g_bsp_pin_cfg, };

g_ioport_on_ioport 是一个结构体,用于声明端口可能执行的操作,将分配给 g_ioport 实例 的 API 指针。将鼠标悬停在该结构体上,可以轻松查看其中的内容,此结构体显示了其成员之一 (.pinWrite) 是指向引脚写入函数的指针。
image.png
根据官方文档的指示,要点量led灯,需要这行代码:
g_ioport.p_api->pinwrite (&g_ioport_ctrl, pin, BSP_IO_LEVEL_LOW);

其中,g_ioport_ctrl是一个结构体。

/** IOPORT private control block. DO NOT MODIFY. Initialization occurs when R_IOPORT_Open() is called. */
/** IOPORT 私有控制块。不要修改。初始化发生在调用 R_IOPORT_Open() 时。 */

typedef struct st_ioport_instance_ctrl
{
    uint32_t     open;
    void const * p_context;
} ioport_instance_ctrl_t;
pin显然不是官方提供的对象

接下来我们需要自行修改

BSP_IO_LEVEL_LOW是一个宏,表示低电平

Ctrl+Shift+T,可以搜索全局变量。
image.png
/** Levels that can be set and read for individual pins */
/** 可以为各个引脚设置和读取的电平 */

typedef enum e_bsp_io_level
{
    BSP_IO_LEVEL_LOW = 0,              ///< Low
    BSP_IO_LEVEL_HIGH                  ///< High
} bsp_io_level_t;

对于BSP_IO_LEVEL_LOWBSP_IO_LEVEL_HIGH,使用了枚举来进行存储,因此第四行中的BSP_IO_LEVEL_HIGH不需要手动赋值,默认升序。

获取灯泡端口

接下来我们可以查阅官方的原理图,获取灯泡对应的端口,下载链接:
官方:https://www.renesas.cn/cn/zh/document/sch/1596866?r=1596841
CSDN:https://download.csdn.net/download/m0_49303993/87624323
官方文档给的样例是使用FSP。
创建类型为 bsp_leds_t 的结构体(在 board_leds.h 中声明)并为其分配在 board_leds.c 中定义的全局 BSP 结构体 g_bsp_leds 即可解决问题。这两个文件均位于项目的 ra\board\ra2e1_cpk 文件夹内。因此,以下两行代码足以获取有关评估板上 LED 的信息:

extern bsp_leds_t g_bsp_leds;
bsp_leds_t Leds = g_bsp_leds;

现在,可以使用 LED 结构体来访问电路板上的所有 LED,并使用以下语句点亮红色 LED(将端口设置为 低电平将点亮 LED,将端口设置为高电平则将熄灭 LED):

g_ioport.p_api->pinWrite (&g_ioport_ctrl, 
                          Leds.p_leds[BSP_LED_LED1], 
                          BSP_IO_LEVEL_LOW);

此语句后需要有第二条语句,用于将其引脚设置为高电平以熄灭 用户 LED。 最后,需要提供一段延时以使 LED 以用户友好的方式切换。为此,可以再次调用 BSP API:
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);
R_BSP_SoftwareDelay 函数的第一个参数是要延迟的单位数,而第二个参数是指定的基本单位,在 本例中为秒。其他选项包括毫秒和微秒。
最后,由于我们想无限期地运行程序,因此必须围绕代码创建一个 while(1) 循环。
根据官方文档的指示,我们要将代码输入到 hal_entry.c 文件中的函数签名之后,替换 /* TODO: add your own code here */ 行。对于由项目配置器和 FSP 配置器插入的其他代码,请保持不变。单片机需要借助这些代码来正常运行。
但我默认生成的项目没有这一行。
可以将以下代码复制到hal_entry.chal_entry()函数体的第一行中。

extern bsp_leds_t g_bsp_leds;
bsp_leds_t Leds = g_bsp_leds;
while (1)
{
    g_ioport.p_api->pinWrite (&g_ioport_ctrl, Leds.p_leds[BSP_LED_LED1], BSP_IO_LEVEL_LOW);
    R_BSP_SoftwareDelay (1, BSP_DELAY_UNITS_SECONDS);
    g_ioport.p_api->pinWrite (&g_ioport_ctrl, Leds.p_leds[BSP_LED_LED1], BSP_IO_LEVEL_HIGH);
    R_BSP_SoftwareDelay (1, BSP_DELAY_UNITS_SECONDS);
}
复制到选中的位置中

image.png

编译运行

插入开发板,依次点击“构建”、“调试”、“继续”、“继续”。
image.png

然后就看到开发板红灯交替闪烁

70db7d631c196bb083b8a20a1fcb1c3.jpg

目录
相关文章
|
7月前
|
编译器 C语言 C++
【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)
【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)
野火RA6M5开发板 IIC-OLED测试学习
野火RA6M5开发板 IIC-OLED测试学习
101 0
野火RA6M5开发板 IIC-OLED测试学习
|
传感器
野火RA6M5开发板 DHT11温湿度传感器 OLED显示测试学习
野火RA6M5开发板 DHT11温湿度传感器 OLED显示测试学习
123 0
野火RA6M5开发板 DHT11温湿度传感器 OLED显示测试学习
stm32CubeMX点亮一个LED灯
stm32CubeMX点亮一个LED灯
103 0
|
IDE 开发工具 芯片
ESP32CAM,点亮一个LED(Arduino平台)
ESP32CAM,点亮一个LED(Arduino平台)
468 0
|
开发工具 git
MSP430F5529学习笔记(2)——点亮LED
MSP430F5529学习笔记(2)——点亮LED
201 0
|
编译器
MSP430F5529学习笔记(3)——实现LED闪烁和呼吸灯
MSP430F5529学习笔记(3)——实现LED闪烁和呼吸灯
513 0
STM32控制GPIO完成点亮LED灯
STM32控制GPIO完成点亮LED灯
366 0
STM32控制GPIO完成点亮LED灯
嵌入式开发学习之--点亮LED灯(上)
嵌入式开发学习之--点亮LED灯(上)
嵌入式开发学习之--点亮LED灯(上)
嵌入式开发学习之--点亮LED灯(下)
嵌入式开发学习之--点亮LED灯(下)
嵌入式开发学习之--点亮LED灯(下)