RAMCUCANFD应用实例(下)

瑞萨MCU小百科 2023-10-25 12:03


前篇您可点击上方的文章合集或文末的“上一篇 · RA MCU CANFD应用实例(上)”查看相关文章。


3.14 设置Stack

点击New Stack,选择CAN FD Lite。 


3.15 它会变为红色,表示FSP配置器发现模块有错误

将鼠标指针悬停在 CAN FD lite框上并检查错误:


3.16 CANFD时钟默认为禁用状态。

切换到Clocks选项卡,将CANFDCLK设置为40MHz:

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

● 将PLL乘法器改为 Mul x16.0

● 将CANFDCLK改为 Src: PLL

● 将CANFDCLK分频器改为 Div /4


3.17 切回Stacks选项卡,选择CANFD lite,转至Properties选项卡

(确保当前为FSP 配置透视图 – 点击右上方

)。打开属性检查比特率。


本实例将使用自动比特率生成器的默认比特率配置。您可在Bitrate->Automatic中检查比特率。确保已禁用了“使用手动设置”。


3.18 检查实际采样点和比特率(hal_data.c)是否与应用程序的要求相匹配。


注意

● 为了获得最佳时钟容差,检查Arbitration baud_rate_prescaler和Data baud_rate_prescaler是否相同至关重要。

● 如果启用了收发器Delay Compensation,请不要使Data baud_rate_prescaler位大于 1。


3.19 我们将传输CANFD消息(msg ID:0x60),通过TX Mailbox 0(TX MB0)。

为此,我们需要修改以下参数: 

● Common->Reception->Acceptance Filtering->Channel 1 Rule Count: 0(修改后可以看到Stacks Tab上的error就没有了)

● Module CAN FD Lite->Transmit Interrupts: Enable TXMB 0

● Module CAN FD Lite->Reception->Message Buffer->Number of Buffer: 1


点击Generate Project Content按键


3.20 要使用CANFD Lite堆栈,您需要先初始化CANFD模块。

为此,在hal_entry()函数中添加以下内容:

左右滑动查看更多

    /* Initialize CANFD Lite driver*/    err = R_CANFD_Open(&g_canfd0_ctrl, &g_canfd0_cfg);    if(FSP_SUCCESS != err)    {        APP_ERR_TRAP();    }


3.21 须将AFL条目设置为在应用中接收消息。

本实例需求如下:

● CANFD Bus

● Standard ID (11 bits)

● Message FIFO Buffer 0 (接收0x60 ~ 0x6F的消息ID)


在hal_entry.c文件中hal_entry()函数前复制以下const来设置AFL:

左右滑动查看更多

const canfd_afl_entry_t p_canfd0_afl[CANFD_CFG_AFL_CH0_RULE_NUM] ={{     .id =     {         .id         = 0x60,         .frame_type = CAN_FRAME_TYPE_DATA,         .id_mode    = CAN_ID_MODE_STANDARD,     },     .mask =     {         .mask_id         = 0x7F0,         .mask_frame_type = 0,         .mask_id_mode    = 1,     },     .destination =     {         .minimum_dlc = CANFD_MINIMUM_DLC_0,         .fifo_select_flags = CANFD_RX_FIFO_0,     }, },};


注意

RA CANFD使用AFL条目来过滤接收到的消息。我们回顾一下AFL的主要参数:

点击查看大图


3.22 在hal_entry.c文件中hal_entry()函数前添加几个变量声明和一个宏定义:

左右滑动查看更多

/* 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                  (64)  


3.23 添加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;            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;        }    }}


3.24 若传送CANFD数据,需用到CAN传输函数的选项参数。

有三个仅限CANFD的位可以启用一些独有的 CANFD 功能:

● CANFD_FRAME_OPTION_ERROR

= Error state set (ESI).

● CANFD_FRAME_OPTION_BRS

= Bit Rate Switching (BRS) enabled.

● CANFD_FRAME_OPTION_FD

= Flexible Data frame (FDF).

另外,CANFD可以增加到64字节,所以我们将DLC(数据长度代码)设为64。


在按键user_irq_callback函数if(9 == p_args->channel)中添加以下代码以发送标准数据(11 位 ID)CANFD frame

左右滑动查看更多

/* Callback function */void user_irq_callback(external_irq_callback_args_t *p_args){    /* TODO: add your own code here */    /* Make sure it's the right interrupt*/    if(9 == p_args->channel)    {        fsp_err_t err = FSP_SUCCESS;        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;        g_can_tx_frame.options          = CANFD_FRAME_OPTION_FD | CANFD_FRAME_OPTION_BRS;
       /* Write some data to the transmit frame */        err = R_CANFD_Write(&g_canfd0_ctrl, 0, &g_can_tx_frame);        /* Handle error */        if(FSP_SUCCESS != err)        {            APP_ERR_TRAP();        }    }}


