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

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

3天内不再提示

瑞萨RA2L1系列MCU简介和CAN通信应用例程

瑞萨MCU小百科 来源:瑞萨MCU小百科 2023-10-27 15:50 次阅读

瑞萨RA2L1系列MCU简介

RA2L1产品组基于Arm Cortex-M23 核心(现今 Arm Cortex-M系列中功耗最低的 CPU)。这款产品采用优化的制程和瑞萨电子的低功耗工艺技术,是业界一流水平的超低功耗微控制器。RA2L1产品组能够支持1.6V至5.5V宽电压工作,CPU时钟频率最高48MHz,且运行模式电流和待机模式电流更低。RA2L1产品群配备了增强型电容式触摸感应单元(CTSU2)、CAN控制器局域网总线,串行通信接口高精度模拟电路和定时器。产品封装从48引脚到100引脚。

71b5d63c-749d-11ee-939d-92fbcf53809c.png

控制器局域网CAN模块简介

控制器局域网(CAN)模块使用基于消息的协议在电磁噪声应用中的多个从机和主机之间接收和传输数据。

该模块符合ISO11898-1(CAN2.0A / CAN2.0B)标准,最多支持32个邮箱,可配置为普通邮箱和FIFO模式下的发送或接收。支持标准(11位)和扩展(29位)消息格式。CAN模块需要额外的外部CAN收发器

CAN模块框图

71ec1e86-749d-11ee-939d-92fbcf53809c.png

注意事项:

CAN需要外部高速晶体作为时钟源,使用CAN模块前需要先配置好外部高速时钟。

CAN模块参数规格

720ad628-749d-11ee-939d-92fbcf53809c.png72167316-749d-11ee-939d-92fbcf53809c.png

RA2L1 CAN通信应用例程

使用官方e2 studio开发工具创建RA2L1工程,并添加CAN外设模块底层应用。

722d2a5c-749d-11ee-939d-92fbcf53809c.png

配置CAN模块参数(包括通信速率、引脚配置等)。

7240af96-749d-11ee-939d-92fbcf53809c.png

CAN应用参考代码

左右滑动查看完整内容

#define WAIT_TIME            (500U)       //wait time value
#define CAN_MAILBOX_NUMBER_TX      (0U)        //mail box number
#define CAN_MAILBOX_NUMBER_RX      (1U)
#define CAN_FRAME_TRANSMIT_DATA_BYTES  (8U)        //data length
#define ZERO              (0U)


/* Private global variables*/
/* Flags, set from Callback function */
static volatile bool b_can_tx = false;         //CAN transmission status
static volatile bool b_can_rx = false;         //CAN receive status
static volatile bool b_can_err = false;         //CAN error status
/* CAN frames for tx and rx */
static can_frame_t g_can_tx_frame;           //CAN transmit frame
static can_frame_t g_can_rx_frame;           //CAN receive frame


