【瑞萨RA4E1评估板】+串口控制LED开关

挺开心也挺意外的。人生第一次参与评测申请,竟然成功了,感谢瑞萨,感谢面包板社区。好了,下面我们步入正题。我评测的是使用UART,通过串口工具控制RA4的LED的开关。延伸出来,我们可以控制其他外设。刚入门,跟着视频和书籍学习。

1、开箱“验货”

首先就是激动的开箱

forum.jpg

一块小小的板子集成的所有的外设,开发人员可以拿来直接上手开发,通过几根杜邦线,连接想要的外设。同时这块板子集成了板载 SEGGER J-Link™ 仿真器电路,无需JLINK就可对自己的程序进行调试。省去了很多麻烦的工作。真是麻雀虽小,五脏俱全。

简单上个电看下效果:led1,led2交替闪烁。

2、软件安装

这一块就不过多介绍了,需要下载Renesas Flash软件,所以可以进入瑞萨官网进行下载。下载地址:

https://www.renesas.cn/cn/zh/software-tool/renesas-flash-programmer-programming-gui 照着百度一步步下去就行了

我安装了RA, RESC,KEIL。Jlink本着入门玩玩的心搞点小玩具。

3、RA软件设置

   1)LED设置

     1.PIN脚设置输出 forum.jpg

2.时钟默认内部高速(板子没有贴外部8M)

forum.jpg

   2)串口设置

1.串口配置通道9(注意:我使用的是串口烧录,所以把JTAG关了,挪出来UART9)

forum.jpg

2.stacks增加r_sci_uart

forum.jpg

2.属性设置(可以在 FSP 配置界面中的“BSP”属性栏的“RA Common”中通过修改“Heap size”来设置堆区大小。这里需要设置为 8 的整数倍)

forum.jpg forum.jpg

forum.jpg

3.点右上角的 “Generate Project Content” 按钮,让软件自动生成配置代码4、设备连接

forum.jpg

代码见附件

4.编写代码,烧录程序(我是通过 forum.jpg 烧录) forum.jpg

注意:需要短接J7(MD接地)如报错,按下复位,再次烧录


5、现象测试

如下图介绍串口控制led开关现象

forum.jpg forum.jpg

forum.jpg forum.jpg



代码

主程序

LED_Init(); // LED 初始化

    UART9_Init(); // SCI9 UART 调试串口初始化

    printf("这是一个简单的串口控制 LED 程序例程\r\n");

    printf("我们使用RA4单片机打开串口助手发送以下指令,控制 LED 的状态\r\n");

    printf ("\t指令 ------ 状态\r\n ");

    printf ("\t 1 ------ LED1_ON\r\n ");

    printf ("\t 2 ------ LED2_ON\r\n ");

    printf ("\t 3 ------ LED2_OFF\r\n ");

    printf ("\t 4 ------ LED1_OFF\r\n ");

    LED1_OFF;

    LED2_OFF;

    while(1)

    {


}


LED.C

#include "bsp_led.h"

/* LED 初始化函数 */

void LED_Init(void)

{

/* 初始化配置引脚(这里重复初始化了,可以注释掉) */

R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);

}

LED.H

#ifndef __BSP_LED_H

#define __BSP_LED_H

#include "hal_data.h"


#define LED1_ON R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_07,BSP_IO_LEVEL_HIGH)

#define LED2_ON R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_08,BSP_IO_LEVEL_HIGH)



#define LED1_OFF R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_07,BSP_IO_LEVEL_LOW)

#define LED2_OFF R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_08,BSP_IO_LEVEL_LOW)

void LED_Init(void);

#endif

UART.C

#include "bsp_uart.h"

void UART9_Init(void)

{

fsp_err_t err = FSP_SUCCESS;

err = R_SCI_UART_Open (&g_uart9_ctrl, &g_uart9_cfg);

assert(FSP_SUCCESS == err);

}


volatile bool uart_send_complete_flag = false;

void uart9_callback (uart_callback_args_t * p_args)

{

switch (p_args->event)

{

    case UART_EVENT_RX_CHAR:

    {

/* 把串口接收到的数据发送回去 */

       // R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&(p_args->data), 1);


        switch (p_args->data)

        {

        case '1':

        LED1_ON;

        break;

        case '2':

        LED2_ON;

        break;

        case '3':

        LED2_OFF;

        break;

        case '4':

        LED1_OFF;

        break;

        default:

        break;

        }

        break;

}

case UART_EVENT_TX_COMPLETE:

    {

        uart_send_complete_flag = true;

        break;

    }

    default:

         break;

}

}


/* 重定向 printf 输出 */

#if defined __GNUC__ && !defined __clang__

int _write(int fd, char *pBuffer, int size); //防止编译警告

int _write(int fd, char *pBuffer, int size)

{

    (void)fd;

R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)pBuffer, (uint32_t)size);

while(uart_send_complete_flag == false);

uart_send_complete_flag = false;

return size;

}

#else

int fputc(int ch, FILE *f)

{

    (void)f;

R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);

    while(uart_send_complete_flag == false);

    uart_send_complete_flag = false;

    return ch;

}

#endif

UART.H

#ifndef __BSP_UART_H

#define __BSP_UART_H

#include "hal_data.h"

void UART9_Init(void);

void uart9_callback (uart_callback_args_t * p_args);

#define LED1_ON R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_07,BSP_IO_LEVEL_HIGH)

#define LED2_ON R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_08,BSP_IO_LEVEL_HIGH)



#define LED1_OFF R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_07,BSP_IO_LEVEL_LOW)

#define LED2_OFF R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_08,BSP_IO_LEVEL_LOW)

#endif