前言 虽然瑞萨提供了RASC,e2开发环境,以及FSP等,但是这对于熟悉基于通用MDK和IAR平台进行开发的用户,以及新手用户来说,迁移和学习成本过大,过于复杂了。 既然RA4M2系列是Cortex-M33内核的MCU,使用通用的MDK和IAR作为开发环境是更多人的首选。没必要再去安装一大堆开发环境,重新熟悉开发环境,代码框架等。对于有统一开发平台的企业用户来说,更是这样,统一的开发环境非常重要。 实际上STM32很大的一个优势就是提供风格统一的标准外设库,集成到MDK和IAR等开发工具中,自动添加启动代码,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.h,cmsis_version.h,cmsis_compiler.h,cmsis_armclang.h,mpu_armv8.h到srcARMCM33Include下 工程中新建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》 我们这里的MCU的FLASH和RAM分别是512KB和128KB。 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开始,不依赖e2,RASC等工具生成工程,完全手动创建工程,简洁明了,有助于理解工程的结构以及依赖关系。避免了虽然使用复杂的e2,RASC开发环境,生成了模板工程但是知其然不知其所以然。 参考 开发板相关资料 /jishu_2329264_1_1.html https://www.ramcu.cn/lists/21.html |
只有小组成员才能发言,加入小组>>
1405个成员聚集在这个小组
加入小组【瑞萨RA2L1入门学习】+ MacOS安装e2studio
865 浏览 0 评论
715 浏览 0 评论
1436 浏览 0 评论
1133 浏览 0 评论
1599 浏览 0 评论
2047浏览 4评论
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】RA0E1-32PIN-V1.0开发板测试一下点灯
2737浏览 3评论
使用Renesas Flash Programmer无法通过串口连接RL78/G22板子
2036浏览 2评论
3288浏览 2评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】使用Jlink RTT完成printf打印功能
902浏览 2评论