注意

在R_CANFD_Write函数中,如果传输消息缓冲区 (TXMB) 已在使用中,则传输消息将排队。CANFD_B外围设备自动传输排队的消息,并按消息缓冲区编号或消息ID确定其优先级(请参阅 CANFD Lite堆栈传输优先级属性)。


3.25 对工程进行编译和调试


3.26 运行代码,并按下FPB板上的S1,可以正常发送CANFD数据。

如果有CAN总线数据采集工具PCAN可以在这里进行验证,如果没有,请在下节完成后使用两块FPB板进行验证。


3.27 按下断开按钮

注意

这两张图片用于比较Classical CAN与CANFD frames。第一张图显示CAN帧以500Kb/s的速度传输8Bytes,第二张图显示CANFD以两个比特率(标称速率为500Kb/s,FD数据速率为2Mb/s)传输64Bytes。

Classical CAN Frame:

CANFD Frame:


4

CANFD:使用FIFO接收数据

本节要点:

本节学习如何通过FIFO接收CAN消息。当对方FPB板按下S1,发送CANFD数据,可以使用FIFO正常接收CANFD数据。


4.1 打开fpb_ra6e2_canfd_lab工程中FSP配置:


4.2 切到Stacks选项卡,选择CANFD Lite,然后转到Properties选项卡(确保当前为FSP配置透视图)。

Reception FIFO 0默认为启用状态,并配置为每帧触发一次中断。您可在FSP配置器中检查配置。(Module g_canfd0 CAN FD Lite (r_canfdlite)->Reception->FIFOs->FIFO 0)


并更改如下RX FIFO参数以确保其可以接收64字节的数据。

● Reception->FIFO->FIFO 0->Payload Size: 64 Bytes

● Reception->FIFO->FIFO 0->Depth: 8 Stages


点击Generate Project Content按钮。


注意

CANFD外设具有一个有限数量的缓冲池RAM,可用于分配RX MB和FIFO等级。就RA6E2和RA4E2而言:

● 最大64-byte 存储:16则消息

● 最大8-byte 存储:60则消息


4.3 在canfd0_callback中添加以下代码以便从FIFO获取数据:

左右滑动查看更多

        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;        }


注意

FIFO缓冲区中有帧时,FSP ISR Handler将会多次调用CANFD回调函数。


4.4 对工程进行编译和调试


4.5 运行代码,并按下对方FPB板上的S1,能够正确接收到CANFD数据。


4.6 按下断开按钮


完整工程您可以通过以下链接下载:

https://gitee.com/recn-mcu-ae/fpb_ra6e2-canfd-sample-project


更多内容,您可复制下方网址到浏览器中打开进入瑞萨中文论坛查看:

https://community-ja.renesas.com/zh/frums-groups/mcu-mpu/


1

END

1


推荐阅读

RA MCU CANFD在FSP中的配置详解

RA MCU CAN和CANFD IP介绍

CAN和CANFD协议简介(上)

更多精彩内容,请点击

