【瑞萨RA4E1评估板】+串口控制LED开关
挺开心也挺意外的。人生第一次参与评测申请,竟然成功了,感谢瑞萨,感谢面包板社区。好了,下面我们步入正题。我评测的是使用UART,通过串口工具控制RA4的LED的开关。延伸出来,我们可以控制其他外设。刚入门,跟着视频和书籍学习。
1、开箱“验货”
首先就是激动的开箱
一块小小的板子集成的所有的外设,开发人员可以拿来直接上手开发,通过几根杜邦线,连接想要的外设。同时这块板子集成了板载 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脚设置输出
2.时钟默认内部高速(板子没有贴外部8M)
2)串口设置
1.串口配置通道9(注意:我使用的是串口烧录,所以把JTAG关了,挪出来UART9)
2.stacks增加r_sci_uart
2.属性设置(可以在 FSP 配置界面中的“BSP”属性栏的“RA Common”中通过修改“Heap size”来设置堆区大小。这里需要设置为 8 的整数倍)
3.点右上角的 “Generate Project Content” 按钮,让软件自动生成配置代码4、设备连接
代码见附件
4.编写代码,烧录程序(我是通过
注意:需要短接J7(MD接地)如报错,按下复位,再次烧录
5、现象测试
如下图介绍串口控制led开关现象
代码
主程序
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