0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

瑞萨RA MCU众测宝典 | 环境搭建之【RA-Eco-RA4M2】基本模板搭建与LED

RA生态工作室 2026-03-27 17:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

瑞萨RA MCU众测宝典环境搭建专题再添硬核实操!这次将解锁“基本模板搭建与LED”技能,加入简易调度器实现多任务管理,一步步搞定“能直接落地”的开发模板,不管是入门练手还是项目开发都能复用。

开启宝典


前言

本人因参加嵌赛而接触到瑞萨的新赛道,由此与瑞萨结缘。当时投入到学习瑞萨对我来说很新颖的开发环境。相较于传统开发方式,瑞萨自家的FSP库(类似于HAL库)极大简化了作品的开发流程,显著提高了开发效率,并提供了更高的灵活性。在完赛后本人也是深深爱上这种简便开发。

接下来,我们将开始对瑞萨基于Arm Cortex-M处理器内核的RA4M2-100pin进行系统学习与实验测试。


NO.1

开发环境准备

首先,引用以下文档:

898fa4de-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图


RAM2系列是比较主流化的类型之一,主打一个低功耗,基于48 MHz Arm Cortex-M33内核,适用于电池供电、物联网终端及其他对功耗敏感的应用场景。我们自己做一些一般的嵌入式产品也完全够用,我们测试的这一款是100pin脚的,有五六个串口,与独立I2C等等。

89a2c168-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图


那么这里推荐用官方开放软件e2s,你也可以上网搜下用keil教程;下载器的话,省时省力当时直接到立创商城买的官方下载器,瑞萨所有系列芯片都支持用,如果板子上有板载下载器还可以直接用串口下载,就是稍微麻烦点。


01


下载e2studio

e2studio软件的官方页面和github下载页面如下,可扫描二维码或复制链接到浏览器查看。


e2studio软件的官方页面

https://www.renesas.cn/cn/zh/software-tool/e-studio

89c08c52-29bf-11f1-96ea-92fbcf53809c.png


github上有各种版本下载,下载页面如下

https://github.com/renesas/fsp/releases

89cfbb0a-29bf-11f1-96ea-92fbcf53809c.png89e3949a-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图


注意在最开始让选择是快速安装还是自定义安装,选快速安装,自己安装容易少下载一些固件,在后续编码时候容易出问题。


02


下载Flash Programmer

我使用Renesas Flash Programmer软件进行烧录hex程序,下载链接在官网,可扫描二维码或复制链接到浏览器查看。


Flash Programme下载链接

https://www.renesas.cn/zh/software-tool/renesas-flash-programmer-programming-gui

89f25cf0-29bf-11f1-96ea-92fbcf53809c.png


NO.2

模板准备

01


入门

首先打开e2s,新建文件:

89fe5abe-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图


根据板子上的芯片,在Device中选择对应型号,注意下面的Toolchains中选择GNU,后面编译起来更方便。

8a0bf098-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图


后面页面默认不修改,之后得到一个初步程序。

8a186e04-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图


首先根据板子主晶振,修改时钟

8a3261ec-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图



我这块板子上芯片所接的外部晶振是24Mhz的,可能有些是12Mhz的,在下面这里可以修改晶振的大小,还可以修改不同时钟线的频率,我一般用外部晶振比较多,注意在这个小齿轮页面做出的任何改动都要最终按右上角的生成键。

8a4710ce-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图

8a555526-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图


在这个页面里,首先修改成生成hex文件;其次这几个勾选上,不然后续串口输出编译会报错。

8a66f5d8-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图

8a79f7a0-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图


02


配置基本函数

模板里面,需要一些LED和基本的串口输出;因为HAL库虽然简便,但是也有弊端,程序出了问题很难找到原因,所以我习惯用LED和串口打印帮助排除问题;程序卡住LED可以直观让我知道具体卡在哪,串口则可以排除程序逻辑错误等等。


在src新建俩文件,在俩文件内新建LED和串口的.c.h文件。

8a8ab4fa-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图


现在就可以去瑞萨特有的FSP库生成初始代码,先把烧录方式改成SWD;看原理图,这三个led灯接的pin脚,并且另一端是地,也就是给高电平是点亮,找到这几个pin脚,修改为外部输入模式OUTPUT。