void hal_entry(void)
{
  /* TODO: add your own code here */
  fsp_err_t err = FSP_SUCCESS;
  uint32_t time_out = WAIT_TIME;                   // time out
  uint8_t can_tx_msg[CAN_FRAME_TRANSMIT_DATA_BYTES] = {0,1,2,3,4,5,6,7};
  uint8_t can_rx_msg[CAN_FRAME_TRANSMIT_DATA_BYTES] = {0};


  /* Initializes the CGC module. */
  err = R_CGC_Open(&g_cgc0_ctrl, &g_cgc0_cfg);
  /* Handle any errors. This function should be defined by the user. */
  assert(FSP_SUCCESS == err);


  /* Start the CGC_CLOCK_MAIN_OSC. */
  err = R_CGC_ClockStart(&g_cgc0_ctrl, CGC_CLOCK_MAIN_OSC, NULL);
  assert(FSP_SUCCESS == err);


  /* Initialize CAN module */
  err = R_CAN_Open(&g_can_ctrl, &g_can_cfg);
  /* Error trap */
  if(FSP_SUCCESS != err)
  {
    __asm("BKPT #0
");
  }
  g_can_tx_frame.id = CAN_MAILBOX_NUMBER_TX;
  g_can_tx_frame.type = CAN_FRAME_TYPE_DATA;
  g_can_tx_frame.data_length_code = CAN_FRAME_TRANSMIT_DATA_BYTES;


  /* copy the tx data frame with TX_MSG */
  memcpy((uint8_t*)&g_can_tx_frame.data[ZERO], (uint8_t*)&can_tx_msg[ZERO], CAN_FRAME_TRANSMIT_DATA_BYTES);
  err = R_CAN_Write(&g_can_ctrl, CAN_MAILBOX_NUMBER_TX, &g_can_tx_frame);
  /* Error trap */
  if (FSP_SUCCESS != err)
  {
    err = R_CAN_Close(&g_can_ctrl);
    if (FSP_SUCCESS != err)
    {
      __asm("BKPT #0
");
    }
  }


  while(1)
  {
    /* check if receive flag is set */
    if (true == b_can_rx)
    {
      /* Reset flag bit */
      b_can_rx = false;


      g_can_rx_frame.data[CAN_FRAME_TRANSMIT_DATA_BYTES-1] = g_can_rx_frame.id;


      /* Transmit the rx data frame as acknowledging the data transfer is successful */
      err = R_CAN_Write (&g_can_ctrl, CAN_MAILBOX_NUMBER_TX, &g_can_rx_frame);
      /* Error trap */
      if (FSP_SUCCESS != err)
      {
        err = R_CAN_Close(&g_can_ctrl);
        if (FSP_SUCCESS != err)
        {
          __asm("BKPT #0
");
        }
      }
      /* wait for transmit flag bit to set */
      while ((true != b_can_tx) && (time_out--));
      if (0 == time_out)
      {
        __asm("BKPT #0
");
      }
      /* Reset flag bit */
      b_can_tx = false;
    }
  }
}


void can_callback(can_callback_args_t *p_args)
{
  switch (p_args->event)
  {
    case CAN_EVENT_TX_COMPLETE:
    {
      b_can_tx = true;    //set flag bit
      break;
    }


    case CAN_EVENT_RX_COMPLETE:
    {
      b_can_rx = true;
//copy the received data to rx_frame
  memcpy(&g_can_rx_frame, p_args->p_frame, sizeof(can_frame_t));       break;
    }


    case CAN_EVENT_MAILBOX_MESSAGE_LOST:  //overwrite/overrun error event
    case CAN_EVENT_BUS_RECOVERY:      //Bus recovery error event
    case CAN_EVENT_ERR_BUS_OFF:       //error Bus Off event
    case CAN_EVENT_ERR_PASSIVE:       //error passive event
    case CAN_EVENT_ERR_WARNING:       //error warning event
    {
      b_can_err = true;          //set flag bit
      break;
    }
  }
}

CAN通信实测验证

RA2L1芯片内部只有CAN控制器,需要与外部CAN设备通信时,还需要外接CAN收发器。

CAN收发器应用参考原理图

725424ae-749d-11ee-939d-92fbcf53809c.png

使用USB-CAN工具测试CAN通信

726d8066-749d-11ee-939d-92fbcf53809c.png

a. 接收不到ID为0的数据

7276013c-749d-11ee-939d-92fbcf53809c.png

b. 禁止Mask功能后,可接收所有ID的数据.

7285d634-749d-11ee-939d-92fbcf53809c.png

审核编辑:汤梓红

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

    关注

    146

    文章

    16022

    浏览量

    343676
  • ARM
    ARM
    +关注

    关注

    134

    文章

    8653

    浏览量

    361844
  • CAN通信
    +关注

    关注

    3

    文章

    87

    浏览量

    17628
  • 瑞萨
    +关注

    关注

    32

    文章

    22214

    浏览量

    84921

原文标题:瑞萨RA2L1系列CAN通信应用

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

收藏 人收藏

    评论

    相关推荐

    RA2系列开发板体验】初识RA2L1开发板

    至 5.5V 的宽电压工作。 在RA2L1内,配有增强型电容式触摸感应单元 (CTSU2)、串行通信接口、高精度模拟电路和定时器等。该开发板的外观如图1和图
    发表于 11-29 10:06

    RA2系列开发板体验】开箱+环境搭建

    RA2L1 产品组基于 Arm® Cortex®-M23 核心(现今 Arm® Cortex-M 系列中功耗最低的 CPU)。 这款产品采用优化的制程和电子的低功耗工艺技术,是业界
    发表于 12-01 11:30

    RA2系列开发板体验】RA2L1试用笔记

    前言  早听说过这个芯片品牌,好像是电赛的赞助商。有机会申请到了RA2L1 的开发板试用,因为工作上会用到CAN通信所以专门选了带
    发表于 12-14 15:15

    RA2系列开发板体验】开箱体验-Hg

    的 CPU)。 这款产品采用优化的制程和电子的低功耗工艺技术,是业界一流水平的超低功耗微控制器。 RA2L1 产品组能够支持 1.6V 至 5.5V 宽电压工作,CPU 时钟频率最高 48MHz
    发表于 12-21 01:04

    RA2系列开发板体验】基于Keil MDK环境搭建及最快上手例程

    一、开发板简介RA2L1 基于 Arm® Cortex®-M23 核心(现今 Arm® Cortex-M 系列中功耗最低的 CPU)。 这款产品采用优化的制程和
    发表于 12-23 22:15

    RA2系列开发板体验】测评RA2L1电容式触摸

    RA2L1 MCU产品群关键特性:48MHz Arm Cortex-M23 CPU内核支持1.6V-5.5V宽范围工作电压超低功耗,提供64μA/MHz工作电流和250nA软件待机电流,快速唤醒时间
    发表于 12-27 23:24

    RA2系列开发板体验】+RA2AL开发板试用笔记

    前言  早听说过这个芯片品牌,好像是电赛的赞助商。有机会申请到了RA2L1 的开发板试用,因为工作上会用到CAN通信所以专门选了带
    发表于 12-28 13:19

    RA2系列开发板体验

    RA2系列开发板体验.
    发表于 01-20 11:05

    Renesas RA2L1开发板之CAN介绍

    1、Renesas RA2L1开发板之CAN介绍  功能模块的硬件介绍  CPK-RA2L1评估板是一款专门针对中国本地的开发板,主MCU
    发表于 11-01 11:46

    Renesas RA2L1开发板之PWM方波配置相关资料推荐

    1、Renesas RA2L1开发板之PWM方波配置  工程的配置  时钟的配置  本次直接基于官方的例程进行开发,使用
    发表于 11-02 15:31

    RA4系列开发板体验】+ 3种开发板的比较

    键和确认键。如果既使用触摸键又使用机械键难免整体上看上去有些不伦不类。图1RA-Eco-RA4M2-100PIN图2R7FA2L1AB2DFL就这点来讲,无疑 CPK-
    发表于 12-09 22:39

    【野火启明6M5开发板体验】野火启明开发板和RA MCU介绍

    *1Micro SD卡槽*1RTC电池座*1,需使用 CR1220电池 RA 产品家族
    发表于 12-14 22:31

    基于RA2L1开发板的初识点灯

      1. 开发板  2. 开发板介绍  RA2L1产品组属于48MHz Arm® Cortex®-M23 超低功耗通用微控制器 ,能够支
    发表于 04-03 16:55

    RA2L1 ANE加解密协处理系统简介

    芯片的模式,可以更好的增加安全性并且可以使用随机秘钥加强防破解能力。  1简介  以下介绍的是采用RA2L1作为专用加解密协处理器的方
    发表于 04-03 17:28

    RA2L1:使用CLKOUT给MCU CAN模块提供时钟

    RA2L1:使用CLKOUT给MCU CAN模块提供时钟
    的头像 发表于 11-02 16:27 366次阅读
    <b class='flag-5'>RA2L1</b>:使用CLKOUT给<b class='flag-5'>MCU</b> <b class='flag-5'>CAN</b>模块提供时钟