Renesas HMI Board挑战赛—FSP工具使用

电子说

1.2w人已加入

描述

1.1硬件平台介绍

RT-Thread和瑞萨推出的HMI-Board上的主控芯片型号为R7FA6M3AH3CFB。

瑞萨电子 RA6M3 微控制器 (MCU) 群组使用高性能 Arm® Cortex®-M4 内核,提供具备 2D 加速器和 JPEG 解码器的 TFT 控制器。此外,RA6M3 MCU 提供具有单独 DMA 和 USB 高速接口的以太网 MAC,可确保大的数据吞吐量。RA6M3 MCU 采用高效的 40nm 工艺,由开放且灵活的生态系统概念提供支持,即基于 FreeRTOS 的灵活配置软件包 (FSP),能够扩展以使用其他 RTOSes 和中间件。RA6M3 适用于需要 TFT、以太网、安全性、大型嵌入式 RAM 和 USB 高速 (HS) 的物联网应用。芯片的特性如下:

20MHz Arm® Cortex®-M4
1MB - 2MB 闪存以及 640kB SRAM
与 EEPROM 存储数据功能类似的 64kB 数据闪存
可从 100 引脚封装扩展至 176 引脚封装
具备 DMA 的以太网控制器
TFT 控制器/2D 加速器/JPEG 解码器
电容式触摸传感单元
USB 2.0 全速/USB 高速
CAN 2.0B
SCI(UART、简单 SPI、简单 I2C)
SPI/ I2C 多主机接口/SDHI

在RT-Stuido的工程创建界面可以看到板卡的芯片数据手册、使用手册,以及开发板的原理图。

EEPROM

1.2 瑞萨FSP配置安装和代码生成

RT-Thread框架如下所示。

EEPROM

其中针对开发板的BSP驱动部分,使用瑞萨推出的FSP配置工具RASC来生成板卡的硬件驱动程序。在Github上的可以下载到不同版本的FSP。HMI-Board使用的RASC的版本为v3.5.0。下载完成后,采用默认安装即可。

1.3 尝试生成Keil工程

使用RASC生成的工程是面向Keil或者IAR等第三方工具,本文选择使用Keil开发环境。
在之前安装好的的FSP目录下打开rasc.exe。

EEPROM

在弹出的工程创建界面中,输入要创建的工程名称以及路径。

EEPROM

由于HMI-Board不是Renesas官方推出的开发板,在Board栏中选则“Cunstom User Board(Any Device)”,芯片选择R7FA6M3AH3CFB,IDE Project Type 选择Keil MDK Version5。

EEPROM

在RTOS选择页选择”No RTOS”,不需要操作系统支持。

EEPROM

在工程模板选择中选择“Bare Metal - Minimal”,创建出的工程不会进行任何操作,在此基础上,可以根据Renesas定义的函数接口来实现用户自定义的功能。

EEPROM

工程创建完成后在FSP Configuration的配置页中,对芯片的外设、模块、协议栈等进行添加和配置。

EEPROM

查看开发手册可以看到P209和P210上外接了两个LED灯,P205(TX)和P206(RX)为串口4的引脚。在FSP->Configuration的Stack中添加相应的IO模块和串口模块。添加完成后的模块组成如图所示。

EEPROM

模块添加完成后,需要根据硬件的参数对其进行相应的配置,主要是引脚和使用到的串口号。LED控制属于通用GPIO输出。IO模块的参数采用默认参数即可。

EEPROM

串口模块需要指定使用的串口号、波特率、数据位、校验位、停止位以及引脚等信息,模块的配置如下:

EEPROM

其他外设的配置方式与此类似,这里就不在进行介绍了。点击Generate Project Content生成相应的工程,就可以在工程使用上述模块的接口函数,不再需要自己编写底层的代码。

生成的Keil工程的目录如下图所示。

EEPROM

EEPROM

RASC会自动生成的代码都在Flex Software标签下,而工程相关的代码则存在其它的文件目录中。

注:目前使用过程中,在RASC中添加新的模块并重新生成Keil工程后,会把Keil中的配置选项重置,这对开发是一个不友好的功能,不知道该如何解决。

1.4 串口通讯和IO控制

在RASC中配置的IO和串口模块在hal_data.c中定义了xx_data.c中定义了相关模块的配置、接口和实例变量。

EEPROM

EEPROM

在瑞萨的提供的HAL库中,函数的接口定义格式为:

R__();
比如

err = R_SCI_UART_Open (&g_uart4_ctrl, &g_uart4_cfg);
err = R_SCI_UART_Write (&g_uart4_ctrl, p_msg, msg_len);
R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_02_PIN_09,pin_level);
串口的中断函数在RASC声明为user_uart4_callback,定义如下:

void user_uart4_callback(uart_callback_args_t *p_args)
{
g_data_received_flag=true;
}

定义功能函数

fsp_err_t uart_ep_demo(void)
{
/* Holds level to set for pins /
bsp_io_level_t pin_level = BSP_IO_LEVEL_LOW;
while (true)
{
if(g_data_received_flag)
{
g_data_received_flag = false;
R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_02_PIN_09,pin_level);
R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_02_PIN_10,pin_level);
/
Toggle level for next write */
if (BSP_IO_LEVEL_LOW == pin_level)
{
pin_level = BSP_IO_LEVEL_HIGH;
}
else
{
pin_level = BSP_IO_LEVEL_LOW;
}
}
}
}

在入口函数hal_entry中调用上述的函数

void hal_entry(void)
{
/* TODO: add your own code here /
......
/
Initializing IOPORT /
err=R_IOPORT_Open(&g_ioport_ctrl,&g_bsp_pin_cfg);
if(err!=FSP_SUCCESS)
{
APP_PRINT ("rn ** IO PORT INIT FAILED ** rn");
APP_ERR_TRAP(err);
}
/
Initializing UART /
err = uart_initialize();
if (FSP_SUCCESS != err)
{
APP_PRINT ("rn ** UART INIT FAILED ** rn");
APP_ERR_TRAP(err);
}
/
User defined function to demonstrate UART functionality /
err = uart_ep_demo();
if (FSP_SUCCESS != err)
{
APP_PRINT ("rn ** UART EP Demo FAILED ** rn");
deinit_uart();
APP_ERR_TRAP(err);
}
#if BSP_TZ_SECURE_BUILD
/
Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}

编译前勾选使用“Use MicroLIB”

EEPROM

编译完成后,在下载时需要在调试器的配置界面设定以下参数,这些参数中的RAM项和指定MCU的SRAM空间分布相关,需要查看使用手册来确定。

EEPROM

下载后运行,通过串口发送任意字符,可以观察到板卡上的LED灯在闪烁。

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分