8a9c58d6-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图

8aafe518-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图

8abb61f4-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图


SCI里面找到和typeC一起的串口9,这样既可以供电也可以用来调试

8acf55c4-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图

8adc5a1c-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图


串口这里要注意在pin脚页面配置好后,还有配置Stack,会生成一个块,点击它,左下角属性里面,可以修改配置串口详细的所有基础信息,函数名,波特率,回调函数等等。

8aec9f1c-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图


所使用的UART属性描述

8aff0878-29bf-11f1-96ea-92fbcf53809c.png


点击生成代码后旁边的资源里面,在HAL里面就会有相应你配置模块的函数,最常见一些OPEN,ENABLE等等,你可以直接拖动出来,使用这些函数,相当于帮你封装好了功能函数,你只需要根据需求修改封装函数的入口参数即可。

8b13c4ca-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图


03


key板块

首先是编写key常用封装函数,包括LED的开闭,反转以及定时闪烁。

8b298616-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图

左右滑动查看完整内容

//LED单独开闭#define LED1_OFF R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_05, BSP_IO_LEVEL_LOW);#define LED1_ON R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_05, BSP_IO_LEVEL_HIGH);
#define LED2_OFF R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_04, BSP_IO_LEVEL_LOW);#define LED2_ON R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_04, BSP_IO_LEVEL_HIGH);
#define LED3_OFF R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_02, BSP_IO_LEVEL_LOW);#define LED3_ON R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_00_PIN_02, BSP_IO_LEVEL_HIGH);
//LED翻转#defineLED1_TURN R_PORT4->PODR ^=1 <<(BSP_IO_PORT_04_PIN_05 & 0xFF);#define LED2_TURN         R_PORT4->PODR ^=1 <<(BSP_IO_PORT_04_PIN_04 & 0xFF);#define LED3_TURN         R_PORT0->PODR ^=1 <<(BSP_IO_PORT_00_PIN_02 & 0xFF);
//LED闪烁函数#defineLED1_SHINE() R_PORT4->PODR ^=1 <<(BSP_IO_PORT_04_PIN_05 & 0xFF);\                             R_BSP_SoftwareDelay(500,BSP_DELAY_UNITS_MILLISECONDS);#define LED2_SHINE()            R_PORT4->PODR ^=1 <<(BSP_IO_PORT_04_PIN_04 & 0xFF);\                             R_BSP_SoftwareDelay(500,BSP_DELAY_UNITS_MILLISECONDS);#define LED3_SHINE()            R_PORT0->PODR ^=1 <<(BSP_IO_PORT_00_PIN_02 & 0xFF);\                             R_BSP_SoftwareDelay(500,BSP_DELAY_UNITS_MILLISECONDS);


开关函数(ON/OFF)

实现方式:调用瑞萨现成的库函数R_IOPORT_PinWrite;

工作原理:直接向指定的引脚写入明确的高电平或低电平信号,就像直接给灯下命令“开”或“关”;

特点:代码最清晰,可移植性好,但执行效率相对较低。



翻转函数(TURN)

实现方式:直接操作硬件寄存器


工作原理:使用按位异或操作符^=。1 << (PIN号)会生成一个只有目标位为1的掩码,与该寄存器的当前值进行异或运算。


异或规则:相同为0,不同为1

效果:如果目标位当前是0(灯灭),异或后变为1(灯亮);如果当前是1(灯亮),异或后变为0

特点:执行速度极快(直接操作寄存器),但代码可读性稍差,且高度依赖硬件,但我个人最喜欢用这个排除错误



闪烁函数(SHINE)

实现方式:翻转函数+阻塞延时。


工作原理:它其实是先做了一次翻转操作,然后立即调用一个延时函数R_BSP_SoftwareDelay。这个延时函数会让整个CPU停下来等待指定的时间(500毫秒)。


特点

这是一个组合动作(翻转并延时)。

阻塞式:在延时的半秒内,CPU不能做任何其他事情。因此它通常需要放在循环里才能实现连续闪烁,并且不适合在需要同时处理多任务的系统中使用。


个人喜欢用这个解决程序堵塞。


