一、背景
最近为了学点其他单片机,刚好看到瑞萨在举办比赛,比赛免费提供开发板及相关的模块,于是报了个名。瑞萨的芯片之前是听说过的,但大部分都是在广告里听到的,这次也算是正式的使用一次。
二、概述
这次比赛用的RA4M2开发板是ARM-M33的内核(M33其实就是M3的升级版,有点像M0和M0+的关系,具体区别就得去看内核资料了,这里不赘述),芯片型号R7F4M2AD3CFP,可以使用Keil工具进行开发,需要安装瑞萨的芯片包。烧录工具可以使用ST-Link和JLink(v9以上)。瑞萨官方提供有Renesas RA Smart Configurator(后面简称为RASC)的工具,类似于ST官方提供的STM32CubeMX工具,有用过的同学应该很熟悉,就是一种通过界面化的形式去配置外设初始化并自动生成代码的工具,用起来很方便。
本文是基于RASC工具配置,生成Keil工程,在RA4M2开发板上做点灯实验。
三、开发环境搭建
有了前面的一些了解,现在就知道搭个开发环境大概需要哪些东西了。首先需要安装Keil(Keil的安装及基础使用这里就不多讲了),这里用的是5.38a的版本,原本试过5.24a的版本,通过RASC工具生成的工程直接编译会有问题。
然后下载瑞萨的芯片包和RASC工具,这个在瑞萨的官网可以找得到,这里下了当前最新的4.2.0的版本。
官网链接:https://www.ramcu.cn/lists/21.html
硬件方面准备好STLink或Jlink-V9。这里我用的是Nucleo开发板上带的STLink。
双击瑞萨的芯片包进行安装。
安装并打开RASC工具,选择工程路径,新建一个工程。
下面是选择操作系统,这里有三个可以选,一是裸机,二是RTT操作系统(RT-Thread),三是FreeRTOS,这里我们选个FreeRTOS。
选择了FreeRTOS操作系统后会有下面的选择框,直接结束即可。
新建完工程后,不管三七二十一,先生成个Keil工程看下。
找到刚才新建工程的路径下,打开Keil工程,直接编译。
报了两个错。追溯一下,是因为使能了静态创建任务但又没创建线程导致的。
所以这里先新建一个空的线程。
再次生成工程,编译没有错误。
硬件接好线,选STLink Debugger的选项。
烧录算法这里要选RA4M2的这几个,三个都选上,然后算法的运行位置填0x20000000,size可以填大点,这里用0x2000,再点烧录,正常烧录。
四、点灯
前面环境搭好了,后面的工作就简单多了。查看原理图,开发板上有三个LED灯,LED1对应P405,LED2对应P404,LED3对应P002,先在RASC上配置这三个IO口的功能为输出。
再检查一下时钟,这个开发板上的外部晶振是12M的,所以我们把工程里的时钟源频率也改一下。
生成工程,老习惯,先编译一下,看自动生成的代码有没有什么问题。一次通过。
在LED_Task_entry.c中添加闪灯的程序,这里用的是瑞萨提供的FSP库,官网有库的说明资料,代码如下。
#include "LED_Task.h"
#define led1_off() R_BSP_PinWrite (BSP_IO_PORT_04_PIN_05, BSP_IO_LEVEL_LOW)
#define led1_on() R_BSP_PinWrite (BSP_IO_PORT_04_PIN_05, BSP_IO_LEVEL_HIGH)
#define led2_off() R_BSP_PinWrite (BSP_IO_PORT_04_PIN_04, BSP_IO_LEVEL_LOW)
#define led2_on() R_BSP_PinWrite (BSP_IO_PORT_04_PIN_04, BSP_IO_LEVEL_HIGH)
#define led3_off() R_BSP_PinWrite (BSP_IO_PORT_00_PIN_02, BSP_IO_LEVEL_LOW)
#define led3_on() R_BSP_PinWrite (BSP_IO_PORT_00_PIN_02, BSP_IO_LEVEL_HIGH)
void LED_Task_entry(void * pvParameters)
{
FSP_PARAMETER_NOT_USED(pvParameters);
while(1)
{
R_BSP_PinAccessEnable();
led1_on();
led2_off();
led3_off();
R_BSP_PinAccessDisable();
vTaskDelay(200);
R_BSP_PinAccessEnable();
led1_off();
led2_on();
led3_off();
R_BSP_PinAccessDisable();
vTaskDelay(200);
R_BSP_PinAccessEnable();
led1_off();
led2_off();
led3_on();
R_BSP_PinAccessDisable();
vTaskDelay(200);
}
}
添加完代码后,编译,烧录,灯正常跑起来。
总结
对于这次初体验,感觉这芯片对于习惯使用ST和Keil开发的还是挺友好的。FSP库封装后的接口使用起来也比较方便,不需要去过多的了解底层寄存器,对新人上手比较友好,但这对于用习惯LL库的人来讲就不是很方便了,对于芯片的深化理解不是很友好。
另外RASC这个工具有几个点需要留意一下:
1、生成Keil工程来编译,Keil版本建议更新到最新,文章中用的是5.38a的版本。
2、目前只发现一种可以打开RASC的工程,就是在Keil里打开,貌似没有像Keil或STM32CubeMX一样有个可以直接打开的快捷方式。