感谢elecfans和RA生态社区提供本次评测机会。
面对陌生的新鲜事物,人们往往心生畏惧,这种恐惧源自不熟悉感所触发的天然自我保护机制,促使我们更倾向于蜷缩在已知的舒适区内。对于大多数习惯于使用51、STM32等开发平台的开发者而言,瑞萨无疑是一个全新的挑战,一个尚未涉足的领域。
瑞萨并不随波逐流,主要表现在它的库函数、开发工具与众不同,虽然为开发者带来了上手上的困难,但也是其吸引人的地方。
本次评测内容为RA-Eco-RA2E1-48PIN-V1.0开发板,开发板以瑞萨R7FA2E1A72DFL为主控芯片,出品方为RA生态工作室。非官方开发板,没有集成调试下载功能模块,但是因为该芯片支持SWD烧录,所以烧录还是非常方便。
一、资源
需要的资源:1、开发例程;2、开发工具;3、相关手册
这些资源可以在以下地址找到
1、瑞萨官网:https://www.renesas.cn/zh
官网需要注册才可以下载
RA2E1的资料入口:
https://www.renesas.cn/zh/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ra2e1-48mhz-arm-cortex-m23-entry-level-general-purpose-microcontroller
2、RA生态社区:https://www.ramcu.cn/
RA2E1开发板资料(大部分资料都有):
https://www.ramcu.cn/public/uploads/files/20220416/323173e463091e786942d9053383c581.zip
工具下载地址:
https://www.ramcu.cn/lists/21.html
开发工具网盘地址:
https://pan.baidu.com/s/13AXFQ59NxTv3gdVZz4oGnQ?pwd=598s#list/path=%2Fsharelink1546986953-20610876566597%2Fe2%2BFSP%2BQE%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97&parentPath=%2Fsharelink1546986953-20610876566597
1、RA生态社区gitee:https://gitee.com/ramcu
gitee内容不多,而且也比较老了。
大多数资料都可以从官方下,但官方可能下载较慢。推荐RA生态社区提供的下载地址。
1、工具e2 studio(e2 with Flexible Software Package),这个工具相当于STM32CubeIDE,安装了它就可以开始开发了。图形化的配置工具,基于eclipse的开发环境,甚至烧录环境。
“Flexible Software Package”简称FSP ,中文译为“灵活配置软件包”。可以理解为SDK。下载带FSP的e2 studio就不用再单独下载FSP安装了。
2、如果想用GCC、keil开发可以下载RA Smart Configurator,这个工具相当于STM32CubeMX,提供图形化的配置功能,可以生成gcc、MDK代码。
RA生态社区提供的RA2E1开发板资料非常详细。不但有例程还有PPT讲解,可以说是手把手教授入门,即使不熟悉瑞萨的开发流程可以顺利上手,必有赞一个。
二、环境搭建
1、【e2 studio环境搭建】e2 studio环境搭建比较简单,只要满足安装条件一路下一步就可以了。
2、【其他环境前提】RA Smart Configurator安装
也是一路下一步,但是我遇到了,选择“为所有用户安装”失败的情况,只能选择“为当期用户安装”。
3、【MDK环境】为了支持MDK,需安装Renesas.RA_DFP.5.5.0.pack,目前5.5.0是最高版本。
4、【vode+cmake+gcc环境】为了支持VSCODE,需要安装交叉编译工具Arm GNU Toolchain arm-none-eabi.12.2 mpacbti-rel1,好像只能用12.2,试过9、10、13版本都不行。
当然还要安装cmake、cmake tools、ninja、vscode中的各种扩展,总之是使VSCODE可以支持cmake驱动gcc进行编译,这些不再赘述,与其他vscode+交叉编译工具开发环境并无不同。
并且进入vscode环境前需设置ARM_GCC_TOOLCHAIN_PATH环境变量
d:\\>set ARM_GCC_TOOLCHAIN_PATH=C:/12_2_mpacbti_rel1/bin
d:\\>cd D:/MCU/RA2E1_1
d:\\MCU\\RA2E1_1>code .
CMAKE配置:
编译一个程序
三、烧录
1、e2 studio和Keil烧录就点击工具中的烧录下载按钮就可以了。
2、Vscode编译烧录还是用pyocd吧
pyocd安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyocd
为了使pyocd支持R7FA2E1A7:
先看以下是否之前安装过,结果没有
pyocd pack -f R7FA2E1A7
Part Vendor Pack Version Installed
----------------------------------------------------------
R7FA2E1A7 Renesas Renesas.RA_DFP 5.5.0 False
安装R7FA2E1A:
pyocd pack -i R7FA2E1A
Downloading packs (press Control-C to cancel):
Renesas.RA_DFP.5.5.0
Downloading descriptors (001/001)
pyocd pack -f R7FA2E1A7
Part Vendor Pack Version Installed
----------------------------------------------------------
R7FA2E1A7 Renesas Renesas.RA_DFP 5.5.0 True
列出安装的pack:
pyocd pack -s
接上下载工具和开发板,输入:
pyocd list -p
烧录下载:
pyocd flash --erase chip --target R7FA2E1A7 RA2E1_1.elf
四、点灯、串口验证
(一)配置
1、打开RA Smart Configurator新建工程
2、建立个CMake类型的工程
3、Stacks中添加uart0
4、uart0配置
5、配置LED gpio
(二)程序
以下程序在hal_entry.c中增加:
1、printf重定向
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
err = R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)&ch, 1);
if(FSP_SUCCESS != err) __BKPT();
while(uart_send_complete_flag == false){}
uart_send_complete_flag = false;
return ch;
}
int _write(int fd,char *pBuffer,int size)
{
for(int i=0;i<size;i++)
{
__io_putchar(*pBuffer++);
}
return size;
}
GeneratedCfg.cmake中
SET(RASC_CMAKE_EXE_LINKER_FLAGS "-mcpu=cortex-m23;-Wunused;-Wuninitialized;-Wall;-Wextra;-Wmissing-declarations;-Wconversion;-Wpointer-arith;-Wshadow;-Wlogical-op;-Waggregate-return;-Wfloat-equal;-fmessage-length=0;-fsigned-char;-ffunction-sections;-fdata-sections;-mthumb;-T;script/fsp.ld;-Wl,--gc-sections;-Wl,-Map,${PROJECT_NAME}.map;--specs=nosys.specs;--specs=nano.specs;-o;${CMAKE_BINARY_DIR}/${PROJECT_NAME}.elf")
增加:--specs=nosys.specs;否则printf重定向编译报错
2、uart中断回调函数
void user_uart_callback (uart_callback_args_t * p_args)
{
if(p_args->event == UART_EVENT_TX_COMPLETE)
{
uart_send_complete_flag = true;
}
if(p_args->event == UART_EVENT_RX_CHAR)
{
RxBuff[0] = p_args->data;
RxLine++; //每接收到一个数据,进入回调数据长度加1
receive_Buff[RxLine-1]=RxBuff[0]; //把每次接收到的数据保存到缓存数组
Rx_flag=1;
if(receive_Buff[RxLine-2]=='\\r'&&receive_Buff[RxLine-1]=='\\n') //接收结束标志位,这个数据可以自定义,根据实际需求,这里只做示例使用,不一定是0xff
{
Rx_flag_finish=1;
}
RxBuff[0]=0;
}
}
3、打印UART接收数据
void printf_usart(void)
{
printf("length=%d\\r\\n",RxLine);
for(int i=0;i<RxLine;i++)
printf("data:[%d] = 0x%x\\r\\n",i,receive_Buff[i]);
memset(receive_Buff,0,sizeof(receive_Buff));
RxLine=0;
Rx_flag_finish=0;
Rx_flag = 0;
}
4、hal_entry函数
void hal_entry(void)
{
R_SCI_UART_Open (&g_uart0_ctrl, &g_uart0_cfg);
while(1)
{
R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_03, BSP_IO_LEVEL_LOW);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_04, BSP_IO_LEVEL_LOW);
R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_03, BSP_IO_LEVEL_HIGH);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_0, BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);
if(Rx_flag_finish==1)
{
printf_usart();
}
}
#if BSP_TZ_SECURE_BUILD
R_BSP_NonSecureEnter();
#endif
}
实现延时翻转P103、P104,串口收到末尾为“\r\n”的字符串打印出出来。
五、运行效果
1、串口接收打印:
2、LED翻转: