0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RA MCU CANFD在FSP中的配置详解

瑞萨MCU小百科 来源:瑞萨MCU小百科 2023-10-20 14:46 次阅读

瑞萨RA系列MCU产品中,目前RA4E2、RA4T1、RA6E2、RA6T2和RA6T3搭载了CANFD Lite(硬件手册中成为CANFD_B)模块,相关的详细IP介绍,请参见之前的文章

本篇将为您介绍如何使用FSP配置CANFD Lite模块,请注意与RA6M5搭载的CANFD模块的配置略有区别,这里不详细讲述。

首先,简单介绍一下FSP。瑞萨的Flexibility Software Package(FSP)是一种嵌入式软件和开发工具包,提供了集成的软件平台,帮助开发者快速设计、开发和部署嵌入式系统。FSP提供了一系列软件组件、设备驱动程序、操作系统抽象层和中间件,以及与瑞萨微控制器相配套的开发工具。通过使用FSP,开发者可以减少开发时间和成本,快速构建高度可靠、高性能的嵌入式系统。

FSP具有以下特点和优势:

灵活性和可扩展性:FSP支持瑞萨广泛的微控制器产品系列,使开发者能够选择适合其需求的合适解决方案。

高度集成的软件平台:FSP提供了一整套软件组件,包括设备驱动程序、操作系统抽象层和中间件,简化了系统开发流程。

快速上手和开发:FSP提供了丰富的示例代码、开发工具和文档,使开发者能够快速开始开发工作,并加速产品上市时间。

兼容性和维护性:FSP基于开放标准,并与瑞萨的先进开发工具集成,可以轻松集成第三方软件和工具,同时享受瑞萨长期的技术支持和维护。

通过FSP的图形化界面可以设置RA CANFD Lite模块的引脚和功能,使用FSP生成的函数可以执行CANFD Lite模块的初始化,发送&接收数据,这样可以加快项目完成,缩短用户开发时间。

而使用FSP如何设置RA CANFD Lite功能,将从以下几个方面进行说明:

1添加CANFD Lite模块

在e2 studio双击工程中的configuraion.xml文件,在Stacks选项卡中,点击New Stack,选择CANFD Lite (r_canfdlite)

78c94dee-6f13-11ee-939d-92fbcf53809c.png

2设置时钟

CANFD时钟默认为禁用状态。选择Clocks选项卡,将CANFDCLK设置为40MHz:

将PLL(锁相环)分频器改为Div / 2

将PLL乘法器改为Mul x16.0

将CANFDCLK改为Src: PLL

将CANFDCLK分频器改为Div /4

78d8096a-6f13-11ee-939d-92fbcf53809c.png

3设置引脚

选择Pins Tab,点击CANFD0,Pin Group Selection选择Mixed的情况下,Operation Mode选择Enabled,CRX0自动选择P102、CTX0自动选择P103,也可以通过右侧的下拉箭头根据用户需要选择其他可用引脚。

78ef9526-6f13-11ee-939d-92fbcf53809c.png

4设置CANFD Lite模块属性