8b45dab4-29bf-11f1-96ea-92fbcf53809c.png


将其放在.h文件内,在主函数中声明后,全局就都可以使用。


04


uart模块


回显输出

左右滑动查看完整内容

#include"debug.h"
voidUart9_Init(){ fsp_err_terr = FSP_SUCCESS;
//串口初始化 err =R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
assert(FSP_SUCCESS == err);}

//R_SCI_UART_Write(&g_uart9_ctrl, p_src, bytes);//使用该函数后,标志位会被置位,使用时要及时在被置位后清零标志位,否则在连续调用时,会导致数据丢失

volatilebool uart_complete_flag =false;
voidcallback_uart9_debug(uart_callback_args_t*p_args){ switch(p_args->event) { caseUART_EVENT_RX_CHAR: { R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t*)&(p_args->data),1); //当接受字符,出发中断,发送原字符 break; }
caseUART_EVENT_TX_COMPLETE: { uart_complete_flag=true; break; } default: break; }}


虽然Uart9_Init里面只有一行指令,但还是最好封装为一个函数,这样方便后续程序多起来后我们可以直观的理解与调用,也方便他人阅读。


这样编写好了串口的回显,为了后续可以直接用printf串口打印调试信息,我们还需要在debug.c中加入printf向串口的重定义


左右滑动查看完整内容


//串口重定向//首先是条件编译,检查是否是GCC编译;根据条件选择使用哪种函数进行重定向#ifdefined __GNUC__ && !defined __clang__int_write(intfd,char*pBuffer,intsize);//防止编译警告int_write(intfd,char*pBuffer,intsize){ (void)fd; R_SCI_UART_Write(&g_uart9_ctrl,(uint8_t*)pBuffer,(uint32_t)size); while(uart_complete_flag ==false); uart_complete_flag =false;
returnsize;}#elseintfputc(intch, FILE *f){ (void)f; R_SCI_UART_Write(&g_uart9_ctrl,(uint8_t*)&ch,1); while(uart_complete_flag==false); uart_complete_flag =false;
returnch;}#endif


05


主函数部分


调度器

瑞萨主函数为hal_entry,你也可以理解为main。对于一般集成了较多的程序,我习惯使用调度器,可以自由直观的开闭需要的部分,后期对于大项目也可以试试用rtos

左右滑动查看完整内容

#include"hal_data.h"#include"gpt/gpt.h"#include"key/key.h"#include"led/led.h"#include"debug/debug.h"

FSP_CPP_HEADERvoidR_BSP_WarmStart(bsp_warm_start_event_tevent);FSP_CPP_FOOTER

/*变量声明区*//*------------------------------------------------------*/uint32_tuwTick; //系统计时变量
/*------------------------------------------------------*/uint32_tKey_Val, Key_Down, Key_Up, Key_Old;
/*------------------------------------------------------*/
voidKey_Proc(){ Key_Val =Key_Read(); Key_Down = Key_Val & (Key_Old ^ Key_Val);// 按键按下检测 Key_Up = ~Key_Val & (Key_Old ^ Key_Val); // 按键抬起检测 Key_Old = Key_Val;
switch(Key_Down) { case3: LED1_TURN; break;
case4: LED2_TURN; break; }
}
voidLED_Proc(){ LED3_TURN;}

