【学习笔记】RA4M2-开发环境搭建+点灯

一、背景

    最近为了学点其他单片机,刚好看到瑞萨在举办比赛,比赛免费提供开发板及相关的模块,于是报了个名。瑞萨的芯片之前是听说过的,但大部分都是在广告里听到的,这次也算是正式的使用一次。
    既然报名参加了比赛,那就不能这么混过去,先了解下这个瑞萨芯片的特点。首先在同事那了解到,瑞萨原本的芯片都是RISC-V内核的,跟平时玩的ARM内核不大一样,可能是为了抢占ARM内核的市场吧,最近也出了一些ARM内核的芯片。

二、概述

    这次比赛用的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的安装及基础使用这里就不多讲了,刚入门的小伙伴可以去看我Keil系列的文章),这里用的是5.38a的版本,原本试过5.24a的版本,通过RASC工具生成的工程直接编译会有问题。
    然后下载瑞萨的芯片包和RASC工具,这个在瑞萨的官网可以找得到,这里下了当前最新的4.2.0的版本。
官网链接:https://www.ramcu.cn/lists/21.html
【学习笔记】RA4M2-开发环境搭建+点灯_第1张图片

    硬件方面准备好STLink或Jlink-V9。这里我用的是Nucleo开发板上带的STLink。
    双击瑞萨的芯片包进行安装。
【学习笔记】RA4M2-开发环境搭建+点灯_第2张图片
    安装并打开RASC工具,选择工程路径,新建一个工程。
【学习笔记】RA4M2-开发环境搭建+点灯_第3张图片
【学习笔记】RA4M2-开发环境搭建+点灯_第4张图片
【学习笔记】RA4M2-开发环境搭建+点灯_第5张图片
    下面是选择操作系统,这里有三个可以选,一是裸机,二是RTT操作系统(RT-Thread),三是FreeRTOS,这里我们选个FreeRTOS。
【学习笔记】RA4M2-开发环境搭建+点灯_第6张图片
    选择了FreeRTOS操作系统后会有下面的选择框,直接结束即可。
【学习笔记】RA4M2-开发环境搭建+点灯_第7张图片
    新建完工程后,不管三七二十一,先生成个Keil工程看下。
【学习笔记】RA4M2-开发环境搭建+点灯_第8张图片
    找到刚才新建工程的路径下,打开Keil工程,直接编译。
【学习笔记】RA4M2-开发环境搭建+点灯_第9张图片
    报了两个错。追溯一下,是因为使能了静态创建任务但又没创建线程导致的。
在这里插入图片描述
    所以这里先新建一个空的线程。
【学习笔记】RA4M2-开发环境搭建+点灯_第10张图片

    再次生成工程,编译没有错误。
【学习笔记】RA4M2-开发环境搭建+点灯_第11张图片

    硬件接好线,选STLink Debugger的选项。

    烧录算法这里要选RA4M2的这几个,三个都选上,然后算法的运行位置填0x20000000,size可以填大点,这里用0x2000,再点烧录,正常烧录。
【学习笔记】RA4M2-开发环境搭建+点灯_第12张图片

四、点灯

    前面环境搭好了,后面的工作就简单多了。查看原理图,开发板上有三个LED灯,LED1对应P405,LED2对应P404,LED3对应P002,先在RASC上配置这三个IO口的功能为输出。
【学习笔记】RA4M2-开发环境搭建+点灯_第13张图片
【学习笔记】RA4M2-开发环境搭建+点灯_第14张图片
    再检查一下时钟,这个开发板上的外部晶振是12M的,所以我们把工程里的时钟源频率也改一下。
【学习笔记】RA4M2-开发环境搭建+点灯_第15张图片
【学习笔记】RA4M2-开发环境搭建+点灯_第16张图片

    生成工程,老习惯,先编译一下,看自动生成的代码有没有什么问题。一次通过。
【学习笔记】RA4M2-开发环境搭建+点灯_第17张图片
    在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)
/********************************************************/

                /* LED_Task entry function */
                /* pvParameters contains TaskHandle_t */
                void LED_Task_entry(void * pvParameters)
                {
                    FSP_PARAMETER_NOT_USED(pvParameters);

                    /* TODO: add your own code here */
                    while(1)
                    {
                    	/***********************添加的代码*************************/
                    	/* 操作寄存器前需要先使能 */
                        R_BSP_PinAccessEnable();
                        led1_on();
                        led2_off();
                        led3_off();
                        /* 操作完寄存器后禁止 */
                        R_BSP_PinAccessDisable();
                        //R_BSP_SoftwareDelay (200, BSP_DELAY_UNITS_MILLISECONDS);
                        vTaskDelay(200);
                        
                        /* 操作寄存器前需要先使能 */
                        R_BSP_PinAccessEnable();
                        led1_off();
                        led2_on();
                        led3_off();
                        /* 操作完寄存器后禁止 */
                        R_BSP_PinAccessDisable();
                        //R_BSP_SoftwareDelay (200, BSP_DELAY_UNITS_MILLISECONDS);
                        vTaskDelay(200);
                        
                        /* 操作寄存器前需要先使能 */
                        R_BSP_PinAccessEnable();
                        led1_off();
                        led2_off();
                        led3_on();
                        /* 操作完寄存器后禁止 */
                        R_BSP_PinAccessDisable();
                        //R_BSP_SoftwareDelay (200, BSP_DELAY_UNITS_MILLISECONDS);
                        vTaskDelay(200);
                        /********************************************************/
                    }
                }

    添加完代码后,编译,烧录,灯正常跑起来。

总结

    对于这次初体验,感觉这芯片对于习惯使用ST和Keil开发的还是挺友好的。FSP库封装后的接口使用起来也比较方便,不需要去过多的了解底层寄存器,对新人上手比较友好,但这对于用习惯LL库的人来讲就不是很方便了,对于芯片的深化理解不是很友好。
    另外RASC这个工具有几个点需要留意一下:
1、生成Keil工程来编译,Keil版本建议更新到最新,文章中用的是5.38a的版本。
2、目前只发现一种可以打开RASC的工程,就是在Keil里打开,貌似没有像Keil或STM32CubeMX一样有个可以直接打开的快捷方式。

你可能感兴趣的:(学习笔记,学习,单片机,stm32)