切回Stacks选项卡,选择CANFD lite,转至Properties窗口(确保当前为FSP配置透视图的情况下,点击右上方:

7911e9dc-6f13-11ee-939d-92fbcf53809c.png

打开Properties窗口。

或者通过Window→Show View→Other

791ebfea-6f13-11ee-939d-92fbcf53809c.png

搜索找到Properties窗口

793082fc-6f13-11ee-939d-92fbcf53809c.png

4.1 设置标称比特率(Nominal Rate)和FD数据比特率(FD Data Rate)

可以选择自动生成比特率或者手动设置比特率

请注意,如果选择自动生成比特率,“Use manual settings”一项需要设置为No

793f195c-6f13-11ee-939d-92fbcf53809c.png

4.2 修改AFL数量

由于RA6E2只有Channel 0,所以需要将“Channel 1 Rule Count”一项改为0

另外,RA6E2的CANFD Lite模块最多允许32个AFL条目。

795834fa-6f13-11ee-939d-92fbcf53809c.png

4.3 设置使用的TX Mailbox 0(TX MB0)

例如通过TX Mailbox 0(TX MB0)发送数据,则勾选“TX MB0”一项。

796bd9f6-6f13-11ee-939d-92fbcf53809c.png

4.4 设置发送优先级

发送优先级有可以选择CAN ID优先(Message ID)或者消息缓冲区编号优先(Buffer Number)。

797a5ba2-6f13-11ee-939d-92fbcf53809c.png

4.5 设置接收MB的数量和大小

798b8c7e-6f13-11ee-939d-92fbcf53809c.png

4.6 设置接收FIFO的中断模式、中断阈值、大小和深度

79a5e7a4-6f13-11ee-939d-92fbcf53809c.png

请注意,RX MB和FIFO位于有限的RAM区域中,所以在设置RX MB和FIFO时,大小和深度的最大值取决于可用的RAM区域。从FSP v4.3.0开始,如果超出CANFD RAM区域,FSP会提示错误。

4.7 设置Callback函数名和优先级

79b4ec4a-6f13-11ee-939d-92fbcf53809c.png

4.8 设置通道和全局错误中断,根据用户实际需要进行勾选

79c7e5e8-6f13-11ee-939d-92fbcf53809c.png

5添加AFL

RA CANFD使用AFL条目来过滤接收到的消息,AFL 的主要参数如下:

79d6b906-6f13-11ee-939d-92fbcf53809c.jpg

点击查看大图

例如想接收到以下要求的数据,那么在hal_entry.c文件中hal_entry()函数前需要复制以下const来设置AFL:

Classical CAN Bus

Standard ID (11 bits)

RX MB 0 (to receive messages IDs 0x40 or 0x41)

左右滑动查看更多

const canfd_afl_entry_t p_canfd0_afl[CANFD_CFG_AFL_CH0_RULE_NUM] =
{
 {
   .id =
   {
     .id     = 0x40,
     .frame_type = CAN_FRAME_TYPE_DATA,
     .id_mode  = CAN_ID_MODE_STANDARD,
   },
   .mask =
   {
     .mask_id     = 0x7FE,
     .mask_frame_type = 0,
     .mask_id_mode  = 1,
   },
   .destination =
   {
     .minimum_dlc = CANFD_MINIMUM_DLC_0,
     .rx_buffer  = CANFD_RX_MB_0,
   },
 },
};

6CANFD相关API

79f1796c-6f13-11ee-939d-92fbcf53809c.jpg

点击查看大图

7用户代码中添加初始化函数、发送函数、接收函数和Callback函数

7.1 添加几个变量声明和一个宏定义

左右滑动查看更多

/* Flags to be set in Callback function */
bool b_canfd_tx_complete = false;
bool b_canfd_rx_complete = false;
bool b_canfd_err_status = false;


/* CANFD RX and TX variables */
can_frame_t g_can_tx_frame;
can_frame_t g_can_rx_frame;
can_frame_t g_can_rx_frame_fifo;


uint8_t tx_data[64];
#define DATA_LENGTH         (8) 

7.2 添加初始化函数

左右滑动查看更多

  /* Initialize CANFD Lite driver*/
  R_CANFD_Open(&g_canfd0_ctrl, &g_canfd0_cfg);

7.3 添加发送函数

左右滑动查看更多

    for( uint16_t i = 0; i < DATA_LENGTH; i++)
        {
            tx_data[i]          = (uint8_t) (i + 1);
        }
        memcpy((uint8_t*)&g_can_tx_frame.data[0], (uint8_t*)&tx_data[0], DATA_LENGTH);
        g_can_tx_frame.id               = 0x60;
        g_can_tx_frame.id_mode          = CAN_ID_MODE_STANDARD;
        g_can_tx_frame.type             = CAN_FRAME_TYPE_DATA;
        g_can_tx_frame.data_length_code = 64;//8;
        g_can_tx_frame.options          = CANFD_FRAME_OPTION_FD | CANFD_FRAME_OPTION_BRS;//0;
        g_can_tx_frame.options          = 0;


        /* Write some data to the transmit frame */
        R_CANFD_Write(&g_canfd0_ctrl, 0, &g_can_tx_frame);

7.4 当使用RX MB接收数据时,添加以下代码

左右滑动查看更多

    /* Get the status information for CAN transmission */
    R_CANFD_InfoGet(&g_canfd0_ctrl, &can_rx_info);


    /* Check if the data is received in FIFO */
    if((can_rx_info.rx_mb_status & (1<<0)) == (1<<0))
        {
            /* Read the input frame received */
            R_CANFD_Read(&g_canfd0_ctrl, 0, &g_can_rx_frame);
        }

7.5 添加Callback函数

左右滑动查看更多

使用FIFO接收时,需要在Callback中读取接收到的数据。

/* Callback function */
void canfd0_callback(can_callback_args_t *p_args)
{
  /* TODO: add your own code here */
  switch (p_args->event)
  {
    case CAN_EVENT_TX_COMPLETE:
    {
      b_canfd_tx_complete = true;    //set flag bit
      break;
    }
    case CAN_EVENT_RX_COMPLETE: // Currently driver don't support this. This is unreachable code for now.
    {
      b_canfd_rx_complete = true;
      memcpy(&g_can_rx_frame, &p_args->frame, sizeof(can_frame_t));
      break;
    }
    case CAN_EVENT_ERR_WARNING:       //error warning event
    case CAN_EVENT_ERR_PASSIVE:       //error passive event
    case CAN_EVENT_ERR_BUS_OFF:       //error Bus Off event
    case CAN_EVENT_BUS_RECOVERY:      //Bus recovery error event
    case CAN_EVENT_MAILBOX_MESSAGE_LOST:  //overwrite/overrun error event
    case CAN_EVENT_ERR_BUS_LOCK:      // Bus lock detected (32 consecutive dominant bits).
    case CAN_EVENT_ERR_CHANNEL:       // Channel error has occurred.
    case CAN_EVENT_TX_ABORTED:       // Transmit abort event.
    case CAN_EVENT_ERR_GLOBAL:       // Global error has occurred.
    case CAN_EVENT_FIFO_MESSAGE_LOST:   // Transmit FIFO is empty.
    case CAN_EVENT_TX_FIFO_EMPTY:      // Transmit FIFO is empty.
    {
      b_canfd_err_status = true;     //set flag bit
      break;
    }
  }
}

通过以上内容,我们可以看到,瑞萨的FSP为嵌入式系统开发者提供了一种快速、灵活和可靠的软件开发平台,帮助使用者快速将创意转化为端产品,并满足不同市场的需求。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7505

    浏览量

    151149
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17040

    浏览量

    350511
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3575

    浏览量

    129287
  • 瑞萨
    +关注

    关注

    35

    文章

    22296

    浏览量

    86129
  • FSP
    FSP
    +关注

    关注

    0

    文章

    34

    浏览量

    7116

原文标题:RA MCU CANFD在FSP中的配置详解

文章出处:【微信号:瑞萨MCU小百科,微信公众号:瑞萨MCU小百科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RA MCU CANFD的应用实例(上)

    本篇文章将以RA6E2为例,介绍如何使用瑞萨电子FSP CAN-FD lite的堆栈来设计和实现基于CAN的简易系统。最后,使用两套FPB-RA6E2和CAN收发器模块通过CAN实现相互通信,按下一块板上的按键S1会发送
    的头像 发表于 10-25 15:53 1204次阅读
    <b class='flag-5'>RA</b> <b class='flag-5'>MCU</b> <b class='flag-5'>CANFD</b>的应用实例(上)

    瑞萨RA产品家族通过PSA 2级和SESIP认证 进一步扩大物联网安全领域的领导地位

    配备灵活配置软件包(FSP)的RA6M4 MCU已通过PSA 2级认证,RA4和
    发表于 03-11 09:15 2850次阅读

    RA系列使用FSP配置外设驱动相关资料介绍

    1、RA系列使用 FSP 配置外设驱动 MDK 添加用于启动FSP的自定义命令打开 MDK,
    发表于 07-14 10:53

    【瑞萨RA4系列开发板体验】基于Renesas FSP配置USART

    ● Smart card interface● Manchester interface● Extended Serial interfacekeil工程,打开FSP配置:之后跳出
    发表于 12-08 21:08

    使用RA2E1 MCUFSP实现超低设计

      RA2E1 MCU 组评估套件 FPB-RA2E1实施各种连接器,允许访问 RA2E1 MCU、板载 E2 仿真器、用户开关、LED 上
    的头像 发表于 04-25 10:10 2063次阅读
    使用<b class='flag-5'>RA</b>2E1 <b class='flag-5'>MCU</b>和<b class='flag-5'>FSP</b>实现超低设计

    使用瑞萨e² studio FSP基于RA2E1定时器配置PWM输出

    瑞萨电子e² studio FSP 瑞萨电子灵活配置软件包(FSP)是一款增强型软件包,旨在为使用瑞萨电子RA系列ARM微控制器的嵌入式系统设计提供简单易用且可扩展的高质量软件。
    的头像 发表于 03-10 15:35 1358次阅读

    瑞萨MCU RA6T2的16位模数转换器操作 [4] 配置RA6T2 ADC模块 (1)

    配置RA6T2 ADC模块 RA6T2 MCU包含两个噪声整形SAR型A/D转换器单元,二者采用混合式架构,兼具SAR型和ΔΣ调制型的特性。 R
    的头像 发表于 07-24 17:45 1.5w次阅读
    瑞萨<b class='flag-5'>MCU</b> <b class='flag-5'>RA</b>6T2的16位模数转换器操作 [4] <b class='flag-5'>配置</b><b class='flag-5'>RA</b>6T2 ADC模块 (1)

    RA MCU CAN和CANFD IP介绍

    瑞萨RA MCU(Renesas RA Microcontroller Unit)是一种高性能且多功能的微控制器单元,由瑞萨电子公司推出。它是基于ARM Cortex-M内核的先进微控制器系列,专为
    的头像 发表于 07-28 12:15 1386次阅读
    <b class='flag-5'>RA</b> <b class='flag-5'>MCU</b> CAN和<b class='flag-5'>CANFD</b> IP介绍

    使用瑞萨e² studio FSP基于RA2E1定时器配置PWM输出

    使用瑞萨e² studio FSP基于RA2E1定时器配置PWM输出
    的头像 发表于 08-01 00:13 683次阅读
    使用瑞萨e² studio <b class='flag-5'>FSP</b>基于<b class='flag-5'>RA</b>2E1定时器<b class='flag-5'>配置</b>PWM输出

    使用FSP配置RA的CAN模块(上)

    使用FSP配置RA的CAN模块
    的头像 发表于 08-05 08:08 586次阅读
    使用<b class='flag-5'>FSP</b><b class='flag-5'>配置</b><b class='flag-5'>RA</b>的CAN模块(上)

    使用FSP配置RA的CAN模块(下)

    使用FSP配置RA的CAN模块
    的头像 发表于 08-05 08:08 453次阅读
    使用<b class='flag-5'>FSP</b><b class='flag-5'>配置</b><b class='flag-5'>RA</b>的CAN模块(下)

    RA MCU CAN和CANFD IP介绍

    瑞萨RA MCU(Renesas RA Microcontroller Unit)是一种高性能且多功能的微控制器单元,由瑞萨电子公司推出。它是基于ARM Cortex-M内核的先进微控制器系列,专为满足广泛的嵌入式应用需求而设计
    的头像 发表于 12-26 08:06 612次阅读
    <b class='flag-5'>RA</b> <b class='flag-5'>MCU</b> CAN和<b class='flag-5'>CANFD</b> IP介绍

    RA Overwrite模式FSP的支持

    前面介绍了MCUboot的基础知识,您可通过上方链接回顾,本章将着重介绍其中的Overwrite模式,以及FSP如何配置、如Flash怎样划分、安全校验的方式等。本文以
    的头像 发表于 06-13 10:52 497次阅读
    <b class='flag-5'>RA</b> Overwrite模式<b class='flag-5'>在</b><b class='flag-5'>FSP</b><b class='flag-5'>中</b>的支持

    如何使用RA MCUADC窗口比较功能

    如何使用RA MCUADC窗口比较功能
    的头像 发表于 04-12 08:06 339次阅读
    如何使用<b class='flag-5'>RA</b> <b class='flag-5'>MCU</b><b class='flag-5'>中</b>ADC窗口比较功能

    RA MCU CANFDFSP配置详解

    RA MCU CANFDFSP配置
    的头像 发表于 06-19 08:06 472次阅读
    <b class='flag-5'>RA</b> <b class='flag-5'>MCU</b> <b class='flag-5'>CANFD</b><b class='flag-5'>在</b><b class='flag-5'>FSP</b><b class='flag-5'>中</b>的<b class='flag-5'>配置</b><b class='flag-5'>详解</b>