瑞萨RA4L1系列芯片搭载Cortex-M33内核,自带段码屏驱动,适用于低功耗标表记、空调控制面板等仪表类产品。对于需要安全认证的智能电表,Cortex-M33支持Trust-Zone,可以满足安全功能的需要,是不错的选择。

1、开发环境
针对瑞萨芯片的开发,瑞萨提供fsp工具包用于芯片的外设配置和驱动代码生成,方便开发者使用在Github上的FSP 发布页面,可以下载到FSP工具的安装包和芯片支持包。

下载上图中的MDK芯片支持包和fsp rasc安装程序,搭建Keil开发板环境。工具的安装很简单,安装选项选择默认即可,安装完成后从开始工具栏打开该工具即可使用。

2、创建开发板工程
启动RASC工具,创建工程,指定工程名和工程目录。

根据开发板的用户手册,可知开发板使用的芯片型号为R7FA4L1BD4CFP。

在芯片选择界面选择相应的芯片型号,生成的工程类型选择Keil

后面的选择选择默认选项即可。




生成的工程配置为不使用TrustZone的无操作系统的Keil工程。在RASC配置界面的BSP选项卡中,设定Heap Size的大小,用于支持使用标准库函数。

开发板使用的外部晶振为8MHz,在Clock选项卡中修改其中的配置参数,使系统的主频工作在80MHz。

同时在引脚设置中指定外部晶振的引脚。

查看原理图可知,芯片的串口9连接到串口转USB芯片CH340,TX为P109,RX为P110。

在Stacks选择项栏中添加串口的驱动。

在引脚配置界面设置串口对应的引脚。

查看原理图可知,LED3连接到P601

根据数据手册中引脚功能,可以使用定时器2的PWM功能驱动。

在Stacks界面中配置PWM外设的参数

在Pin引脚界面设置输出引脚。

配置完成后,生成相应的工程代码。

打开生成的工程。

需要修改工程的几处设置,勾选Mircolib用于使用printf函数。

取消运行工程编译的前处理和后处理指令。

修改编译器的下载设置。

使用FSP配置工具,可以方便地设置外设驱动,操作便捷。
3、移植官方示例程序
瑞萨官方提供很多fsp的示例程序,可以从Github上下载。
https://github.com/renesas/ra-fsp-examples
其中有ek-ra4l1的串口使用示例,其功能为通过串口控制PWM的占空比,控制LED灯的亮度。

复制工程中src文件夹中的代码到工程中。

由于没有添加Segger RTT模块,首先修改common_utils.h的代码。

串口和定时器设定的的变量不同,修改uart_ep.c、uart_ep.h中的控制变量g_uart_xx为g_uart9_xx
timer_pwm.h中输出引脚定义修改如下。

示例工程中不支持printf,在uart_ep.c添加以下代码,实现printf的重定向。
static volatile bool uart_send_complete_flag = false;
void user_uart9_callback(uart_callback_args_t *p_args)
{
....
if(UART_EVENT_TX_COMPLETE == p_args->event )
{
uart_send_complete_flag = true;
}
}
int fputc(int ch, FILE *f)
{
(void)f;
fsp_err_t err = FSP_SUCCESS;
err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);
if(FSP_SUCCESS != err) __BKPT();
while(uart_send_complete_flag == false){}
uart_send_complete_flag = false;
return ch;
}
添加以上代码后,即可在工程中使用printf函数。
在hal_entry.c的中hal_entry函数中添加以下代码
fsp_err_t err = FSP_SUCCESS;
fsp_pack_version_t version = {RESET_VALUE};
err = uart_initialize();
if (FSP_SUCCESS != err)
{
APP_ERR_TRAP(err);
}
R_FSP_VersionGet(&version);
APP_PRINT(BANNER_1);
APP_PRINT(BANNER_2);
APP_PRINT(BANNER_3,EP_VERSION);
APP_PRINT(BANNER_4,version.version_id_b.major, version.version_id_b.minor, version.version_id_b.patch);
APP_PRINT(BANNER_5);
APP_PRINT(BANNER_6);
APP_PRINT("\\r\\n\\r\\nThe project initializes the UART with baud rate of 115200 bps.");
APP_PRINT("\\r\\nOpen Serial Terminal with this baud rate value and");
APP_PRINT("\\r\\nProvide Input ranging from 1 - 100 to set LED Intensity\\r\\n");
err = gpt_initialize();
if (FSP_SUCCESS != err)
{
APP_PRINT ("\\r\\n ** GPT TIMER INIT FAILED ** \\r\\n");
APP_ERR_TRAP(err);
}
err = gpt_start();
if (FSP_SUCCESS != err)
{
APP_PRINT ("\\r\\n ** GPT START FAILED ** \\r\\n");
timer_gpt_deinit();
APP_ERR_TRAP(err);
}
err = uart_ep_demo();
if (FSP_SUCCESS != err)
{
APP_PRINT ("\\r\\n ** UART EP Demo FAILED ** \\r\\n");
timer_gpt_deinit();
deinit_uart();
APP_ERR_TRAP(err);
}
程序编译下载后的效果如下。

总结
如果使用Keil开发RA系列的芯片,RASC生成的Keil代码需要用户手动修改和添加具体的工程参数,需要对Keil的设置有所了解。瑞萨提供的FSP示例很多,移植过程不麻烦,熟悉之后很快就能在不同的开发板上运行例程。
*附件:RAL1_UART_LED.7z