0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RA MCU CANFD的應(yīng)用實(shí)例(下)

瑞薩MCU小百科 ? 來(lái)源:瑞薩MCU小百科 ? 2023-10-25 15:55 ? 次閱讀

前篇您可點(diǎn)擊上方的文章合集或文末的“上一篇 · RA MCU CANFD應(yīng)用實(shí)例(上)”查看相關(guān)文章。

3.14 設(shè)置Stack

點(diǎn)擊New Stack,選擇CAN FD Lite。

7c9eab6c-730a-11ee-939d-92fbcf53809c.png

3.15 它會(huì)變?yōu)榧t色,表示FSP配置器發(fā)現(xiàn)模塊有錯(cuò)誤

將鼠標(biāo)指針懸停在 CAN FD lite框上并檢查錯(cuò)誤:

7cb232e0-730a-11ee-939d-92fbcf53809c.png

3.16 CANFD時(shí)鐘默認(rèn)為禁用狀態(tài)。

切換到Clocks選項(xiàng)卡,將CANFDCLK設(shè)置為40MHz:

●將PLL(鎖相環(huán))分頻器改為Div / 2

●將PLL乘法器改為 Mul x16.0

●將CANFDCLK改為 Src: PLL

●將CANFDCLK分頻器改為 Div /4

7cc91e7e-730a-11ee-939d-92fbcf53809c.png

3.17 切回Stacks選項(xiàng)卡,選擇CANFD lite,轉(zhuǎn)至Properties選項(xiàng)卡

(確保當(dāng)前為FSP 配置透視圖 – 點(diǎn)擊右上方

7ce40b6c-730a-11ee-939d-92fbcf53809c.png

)。打開(kāi)屬性檢查比特率。

本實(shí)例將使用自動(dòng)比特率生成器的默認(rèn)比特率配置。您可在Bitrate->Automatic中檢查比特率。確保已禁用了“使用手動(dòng)設(shè)置”。

7cfbe0f2-730a-11ee-939d-92fbcf53809c.png

3.18 檢查實(shí)際采樣點(diǎn)和比特率(hal_data.c)是否與應(yīng)用程序的要求相匹配。

7d0f9084-730a-11ee-939d-92fbcf53809c.png

注意

●為了獲得最佳時(shí)鐘容差,檢查Arbitration baud_rate_prescaler和Data baud_rate_prescaler是否相同至關(guān)重要。

●如果啟用了收發(fā)器Delay Compensation,請(qǐng)不要使Data baud_rate_prescaler位大于 1。

3.19 我們將傳輸CANFD消息(msg ID:0x60),通過(guò)TX Mailbox 0(TX MB0)。

為此,我們需要修改以下參數(shù)

●Common->Reception->Acceptance Filtering->Channel 1 Rule Count: 0(修改后可以看到Stacks Tab上的error7d2d98c2-730a-11ee-939d-92fbcf53809c.png就沒(méi)有了)

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

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

7d34fc0c-730a-11ee-939d-92fbcf53809c.png

點(diǎn)擊Generate Project Content按鍵

7d38c8fa-730a-11ee-939d-92fbcf53809c.png

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

為此,在hal_entry()函數(shù)中添加以下內(nèi)容:

左右滑動(dòng)查看更多

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

3.21 須將AFL條目設(shè)置為在應(yīng)用中接收消息。

本實(shí)例需求如下:

●CANFD Bus

●Standard ID (11 bits)

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

在hal_entry.c文件中hal_entry()函數(shù)前復(fù)制以下const來(lái)設(shè)置AFL:

左右滑動(dòng)查看更多

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條目來(lái)過(guò)濾接收到的消息。我們回顧一下AFL的主要參數(shù):

7d3c4052-730a-11ee-939d-92fbcf53809c.jpg

點(diǎn)擊查看大圖

3.22 在hal_entry.c文件中hal_entry()函數(shù)前添加幾個(gè)變量聲明和一個(gè)宏定義:

左右滑動(dòng)查看更多

