当前位置: 首页 > article >正文

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
}

http://www.kler.cn/a/584282.html

相关文章:

  • 【Linux】动/静态库
  • 重生之我在学Vue--第10天 Vue 3 项目收尾与部署
  • Unity Lerp和InverseLerp函数用处
  • 【C++】每日一练(用队列实现栈)
  • 【fnOS飞牛云NAS本地部署跨平台视频下载工具MediaGo与远程访问下载视频流程】
  • VS Code 配置优化指南
  • 【TES817】基于XCZU19EG FPGA的高性能实时信号处理平台
  • 【从零开始学习计算机科学】数据库系统(七)并发控制技术
  • 元宇宙与数字孪生
  • 如何查看mysql某个表占用的空间大小
  • 深度学习 bert流程
  • ClickHouse的数据引擎:解锁大数据分析的奥秘
  • Netty基础—4.NIO的使用简介二
  • 工控hmi医疗终端机的界面如何来设计?本文为你解答
  • GolangTCP通信解决粘包问题
  • JAVA中的多线程安全问题及解决方案
  • 计算机网络-网络存储技术
  • MySql数据库等级考试学习分享2(Day5)
  • 深度学习----激活函数
  • 什么是SWAP虚拟内存?使用服务器如何开启SWAP虚拟内存