/* 调度器任务结构体定义 */typedefstruct{ void(*task_func)(void); // 任务函数 unsignedlongint rate_ms; // 任务执行周期(毫秒) unsignedlongint last_run;// 任务上次运行时间}task_t;
/* 调度器任务列表 */task_tScheduler_Task[] = {
{Key_Proc,10,0}, // 键盘任务,每10毫秒执行一次 {LED_Proc,1000,0}, // 数码管任务,每100毫秒执行一次

};
uint8_ttask_num=0;//任务数量
/* 调度器初始化 */voidScheduler_Init(void){ task_num =sizeof(Scheduler_Task) /sizeof(task_t);// 计算任务数量}
/* 调度器运行 */voidScheduler_Run(void){ uint8_ti=0; for(i =0; i < task_num; i++)  {    uint32_t now_time = uwTick; // 获取当前时间    if (now_time >= (Scheduler_Task[i].last_run + Scheduler_Task[i].rate_ms)) { Scheduler_Task[i].last_run = now_time;// 更新任务上次运行时间 Scheduler_Task[i].task_func(); // 执行任务 } }}

/*******************************************************************************************************************//*** main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function* is called by main() when no RTOS is used.**********************************************************************************************************************/voidhal_entry(void){ /*TODO:add your own code here */
Scheduler_Init(); Uart9_Init();
System_Init(); while(1) { Scheduler_Run(); }#ifBSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter();#endif}



功能

代码里我写了,LED3的调度器设定的时间,间隔闪烁。

8b5a6dee-29bf-11f1-96ea-92fbcf53809c.png


1000毫秒的闪烁间隔:


8b69e580-29bf-11f1-96ea-92fbcf53809c.png


而按键则是,按键sw1,sw2分别对着LED1和LED2,按下则反转一次。


NO.3

下载


然后准备的差不多了,就可以下载了,打开Flash Programmer,点击左上角file,新建立一个。


8b78e652-29bf-11f1-96ea-92fbcf53809c.png


按照这样选:


8b8d001a-29bf-11f1-96ea-92fbcf53809c.jpg

点击查看大图


这里推荐给SWD下载这里做个段子,一来方便下载,二来这里要注意SWDIO,SWCLK两条线要接紧一点,不然老下不下去。


8ba14610-29bf-11f1-96ea-92fbcf53809c.png

点击查看大图


这样就下载成功了。


如果在FSP配置、调度器编写或下载调试中遇到问题,或是有模板优化、功能扩展的巧思,欢迎在评论区分享交流~


环境搭建专题会持续覆盖更多RA系列开发板的实操指南,关注瑞萨嵌入式小百科,让嵌入式开发“从0 到1”更高效,后续还能解锁更多项目模板和避坑技巧!


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    244

    文章

    24703

    浏览量

    692375
  • mcu
    mcu
    +关注

    关注

    147

    文章

    19110

    浏览量

    403259
  • 瑞萨
    +关注

    关注

    38

    文章

    22516

    浏览量

    91164
  • RA
    RA
    +关注

    关注

    0

    文章

    38

    浏览量

    25356
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RA-Eco-RA4M2开发板基本模板搭建LED指南

    RA MCU宝典环境
    的头像 发表于 02-24 14:43 6679次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA-Eco-RA4M2</b>开发板基本<b class='flag-5'>模板</b><b class='flag-5'>搭建</b>与<b class='flag-5'>LED</b>指南

    RA MCU宝典 | I²C读取EEPROM

    “RAMCU宝典”IIC专题继续深耕!上一期我们用【RA-Eco-RA2E1】开发板实现了IIC通信的OLED显示。这次我们把目光转向实用的存储场景——基于【RA-Eco-RA4M2
    的头像 发表于 01-13 18:05 8040次阅读
    <b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | I²C读取EEPROM

    RA MCU宝典 | 环境搭建RA-Eco-RA6E2-64PIN-V1.0 开发板】介绍、环境搭建、工程测试

    “RAMCU宝典环境搭建专题再添实用干货!这次咱们聚焦高性能入门级开发板——【RA-Eco-RA6E2-64PIN-V1.0】。本文介
    的头像 发表于 03-20 16:23 7896次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | <b class='flag-5'>环境</b><b class='flag-5'>搭建</b><b class='flag-5'>之</b>【<b class='flag-5'>RA-Eco-RA6E2</b>-64PIN-V1.0 开发板】介绍、<b class='flag-5'>环境</b><b class='flag-5'>搭建</b>、工程测试

    RA MCU宝典 | 环境搭建RA-Eco-RA4M2搭建Keil开发环境

    “RAMCU宝典环境搭建专题再添硬核实操!开启宝典
    的头像 发表于 04-03 17:59 6957次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | <b class='flag-5'>环境</b><b class='flag-5'>搭建</b><b class='flag-5'>之</b>【<b class='flag-5'>RA-Eco-RA4M2</b>】<b class='flag-5'>搭建</b>Keil开发<b class='flag-5'>环境</b>

    RA MCU宝典 | 环境搭建RA-Eco-RA4M2】QE工具使用

    “RAMCU宝典环境搭建专题再添硬核实操!开启宝典
    的头像 发表于 04-10 18:26 4759次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | <b class='flag-5'>环境</b><b class='flag-5'>搭建</b><b class='flag-5'>之</b>【<b class='flag-5'>RA-Eco-RA4M2</b>】QE工具使用

    RA MCU宝典 | 环境搭建RA-Eco-RA4M2】基于SCI的程序下载(使用Renesas Flash Progammer烧录)

    “RAMCU宝典环境搭建专题再添硬核实操!开启宝典
    的头像 发表于 04-15 17:43 5916次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b><b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | <b class='flag-5'>环境</b><b class='flag-5'>搭建</b><b class='flag-5'>之</b>【<b class='flag-5'>RA-Eco-RA4M2</b>】基于SCI的程序下载(使用Renesas Flash Progammer烧录)

    电子RA-Eco-RA4M2搭建Keil开发环境指南

    电子RA4M2 32位微控制器(MCU)系列使用支持TrustZone 的高性能Arm Cortex-M33内核。与片内的 Secure
    的头像 发表于 03-18 08:07 2835次阅读
    <b class='flag-5'>瑞</b><b class='flag-5'>萨</b>电子<b class='flag-5'>RA-Eco-RA4M2</b><b class='flag-5'>搭建</b>Keil开发<b class='flag-5'>环境</b>指南

    RA-Eco-RA4M2开发板评测】1 RA4M2开发环境搭建

    开发环境: IDE:MKD 5.38a Renesas RA Smart Configurator:v5.1.0 开发板:RA-Eco-RA4M2 MCU:R7FA
    发表于 04-25 22:38

    RA-Eco-RA4M2开发板评测】RA-Eco-RA4M2 Keil 开发环境搭建

    开发环境: IDE:MKD 5.38a Renesas RA Smart Configurator:v5.1.0 开发板:RA-Eco-RA4M2 MCU:R7FA
    发表于 04-27 22:54

    RA-Eco-RA4M2开发板评测】介绍、环境搭建、工程测试

    RA-Eco-RA4M2开发板评测】介绍、环境搭建、工程测试 本文介绍了 RA-Eco-RA4M2-100PIN-V2.0 开发板的基本信息,包括产品特点、参数资源、原理图、
    发表于 03-21 15:35

    RA-Eco-RA4M2开发板评测】+ 开箱环境搭建

    RA-Eco-RA4M2开发板评测】+ 开箱环境搭建一、 硬件部分介绍1. 硬件外观: RA-Eco-RA4M2-100PIN-V1.0是一款基于100MHz Arm® Cort
    发表于 04-01 17:15

    RA-Eco-RA4M2开发板评测】+VS Code 下 RA4M2 开发环境搭建与 GPIO 点灯实验教程

    实现 RA4M2 轻量化开发,完整覆盖环境搭建、工程配置、编译、烧录与功能验证全流程。该方案主要是基于我常用的IDE进行
    发表于 04-15 15:12

    RA-Eco-RA4M2开发板评测】+ FreeRTOS多任务初探

    和开发环境 1.1.4 选择RTOS开发 1.1.5 完成后的界面 硬件外设配置参考【RA-Eco-RA4M2开发板评测】+ 开发环境搭建及外设初体验 -
    发表于 04-19 12:30

    【精品聚合】RA-Eco-RA4M2-100PIN开发板试用报告作品汇总

    报告:【RA-Eco-RA4M2-100PIN开发板】测评仿真开发环境搭建RA-Eco-RA4M2-100PIN开发板】程序启动过程,中
    发表于 12-02 16:43

    RA MCU宝典 | 环境搭建【FPB-RA0E2】开发环境搭建

    RA生态工作室关注我们“RAMCU宝典环境搭建专题更新啦!这次我们聚焦【FPB-RA0E2
    的头像 发表于 03-11 16:33 1043次阅读
    <b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>众</b>测<b class='flag-5'>宝典</b> | <b class='flag-5'>环境</b><b class='flag-5'>搭建</b><b class='flag-5'>之</b>【FPB-<b class='flag-5'>RA0E2</b>】开发<b class='flag-5'>环境</b><b class='flag-5'>搭建</b>