/* 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函數(shù)(也可以使用拖拽的方式進(jìn)行添加):

左右滑動(dòng)查看更多

/* 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數(shù)據(jù),需用到CAN傳輸函數(shù)的選項(xiàng)參數(shù)。

有三個(gè)僅限CANFD的位可以啟用一些獨(dú)有的 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字節(jié),所以我們將DLC(數(shù)據(jù)長(zhǎng)度代碼)設(shè)為64。

在按鍵user_irq_callback函數(shù)if(9 == p_args->channel)中添加以下代碼以發(fā)送標(biāo)準(zhǔn)數(shù)據(jù)(11 位 ID)CANFD frame。

左右滑動(dòng)查看更多

/* 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函數(shù)中,如果傳輸消息緩沖區(qū) (TXMB) 已在使用中,則傳輸消息將排隊(duì)。CANFD_B外圍設(shè)備自動(dòng)傳輸排隊(duì)的消息,并按消息緩沖區(qū)編號(hào)或消息ID確定其優(yōu)先級(jí)(請(qǐng)參閱 CANFD Lite堆棧傳輸優(yōu)先級(jí)屬性)。

3.25 對(duì)工程進(jìn)行編譯7d54c956-730a-11ee-939d-92fbcf53809c.png和調(diào)試7d61e97e-730a-11ee-939d-92fbcf53809c.png。

3.26 運(yùn)行代碼7d6c071a-730a-11ee-939d-92fbcf53809c.png,并按下FPB板上的S1,可以正常發(fā)送CANFD數(shù)據(jù)。

如果有CAN總線數(shù)據(jù)采集工具PCAN可以在這里進(jìn)行驗(yàn)證,如果沒(méi)有,請(qǐng)?jiān)谙鹿?jié)完成后使用兩塊FPB板進(jìn)行驗(yàn)證。

3.27 按下斷開(kāi)按鈕7d74140a-730a-11ee-939d-92fbcf53809c.png。

注意

這兩張圖片用于比較Classical CAN與CANFD frames。第一張圖顯示CAN幀以500Kb/s的速度傳輸8Bytes,第二張圖顯示CANFD以兩個(gè)比特率(標(biāo)稱速率為500Kb/s,F(xiàn)D數(shù)據(jù)速率為2Mb/s)傳輸64Bytes。

Classical CAN Frame:

7d7e3746-730a-11ee-939d-92fbcf53809c.png

CANFD Frame:

7d89f75c-730a-11ee-939d-92fbcf53809c.png

4

CANFD:使用FIFO接收數(shù)據(jù)

本節(jié)要點(diǎn):

本節(jié)學(xué)習(xí)如何通過(guò)FIFO接收CAN消息。當(dāng)對(duì)方FPB板按下S1,發(fā)送CANFD數(shù)據(jù),可以使用FIFO正常接收CANFD數(shù)據(jù)。

4.1 打開(kāi)fpb_ra6e2_canfd_lab工程中FSP配置:

7d9a6326-730a-11ee-939d-92fbcf53809c.png

4.2 切到Stacks選項(xiàng)卡,選擇CANFD Lite,然后轉(zhuǎn)到Properties選項(xiàng)卡(確保當(dāng)前為FSP配置透視圖)。

Reception FIFO 0默認(rèn)為啟用狀態(tài),并配置為每幀觸發(fā)一次中斷。您可在FSP配置器中檢查配置。(Module g_canfd0 CAN FD Lite (r_canfdlite)->Reception->FIFOs->FIFO 0)

并更改如下RX FIFO參數(shù)以確保其可以接收64字節(jié)的數(shù)據(jù)。

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

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

7daa9200-730a-11ee-939d-92fbcf53809c.png

點(diǎn)擊Generate Project Content7d38c8fa-730a-11ee-939d-92fbcf53809c.png按鈕。

注意

CANFD外設(shè)具有一個(gè)有限數(shù)量的緩沖池RAM,可用于分配RX MB和FIFO等級(jí)。就RA6E2和RA4E2而言:

●最大64-byte 存儲(chǔ):16則消息

●最大8-byte 存儲(chǔ):60則消息

4.3 在canfd0_callback中添加以下代碼以便從FIFO獲取數(shù)據(jù):

左右滑動(dòng)查看更多

    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緩沖區(qū)中有幀時(shí),F(xiàn)SP ISR Handler將會(huì)多次調(diào)用CANFD回調(diào)函數(shù)。

4.4 對(duì)工程進(jìn)行編譯7d54c956-730a-11ee-939d-92fbcf53809c.png和調(diào)試7d61e97e-730a-11ee-939d-92fbcf53809c.png。

4.5 運(yùn)行代碼7d6c071a-730a-11ee-939d-92fbcf53809c.png,并按下對(duì)方FPB板上的S1,能夠正確接收到CANFD數(shù)據(jù)。

7dd13ab8-730a-11ee-939d-92fbcf53809c.png

4.6 按下斷開(kāi)按鈕。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16802

    瀏覽量

    349375
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2628

    瀏覽量

    47216
  • 鎖相環(huán)
    +關(guān)注

    關(guān)注

    35

    文章

    577

    瀏覽量

    87626
  • pll
    pll
    +關(guān)注

    關(guān)注

    6

    文章

    770

    瀏覽量

    134963
  • CANFD
    +關(guān)注

    關(guān)注

    0

    文章

    54

    瀏覽量

    4898

原文標(biāo)題:RA MCU CANFD應(yīng)用實(shí)例(下)

文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RA MCU CANFD的應(yīng)用實(shí)例(上)

    本篇文章將以RA6E2為例,介紹如何使用瑞薩電子FSP CAN-FD lite的堆棧來(lái)設(shè)計(jì)和實(shí)現(xiàn)基于CAN的簡(jiǎn)易系統(tǒng)。最后,使用兩套FPB-RA6E2和CAN收發(fā)器模塊通過(guò)CAN實(shí)現(xiàn)相互通信,按下一塊板上的按鍵S1會(huì)發(fā)送CANFD
    的頭像 發(fā)表于 10-25 15:53 ?1068次閱讀
    <b class='flag-5'>RA</b> <b class='flag-5'>MCU</b> <b class='flag-5'>CANFD</b>的應(yīng)用<b class='flag-5'>實(shí)例</b>(上)

    構(gòu)建RA MCU生態(tài)圈!RA MCU 生態(tài)1.0發(fā)布

    瑞薩電子聯(lián)合深圳欣瑞利科技發(fā)起的RA生態(tài)工作室共同舉辦了RA MCU 生態(tài)1.0發(fā)布會(huì)。在發(fā)布會(huì)上,RA生態(tài)工作室正式發(fā)布了基于采用 Arm Cortex-M 內(nèi)核的
    的頭像 發(fā)表于 10-21 10:17 ?3128次閱讀

    如何使用M460系列MCU周期性傳送CANFD信息

    應(yīng)用:本示例代碼使用M460系列MCU周期性傳送CANFD信息。 BSP 版本: M460_Series_BSP_CMSIS_V3.00.001.001 硬件: NuMaker-M467HJ
    發(fā)表于 08-29 07:14

    RA MCU快速設(shè)計(jì)指南

    RA MCU快速設(shè)計(jì)指南
    發(fā)表于 11-07 19:50 ?0次下載
    <b class='flag-5'>RA</b> <b class='flag-5'>MCU</b>快速設(shè)計(jì)指南

    投稿 | 基于IAR搭建RA MCU 串口打印

    基于IAR搭建RA MCU 串口打印
    的頭像 發(fā)表于 11-04 10:40 ?1240次閱讀
    投稿 | 基于IAR搭建<b class='flag-5'>RA</b> <b class='flag-5'>MCU</b> 串口打印

    RA MCU CAN和CANFD IP介紹

    瑞薩RA MCU(Renesas RA Microcontroller Unit)是一種高性能且多功能的微控制器單元,由瑞薩電子公司推出。它是基于ARM Cortex-M內(nèi)核的先進(jìn)微控制器系列,專為
    的頭像 發(fā)表于 07-28 12:15 ?1338次閱讀
    <b class='flag-5'>RA</b> <b class='flag-5'>MCU</b> CAN和<b class='flag-5'>CANFD</b> IP介紹

    CAN和CANFD協(xié)議簡(jiǎn)介(

    前篇內(nèi)容請(qǐng)點(diǎn)擊查看: RA MCU CAN和CANFD IP介紹 CAN和CANFD協(xié)議簡(jiǎn)介(上) 2. CAN協(xié)議 2.2 協(xié)議層 前文 講述了CAN的物理層標(biāo)準(zhǔn),約定了電氣特性,以
    的頭像 發(fā)表于 08-02 12:15 ?2865次閱讀
    CAN和<b class='flag-5'>CANFD</b>協(xié)議簡(jiǎn)介(<b class='flag-5'>下</b>)

    RA MCU CANFD在FSP中的配置詳解

    在瑞薩RA系列MCU產(chǎn)品中,目前RA4E2、RA4T1、RA6E2、RA6T2和
    的頭像 發(fā)表于 10-20 14:46 ?1188次閱讀
    <b class='flag-5'>RA</b> <b class='flag-5'>MCU</b> <b class='flag-5'>CANFD</b>在FSP中的配置詳解

    基于IAR搭建RA MCU串口與RTT Viewer打印(

    基于IAR搭建RA MCU串口與RTT Viewer打印
    的頭像 發(fā)表于 08-14 09:50 ?620次閱讀
    基于IAR搭建<b class='flag-5'>RA</b> <b class='flag-5'>MCU</b>串口與RTT Viewer打印(<b class='flag-5'>下</b>)

    使用VSCODE+GNU+J-Link開(kāi)發(fā)瑞薩RA MCU

    使用VSCODE+GNU+J-Link開(kāi)發(fā)瑞薩RA MCU
    的頭像 發(fā)表于 09-04 16:23 ?794次閱讀
    使用VSCODE+GNU+J-Link開(kāi)發(fā)瑞薩<b class='flag-5'>RA</b> <b class='flag-5'>MCU</b>(<b class='flag-5'>下</b>)

    RA MCU CAN和CANFD IP介紹

    瑞薩RA MCU(Renesas RA Microcontroller Unit)是一種高性能且多功能的微控制器單元,由瑞薩電子公司推出。它是基于ARM Cortex-M內(nèi)核的先進(jìn)微控制器系列,專為滿足廣泛的嵌入式應(yīng)用需求而設(shè)計(jì)
    的頭像 發(fā)表于 12-26 08:06 ?510次閱讀
    <b class='flag-5'>RA</b> <b class='flag-5'>MCU</b> CAN和<b class='flag-5'>CANFD</b> IP介紹

    RA家庭MCU 注入電流以防止損壞MCU

    電子發(fā)燒友網(wǎng)站提供《RA家庭MCU 注入電流以防止損壞MCU.pdf》資料免費(fèi)下載
    發(fā)表于 02-21 08:33 ?0次下載
    <b class='flag-5'>RA</b>家庭<b class='flag-5'>MCU</b> 注入電流以防止損壞<b class='flag-5'>MCU</b>

    CAN和CANFD協(xié)議簡(jiǎn)介(

    CAN和CANFD協(xié)議簡(jiǎn)介(
    的頭像 發(fā)表于 02-19 12:08 ?568次閱讀
    CAN和<b class='flag-5'>CANFD</b>協(xié)議簡(jiǎn)介(<b class='flag-5'>下</b>)

    如何使用RA MCU中ADC窗口比較功能

    如何使用RA MCU中ADC窗口比較功能
    的頭像 發(fā)表于 04-12 08:06 ?258次閱讀
    如何使用<b class='flag-5'>RA</b> <b class='flag-5'>MCU</b>中ADC窗口比較功能

    RA MCU CANFD在FSP中的配置詳解

    RA MCU CANFD在FSP中的配置詳解
    的頭像 發(fā)表于 06-19 08:06 ?361次閱讀
    <b class='flag-5'>RA</b> <b class='flag-5'>MCU</b> <b class='flag-5'>CANFD</b>在FSP中的配置詳解