评论 (0)
  •   航空兵训练与战术对抗仿真平台系统解析   北京华盛恒辉航空兵训练与战术对抗仿真平台系统是现代军事训练的关键工具,借助计算机技术构建虚拟战场,支持多兵种协同作战模拟,为军事决策、训练及装备研发提供科学依据。   应用案例   目前,已有多个航空兵训练与战术对抗仿真平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润航空兵训练与战术对抗仿真平台。这些成功案例为航空兵训练与战术对抗仿真平台的推广和应用提供了有力支持。   一、系统架构与核心功能   系统由模拟器、计算机兵力生
    华盛恒辉l58ll334744 2025-04-24 16:34 108浏览
  •   陆地装备体系论证与评估综合平台系统解析   北京华盛恒辉陆地装备体系论证与评估综合平台系统是契合现代军事需求而生的专业系统,借助科学化、智能化手段,实现对陆地装备体系的全方位论证与评估,为军事决策和装备发展提供关键支撑。以下从功能、技术、应用及展望展开分析。   应用案例   目前,已有多个陆地装备体系论证与评估综合平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润陆地装备体系论证与评估综合平台。这些成功案例为陆地装备体系论证与评估综合平台的推广和应用提供了有力支持。
    华盛恒辉l58ll334744 2025-04-24 10:53 108浏览
  •   电磁频谱数据综合管理平台系统解析   一、系统定义与目标   北京华盛恒辉电磁频谱数据综合管理平台融合无线传感器、软件定义电台等前沿技术,是实现无线电频谱资源全流程管理的复杂系统。其核心目标包括:优化频谱资源配置,满足多元通信需求;运用动态管理与频谱共享技术,提升资源利用效率;强化频谱安全监管,杜绝非法占用与干扰;为电子战提供频谱监测分析支持,辅助作战决策。   应用案例   目前,已有多个电磁频谱数据综合管理平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁频谱数
    华盛恒辉l58ll334744 2025-04-23 16:27 192浏览
  • 前言本文主要演示基于TL3576-MiniEVM评估板HDMI OUT、DP 1.4和MIPI的多屏同显、异显方案,适用开发环境如下。Windows开发环境:Windows 7 64bit、Windows 10 64bitLinux开发环境:VMware16.2.5、Ubuntu22.04.5 64bitU-Boot:U-Boot-2017.09Kernel:Linux-6.1.115LinuxSDK:LinuxSDK-[版本号](基于rk3576_linux6.1_release_v
    Tronlong 2025-04-23 13:59 141浏览
  •   通用装备论证与评估系统平台解析   北京华盛恒辉通用装备论证与评估系统平台是服务军事装备全生命周期管理的综合性信息化平台,通过科学化、系统化手段,实现装备需求论证、效能分析等核心功能,提升装备建设效益。   应用案例   目前,已有多个通用装备论证与评估系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润通用装备论证与评估系统。这些成功案例为通用装备论证与评估系统的推广和应用提供了有力支持。   一、系统分层架构   (一)数据层   整合装备性能、作战、试验等多源异
    华盛恒辉l58ll334744 2025-04-24 16:14 95浏览
  •   有效样本分析决策系统平台全面解析   一、引言   北京华盛恒辉有效样本分析决策系统在当今数据驱动的时代,企业、科研机构等面临着海量数据的处理与分析挑战。有效样本分析决策系统平台应运而生,它通过对样本数据的精准分析,为决策提供有力支持,成为提升决策质量和效率的关键工具。   应用案例   目前,已有多个有效样本分析决策系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润有效样本分析决策系统。这些成功案例为有效样本分析决策系统的推广和应用提供了有力支持。   二、平台概述
    华盛恒辉l58ll334744 2025-04-24 11:13 95浏览
  •   海上训练与保障调度指挥平台系统解析   北京华盛恒辉海上训练与保障调度指挥平台系统是现代海上作战训练的核心枢纽,融合信息技术、GIS、大数据及 AI 等前沿技术,旨在实现海上训练高效组织、作战保障科学决策。以下从架构功能、应用场景、系统优势及发展挑战展开解读。   应用案例   目前,已有多个海上训练与保障调度指挥平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润海上训练与保障调度指挥平台。这些成功案例为海上训练与保障调度指挥平台的推广和应用提供了有力支持。   一
    华盛恒辉l58ll334744 2025-04-24 15:26 90浏览
  •   后勤实验仿真系统平台深度解析   北京华盛恒辉后勤实验仿真系统平台依托计算机仿真技术,是对后勤保障全流程进行模拟、分析与优化的综合性工具。通过搭建虚拟场景,模拟资源调配、物资运输等环节,为后勤决策提供数据支撑,广泛应用于军事、应急管理等领域。   应用案例   目前,已有多个后勤实验仿真系统平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润后勤实验仿真系统平台。这些成功案例为后勤实验仿真系统平台的推广和应用提供了有力支持。   一、核心功能   (一)后勤资源模拟
    华盛恒辉l58ll334744 2025-04-23 15:39 171浏览
  •   高海拔区域勤务与装备保障调度系统平台解析   北京华盛恒辉高海拔区域勤务与装备保障调度系统平台专为高海拔特殊地理环境打造,致力于攻克装备适应、人员健康保障、物资运输及应急响应等难题。以下从核心功能、技术特点、应用场景及发展趋势展开全面解读。   应用案例   目前,已有多个高海拔区域勤务与装备保障调度系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润高海拔区域勤务与装备保障调度系统。这些成功案例为高海拔区域勤务与装备保障调度系统的推广和应用提供了有力支持。   一、核心
    华盛恒辉l58ll334744 2025-04-24 10:13 99浏览
  •   无人机结构仿真与部件拆解分析系统平台解析   北京华盛恒辉无人机结构仿真与部件拆解分析系统无人机技术快速发展的当下,结构仿真与部件拆解分析系统平台成为无人机研发测试的核心工具,在优化设计、提升性能、降低成本等方面发挥关键作用。以下从功能、架构、应用、优势及趋势展开解析。   应用案例   目前,已有多个无人机结构仿真与部件拆解分析系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润无人机结构仿真与部件拆解分析系统。这些成功案例为无人机结构仿真与部件拆解分析系统的推广和应用提
    华盛恒辉l58ll334744 2025-04-23 15:00 201浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