瑞萨单片机论坛
直播中

jf_1137202360

8年用户 1359经验值
擅长:嵌入式技术
私信 关注
[经验]

【RA4M2设计挑战赛】+基于MDK的开发环境搭建

前言
虽然瑞萨提供了RASC,e2开发环境,以及FSP,但是这对于熟悉基于通用MDKIAR平台进行开发的用户,以及新手用户来说,迁移和学习成本过大,过于复杂了。
既然RA4M2系列是Cortex-M33内核的MCU,使用通用的MDKIAR作为开发环境是更多人的首选。没必要再去安装一大堆开发环境,重新熟悉开发环境,代码框架等。对于有统一开发平台的企业用户来说,更是这样,统一的开发环境非常重要。
实际上STM32很大的一个优势就是提供风格统一的标准外设库,集成到MDKIAR等开发工具中,自动添加启动代码,system初始化代码等,用户按需添加外设库即可,其他的都是Cortex-M内核,比如NVIC,Systick等都按照CMSIS标准,都是通用的API,外设库也风格统一,这样迁移学习成本很低。而瑞萨则自己又搞了一套e2开发工具,搞一套rasc代码生成工具,搞一套比较混乱且非常复杂的fsp代码框架,说实话反而搞得复杂了。
所以本文介绍,不依赖上述e2等任何开发环境,就将RA4M2作为一个普通的Cortex-M系列通用MCU对待,基于MDK完全从0开始搭建开发环境。

准备
安装MDK
我这里基于5.38版本,其安装过程不再赘述。
安装MDK支持包
https://www.ramcu.cn/lists/21.html

下载Renesas.RA_DFP.4.2.0.pack

双击Renesas.RA_DFP.4.2.0.pack安装MDK支持包
会自动搜索MDK安装路径


安装后位于C:Keil_v5ARMPACKRenesasRA_DFP4.2.0
确认软件支持包已经安装,没有安装也可以按如下方式安装,其他组件按需安装


获取头文件
https://github.com/renesas/fsp
头文件位于
fsprafspsrcbspcmsisDeviceRENESASInclude
我这里根据型号是R7FA4M2AD.h,下载,后面需要添加到工程。

获取启动代码
fspra\fspsrcbspcmsisDeviceRENESASSource下有
startup.c,system.c是配合RASC自动生成的工程使用的,我们这里不使用。
既然是CORTEX-M33内核我们就使用通用的启动代码。
MDK安装路径下就有,复制C:Keil_v5ARMPACKARMCMSIS5.9.0DeviceARMARMCM33文件夹下所有文件,等下添加到工程目录。
Source目录下就是针对不同编译器的汇编启动代码。

新建工程
Project->New uVision Project...



不使用RTE,不勾选任何选项直接OK


新建文件夹src,添加main.c文件,main.c添加到工程

复制C:Keil_v5ARMPACKARMCMSIS5.9.0CMSISCoreInclude下的
core_cm33.hcmsis_version.hcmsis_compiler.hcmsis_armclang.hmpu_armv8.hsrcARMCM33Include


工程中新建group ARMCM33
ARMCM33Source下的system_ARMCM33.c
ARMCM33SourceARM下的
startup_ARMCM33.S
ARMCM33Include下的所有头文件添加到group  ARMCM33(头文件可以不添加到工程,为了方便查看这里添加进来了)

取消所有文件的只读属性。

srcARMCM33IncludeARMCM33.h
#define __FPU_PRESENT             0U 改为
#define __FPU_PRESENT             1U

#define __DSP_PRESENT             0U
改为
#define __DSP_PRESENT             1U

ARMCM33Include所在目录添加到头文件包含路径。



工程中定义ARMCM33


配置分散加载文件ARMCM33_ac6.sct
其中ARMCM33_ac6_s.sct表示支持secure的配置我们这里不使用。



修改分散加载文件
参考《RA4M2 Group User’s Manual: Hardware
我们这里的MCUFLASHRAM分别是512KB128KB



Main中先实现main函数
int main(void)
{
        while(1);
}

R7FA4M2AD.h
中注释掉
//#include "system.h"

//#define __CM33_REV                0x0004U /*!< CM33 Core Revision                                                        */
//#define __NVIC_PRIO_BITS          4       /*!< Number of Bits used for Priority Levels                                   */
//#define __Vendor_SysTickConfig    0       /*!< Set to 1 if different SysTick Config is used                              */
//#define __VTOR_PRESENT            1       /*!< Set to 1 if CPU supports Vector Table Offset Register                     */
//#define __MPU_PRESENT             1       /*!< MPU present                                                               */
//#define __FPU_PRESENT             1       /*!< FPU present                                                               */
//#define __FPU_DP                  0       /*!< Double Precision FPU                                                      */
//#define __DSP_PRESENT             1       /*!< DSP extension present                                                     */
//#define __SAUREGION_PRESENT       0       /*!< SAU region present                                                        */

ARMCM33.h 使用上述注释掉的宏值替换
注释掉
//#define __CM33_REV                0x0000U   /* Core revision r0p1 */
//#define __SAUREGION_PRESENT       0U        /* SAU regions present */
//#define __MPU_PRESENT             1U        /* MPU present */
//#define __VTOR_PRESENT            1U        /* VTOR present */
//#define __NVIC_PRIO_BITS          3U        /* Number of Bits used for Priority Levels */
//#define __Vendor_SysTickConfig    0U        /* Set to 1 if different SysTick Config is used */
//#define __FPU_PRESENT             1U        /* no FPU present */
//#define __DSP_PRESENT             1U        /* no DSP extension present */

改为
#define __CM33_REV                0x0004U /*!< CM33 Core Revision                                                        */
#define __NVIC_PRIO_BITS          4       /*!< Number of Bits used for Priority Levels                                   */
#define __Vendor_SysTickConfig    0       /*!< Set to 1 if different SysTick Config is used                              */
#define __VTOR_PRESENT            1       /*!< Set to 1 if CPU supports Vector Table Offset Register                     */
#define __MPU_PRESENT             1       /*!< MPU present                                                               */
#define __FPU_PRESENT             1       /*!< FPU present                                                               */
#define __FPU_DP                  0       /*!< Double Precision FPU                                                      */
#define __DSP_PRESENT             1       /*!< DSP extension present                                                     */
#define __SAUREGION_PRESENT       0       /*!< SAU region present                                                        */

此时即可编译通过,工程搭建完成。

仿真




进入仿真环境
自动停在了main函数入口

至此完成了开发环境的搭建。


总结
以上完全从0开始,不依赖e2RASC等工具生成工程,完全手动创建工程,简洁明了,有助于理解工程的结构以及依赖关系。避免了虽然使用复杂的e2RASC开发环境,生成了模板工程但是知其然不知其所以然。

参考
开发板相关资料
https://bbs.elecfans.com/jishu_2329264_1_1.html
https://www.ramcu.cn/lists/21.html



附件: 您需要登录才可以下载或查看附件。没有帐号?注册

更多回帖

发帖
×
20
完善资料,
赚取积分