e2studio开发RA4L1(1)---开发板测试
e2studio开发RA4L1.1-- 开发板测试
- 概述
- 视频教学
- 样品申请
- 产品特性
- 参考程序
- 源码下载
- 硬件准备
- 新建工程
- 工程模板
- 保存工程路径
- 芯片配置
- 工程模板选择
- 时钟设置
- GPIO口配置
- UART配置
- UART属性配置
- 设置e2studio堆栈
- e2studio的重定向printf设置
- 主程序
概述
RA4L1 评估套件可以使用户能够无缝评估 RA4L1 系列LQFP100 封装的微控制器功能,RA4L1 MCU 具有低功耗功能,例如段码 LCD 显示驱动器和高级安全引擎,以及 RTC、ADC 和定时器。 这些 MCU 集成了 CAN FD、USB 2.0 FS、I2C/I3C 和低功耗 UART 等通信接口,因此非常适合用于工业自动化、家电、智能家居、消费品、楼宇/家居自动化和医疗/保健应用。
这里通过配置LED和UART输出进行简单测试。
最近在瑞萨RA的课程,需要样片的可以加qun申请:925643491。
视频教学
https://www.bilibili.com/video/BV1iGRpYvEfJ/
e2studio开发RA4L1(1)----开发板测试
样品申请
https://www.wjx.top/vm/rCrkUrz.aspx
产品特性
瑞萨电子 RA4L1 MCU 产品组,低功耗 32 位微控制器 (MCU),基于支持 TrustZone® 的 Arm® Cortex®-M33 (CM33) 内核,实现了低工作电压、低功耗与高性能的理想平衡。 RA4L1 的工作电压低至 1.6V,待机电流低至 1.65µA,并具有多种低功耗功能,用户能够根据应用要求来动态优化功耗/性能。
参考程序
https://github.com/CoreMaker-lab/RA4L1
https://gitee.com/CoreMaker/RA4L1
源码下载
硬件准备
首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为R7FA4L1BD4CFP
新建工程
工程模板
保存工程路径
芯片配置
本文中使用R7FA4L1BD4CFP来进行演示。
工程模板选择
时钟设置
开发板上的外部高速晶振为8M.
需要修改XTAL为8M。
GPIO口配置
由下图我们可以得知,板子上有3个LED灯,同时需要给高电平才可以点亮,故以P601、P610、P609管脚为例,配置方式如下所示。
在e2studio中可以直接设置P601、P610、P609为输出口。
UART配置
点击Stacks->New Stack->Connectivity -> UART(r_sci_uart)。
UART属性配置
设置e2studio堆栈
printf函数通常需要设置堆栈大小。这是因为printf函数在运行时需要使用栈空间来存储临时变量和函数调用信息。如果堆栈大小不足,可能会导致程序崩溃或不可预期的行为。
printf函数使用了可变参数列表,它会在调用时使用栈来存储参数,在函数调用结束时再清除参数,这需要足够的栈空间。另外printf也会使用一些临时变量,如果栈空间不足,会导致程序崩溃。
因此,为了避免这类问题,应该根据程序的需求来合理设置堆栈大小。
e2studio的重定向printf设置
主程序
#include "hal_data.h"
#include <stdio.h>
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER
fsp_err_t err = FSP_SUCCESS;
volatile bool uart_send_complete_flag = false;
void user_uart_callback (uart_callback_args_t * p_args)
{
if(p_args->event == UART_EVENT_TX_COMPLETE)
{
uart_send_complete_flag = true;
}
}
#ifdef __GNUC__ //串口重定向
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);
if(FSP_SUCCESS != err) __BKPT();
while(uart_send_complete_flag == false){}
uart_send_complete_flag = false;
return ch;
}
int _write(int fd,char *pBuffer,int size)
{
for(int i=0;i<size;i++)
{
__io_putchar(*pBuffer++);
}
return size;
}
/*******************************************************************************************************************//**
* main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function
* is called by main() when no RTOS is used.
**********************************************************************************************************************/
void hal_entry(void)
{
/* TODO: add your own code here */
/* Open the transfer instance with initial configuration. */
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
assert(FSP_SUCCESS == err);
printf("hello world!\n");
while(1)
{
printf("Hello e2studio!\n");
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_01, BSP_IO_LEVEL_HIGH);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_10, BSP_IO_LEVEL_HIGH);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_09, BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_01, BSP_IO_LEVEL_LOW);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_10, BSP_IO_LEVEL_LOW);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_06_PIN_09, BSP_IO_LEVEL_LOW);
R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}