日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

如何使用 AS32A601和1042CAN控制器來實(shí)現(xiàn)CANFD的收發(fā)功能?

安芯 ? 來源:jf_29981791 ? 作者:jf_29981791 ? 2025-11-30 10:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. 簡介

控制器局域網(wǎng)絡(luò)(CAN)根據(jù) ISO11898-1:2015和 Bosch CAN FD規(guī)范進(jìn)行通信。連接到物理層需要額外的收發(fā)器硬件。所有有關(guān)處理消息的函數(shù)都由接收處理程序和發(fā)送處理程序?qū)崿F(xiàn)。

CAN/CANFD特性介紹:

  • 數(shù)據(jù)長度擴(kuò)展:傳統(tǒng)CAN的數(shù)據(jù)段長度固定為8字節(jié),而CAN FD將數(shù)據(jù)段長度擴(kuò)展至最大64字節(jié)。這意味著單次報(bào)文可傳輸更多數(shù)據(jù),減少了報(bào)文發(fā)送次數(shù),降低了總線負(fù)載,尤其適用于需要傳輸大量參數(shù)或傳感器數(shù)據(jù)的場(chǎng)景。
  • 傳輸速率提升:CAN FD采用“雙速率段”設(shè)計(jì),報(bào)文的仲裁段(用于ID識(shí)別和總線仲裁)仍沿用經(jīng)典CAN的速率(最高1Mbps),確保與傳統(tǒng)CAN節(jié)點(diǎn)的兼容性;而數(shù)據(jù)段則可切換至更高速率(理論最大值:8 Mbps——部分高端控制器在實(shí)驗(yàn)室條件下,實(shí)際應(yīng)用典型值:2-5 Mbps,受物理層限制(線纜質(zhì)量、終端電阻、EMC 等),大幅提升了數(shù)據(jù)傳輸效率。
  • BRS位控制速率切換:通過報(bào)文中的“總線速率切換位(BRS)”控制是否啟用高速數(shù)據(jù)段。當(dāng)BRS=1時(shí),數(shù)據(jù)段采用高速率;BRS=0時(shí),數(shù)據(jù)段與仲裁段速率一致,靈活適配不同傳輸需求。
  • 向下兼容:CAN FD節(jié)點(diǎn)可與傳統(tǒng)CAN節(jié)點(diǎn)在同一總線上共存,CAN FD控制器能正確接收和解析傳統(tǒng)CAN報(bào)文,傳統(tǒng)CAN節(jié)點(diǎn)雖無法解析CAN FD報(bào)文,但不會(huì)影響總線正常通信,保障了系統(tǒng)升級(jí)的平滑性。

本章我們將向大家介紹如何使用 AS32A601和1042CAN控制器來實(shí)現(xiàn)CANFD的收發(fā)功能: 我們使用的AS32A601帶有兩個(gè)CAN控制器,而我們本章只使用了CAN3。

2. 硬件設(shè)計(jì)

3. 軟件設(shè)計(jì)

幀結(jié)構(gòu)表

3.1 基礎(chǔ)配置代碼分析

CAN/CANFD的GPIO配置,注意配置正確的復(fù)用模式

/*

  • Function: CANFD3_GPIO_Config
  • Description: Configure CANFD3.
  • Param: None.
  • Return: None.

*/

void User_CANFD3_GPIO_Init()

{

CANFD3_CLK_ENABLE();

GPIOC_CLK_ENABLE();

GPIO_InitTypeDef GPIO_InitStructure;

CANFD_InitTypeDef CANFD_InitStructure;

PLIC_InitTypeDef PLIC_InitStructure;

/* Set GPIO multiplex mapping */

GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_CAN3);

GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_CAN3);

/* GPIO Configure */

GPIO_StructInit(&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;

GPIO_InitStructure.GPIO_OType = GPIO_Out_PP;

GPIO_InitStructure.GPIO_OStrength = GPIO_OStrength_9mA;

GPIO_Init(GPIOC, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;

GPIO_InitStructure.GPIO_IType = GPIO_IPU;

GPIO_InitStructure.GPIO_OStrength = GPIO_OStrength_9mA;

GPIO_Init(GPIOC, &GPIO_InitStructure);

}

根據(jù)改公式可配置出CANFD的仲裁域、數(shù)據(jù)域波特率。計(jì)算時(shí)需要注意的是BRPTS1TS2寄存器已為加1之后的數(shù)值,不需要再加1。

波特率計(jì)算公式

void CAN_ConfigBaudrate(void)

{

/* Initializes the CANFD3 */

/* Arbitration Phase (Nominal) Baud Rate 500KHz */

/* Data Phase Baud Rate 2MHz */

CANFD_StructInit(&CANFD_InitStructure);

CANFD_InitStructure.CANFD_SRR = CANFD_SRR_RESET;

CANFD_InitStructure.CANFD_APBRPR = CANFD_APBRPR_4tp;

CANFD_InitStructure.CANFD_APBTR_APTS1 = CANFD_APBTR_TS1_30tp;

CANFD_InitStructure.CANFD_APBTR_APTS2 = CANFD_APBTR_TS2_9tp;

CANFD_InitStructure.CANFD_APBTR_APSJW = CANFD_APBTR_SJW_2tp;

CANFD_InitStructure.CANFD_DPBRPR = CANFD_DPBRPR_4tp;

CANFD_InitStructure.CANFD_DPBTR_DPTS1 = CANFD_DPBTR_TS1_30tp;

CANFD_InitStructure.CANFD_DPBTR_DPTS2 = CANFD_DPBTR_TS2_9tp;

CANFD_InitStructure.CANFD_DPBTR_DPSJW = CANFD_DPBTR_SJW_1tp;

CANFD_Init(CANFD3, &CANFD_InitStructure);

}

ID 的具體字段說明

測(cè)試設(shè)置 AFMR0 為 0xFFE00000,AFIR 為 22E00000,且寫入 AFR 寄

存器的 UAF0 位為 1,則表示只有符合 ID 為 0x117 的消息才能被接收。

void CANFD3_Parm_Init(void)

{

/* CANFD receive filter configure */

CANFD_FilterInit(CANFD3, TB0, 0xFFE00000, 0x22E00000);

CANFD_AutoRetransConfig(CANFD3,ENABLE);

/* Enable new message received interrupt */

CANFD_ITConfig(CANFD3, CANFD_IT_ERXOK, ENABLE);

/* CANFD Enable */

CANFD_Enable(CANFD3);

PLIC_StructInit(&PLIC_InitStructure);

/* Configer the CANFD1 interrupt */

PLIC_InitStructure.PLIC_IRQChannel = CANFD3_IRQn;

PLIC_InitStructure.PLIC_IRQPriority = 2;

PLIC_InitStructure.PLIC_IRQChannelCmd = ENABLE;

PLIC_Init(&PLIC_InitStructure);

CANFD_ClearITPendingBit(CANFD3, CANFD_CLEAR_ALL);

}

DLC 的具體字段說明

void CANFD3_Frame_Init()

{

CANFD_TXFrameTypeDef CANFD_TXFrameStruct;

/* Set the setting ID and setting mode */

CANFD_TXFrameStruct.CANFD_TX_PROTOCOL = CANFD;

CANFD_TXFrameStruct.CANFD_TX_FORMAT = EXTENDED;

CANFD_TXFrameStruct.CANFD_TX_TYPE = DATA;

CANFD_TXFrameStruct.CANFD_Frame_ID = 0x147;

CANFD_FrameInit(CANFD3, TB1, &CANFD_TXFrameStruct);

}

/*

  • Function: CANFD3_IRQ_Handler
  • Description: CANFD3 interrupt handler function.
  • Param: None.
  • Return: None.

*/

void CANFD3_IRQ_Handler()

{

if(CANFD_GetITStatus(CANFD3, CANFD_FLAG_RXOK) != RESET)

{

/* get the receive data */

Canfd1rx_flags = 1;

/* Clear the interrupt pending bits */

CANFD_ClearITPendingBit(CANFD3, CANFD_CLEAR_RXOK);

}

}

3.2多幀CAN發(fā)送配置代碼分析

需要發(fā)送多幀消息,可以直接向發(fā)送請(qǐng)求寄存器(TRR)寫發(fā)送多幀指令。如發(fā)送 TB0 到TB2,則可以向CAN 發(fā)送緩存就緒請(qǐng)求寄存器(CAN_TRR)寫 0x00000007。

程序同時(shí)配置并觸發(fā)三幀發(fā)送后,CAN 控制器(或驅(qū)動(dòng)層)會(huì)根據(jù)ID優(yōu)先級(jí)規(guī)則自動(dòng)仲裁:

發(fā)送初始化時(shí),三幀數(shù)據(jù)均進(jìn)入發(fā)送緩沖區(qū)(如 TB0、TB1 等發(fā)送郵箱),CAN 控制器檢測(cè)到總線空閑后,同時(shí)啟動(dòng)三幀的位仲裁;

仲裁過程中,0x147 因 ID 最小優(yōu)先贏得總線控制權(quán),先完成數(shù)據(jù)傳輸;

0x147 發(fā)送完成后,總線空閑,剩余兩幀再次仲裁,0x148 優(yōu)先發(fā)送,最后 0x149 完成傳輸;

void TB0_INIT(void)

{

CANFD_TXFrameTypeDef CANFD_TXFrameStruct;

/ * Setthe settingIDandsetting mode */

CANFD_TXFrameStruct.CANFD_TX_PROTOCOL=CANFD;

CANFD_TXFrameStruct.CANFD_TX_FORMAT=EXTENDED;

CANFD_TXFrameStruct.CANFD_TX_TYPE=DATA;

CANFD_TXFrameStruct.CANFD_Frame_ID=0x149 ;

CANFD_FrameInit(CANFD3, TB0, &CANFD_TXFrameStruct);

}

void TB1_INIT(void)

{

CANFD_TXFrameTypeDef CANFD_TXFrameStruct;

/ * Setthe settingIDandsetting mode */

CANFD_TXFrameStruct.CANFD_TX_PROTOCOL=CANFD;

CANFD_TXFrameStruct.CANFD_TX_FORMAT=EXTENDED;

CANFD_TXFrameStruct.CANFD_TX_TYPE=DATA;

CANFD_TXFrameStruct.CANFD_Frame_ID=0x148 ;

CANFD_FrameInit(CANFD3, TB1, &CANFD_TXFrameStruct);

}

void TB2_INIT(void)

{

CANFD_TXFrameTypeDef CANFD_TXFrameStruct;

/ * Setthe settingIDandsetting mode */

CANFD_TXFrameStruct.CANFD_TX_PROTOCOL=CANFD;

CANFD_TXFrameStruct.CANFD_TX_FORMAT=EXTENDED;

CANFD_TXFrameStruct.CANFD_TX_TYPE=DATA;

CANFD_TXFrameStruct.CANFD_Frame_ID=0x147 ;

CANFD_FrameInit(CANFD3, TB2, &CANFD_TXFrameStruct);

}

void CANFD3_Frame _Init()

{

TB0_INIT();

TB1_INIT();

TB2_INIT();

}

/ *

***** @brief 多幀發(fā)送函數(shù)

***** @param CANFDx: CANFD外設(shè)基地址

***** @param frames: 指向CANFD_MultiTxFrameInfo結(jié)構(gòu)體數(shù)組的指針,包含了所有要發(fā)送的幀的信息

***** @param numFrames: 要發(fā)送的幀的數(shù)量

***** @retval****None

*/

void CANFD_MultiTransmit(CANFD_TypeDef ***** CANFDx, CANFD_MultiTxFrameInfo ***** frames, uint32_t numFrames)

{

/ * Check the parameters */

assert_param(IS_CANFD_ALL_PERIPH(CANFDx));

assert_param(frames !****=NULL);

assert_param(numFrames >0 );

uint32_t i, j;

uint32_t ***** txaddress;

uint32_t trr_mask=0 ; // 用于觸發(fā)發(fā)送的TRR位掩碼

//--- 步驟 1 : 填充所有發(fā)送緩沖區(qū)并準(zhǔn)備TRR掩碼 ---

for(i=0 ; i < numFrames; i ++)

{

// 檢查當(dāng)前幀的參數(shù)

assert_param(IS_CANFD_TB_NUMBER(frames[i].RSTBx));

assert_param(frames[i].Canfdbuf !****=NULL);

assert_param(IS_CANFD_DATA_LENGHT(frames[i].Buflength));

//1.1 設(shè)置數(shù)據(jù)長度DLC

CANFDx->TxMessage[frames[i].RSTBx].TB_DLC &****=~CANFD_TB_DLC_DLC;

CANFDx->TxMessage[frames[i].RSTBx].TB_DLC |****=(Can_DataLen2Dlc[frames[i].Buflength] << CANFD_TB_DLC_DLC_Pos);

CANFD_NormalStatus(CANFDx);// 確保CANFD處于正常工作狀態(tài)

//1.2 填充數(shù)據(jù)內(nèi)容

txaddress=(uint32_t ***** )&CANFDx->TxMessage[frames[i].RSTBx].TB_DW0;

for(j=0 ; j < frames[i].Buflength; j +=4 )

{

***** txaddress++=(((uint32_t)frames[i].Canfdbuf[j] <<24 ) |

((uint32_t)frames[i].Canfdbuf[j+1 ] << 16 ) |

((uint32_t)frames[i].Canfdbuf[j+2 ] << 8 ) |

(uint32_t)frames[i].Canfdbuf[j+3 ]);

}

//1.3 設(shè)置TRR掩碼,標(biāo)記這個(gè)TB需要被發(fā)送

trr_mask |****= **(**1 << frames[i].RSTBx);

}

//--- 步驟 2 : 一次性觸發(fā)所有幀的發(fā)送 ---

CAcFDx->TRR=trr_mask;//TRR寄存器寫入掩碼,觸發(fā)所有指定TB的發(fā)送

//--- 步驟 3 : 等待所有幀發(fā)送完成 ---

// 注意:這種等待方式會(huì)阻塞CPU,直到所有幀發(fā)送完畢

While ((CANFDx->TRR & trr_mask) !****=0 )

// 說明:發(fā)送完成后,硬件會(huì)自動(dòng)清除TRR中對(duì)應(yīng)的位。

// 所以當(dāng) (TRR & trr_mask) 的結(jié)果為0時(shí),代表所有請(qǐng)求發(fā)送的幀都已完成。

}

4 下板驗(yàn)證

基礎(chǔ)配置驗(yàn)證:

驗(yàn)證在 CAN FD 通信中,切換BRS 位為 1(啟用高速數(shù)據(jù)段)和 0(禁用,使用仲裁段速率)時(shí),總線可以成功地在沖裁域速率和數(shù)據(jù)域速率之間切換。

配置 CAN 接收端濾波參數(shù):根據(jù) CAN 控制器濾波機(jī)制(如掩碼模式、列表模式),設(shè)置驗(yàn)收碼為 0x117,配置對(duì)應(yīng)掩碼寄存器(確保僅匹配 0x117 精準(zhǔn) ID,無模糊匹配),啟用接收濾波功能。實(shí)現(xiàn)對(duì)所有非 0x117 的幀ID報(bào)文實(shí)現(xiàn)完全過濾(不觸發(fā)接收響應(yīng)、不存入接收緩沖區(qū)、不產(chǎn)生相關(guān)中斷)。

多幀CAN發(fā)送配置驗(yàn)證:

本次驗(yàn)證充分證明:實(shí)際驗(yàn)證(如通過 CAN 分析儀抓包)顯示:幀的發(fā)送順序嚴(yán)格遵循「0x147 → 0x148 → 0x149」,無亂序或優(yōu)先級(jí)倒置現(xiàn)象,證明多幀發(fā)送程序能夠嚴(yán)格遵循 CAN 總線 ID 優(yōu)先級(jí)仲裁規(guī)則,實(shí)現(xiàn)按 ID 從小到大的自動(dòng)順序發(fā)送,確保了高優(yōu)先級(jí)數(shù)據(jù)的實(shí)時(shí)傳輸,符合 CAN 總線的通信特性和嵌入式系統(tǒng)的實(shí)時(shí)性要求。

審核編輯 黃宇

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

    關(guān)注

    3

    文章

    81

    瀏覽量

    15731
  • CANFD
    +關(guān)注

    關(guān)注

    0

    文章

    106

    瀏覽量

    5958
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    TJA1042高速CAN 收發(fā)器

    關(guān)鍵詞 TJA1042、高速、低功耗、CAN 收發(fā)器摘 要TJA1042 是一款高速CAN 收發(fā)器
    發(fā)表于 11-10 13:50 ?366次下載

    TJA1042 高速CAN收發(fā)器產(chǎn)品數(shù)據(jù)手冊(cè)

    TJA1042 是一款高速CAN 收發(fā)器,是CAN 控制器和物理總線之間的接口,為CAN
    發(fā)表于 03-11 16:33 ?180次下載

    通用CAN接口芯片NCA1042兼容替代TI的TCAN1042/NXP的TJA1049T

    支持CAN FD和總線喚醒功能的故障保護(hù)CAN收發(fā)器NCA1042是一款高速CAN
    發(fā)表于 10-31 12:03 ?3次下載

    CAN收發(fā)器CAN控制器的區(qū)別

    CAN總線系統(tǒng)是現(xiàn)代工業(yè)自動(dòng)化和汽車控制系統(tǒng)中常用的通信協(xié)議。在CAN總線系統(tǒng)中,CAN收發(fā)器CAN
    的頭像 發(fā)表于 05-28 15:44 ?6146次閱讀

    TCAN1042具有CAN FD和故障保護(hù)功能CAN收發(fā)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《TCAN1042具有CAN FD和故障保護(hù)功能CAN收發(fā)器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 06-19 12:30 ?1次下載
    TCAN<b class='flag-5'>1042</b>具有<b class='flag-5'>CAN</b> FD和故障保護(hù)<b class='flag-5'>功能</b>的<b class='flag-5'>CAN</b><b class='flag-5'>收發(fā)器</b>數(shù)據(jù)表

    AS32A601車規(guī)級(jí)微控制器的應(yīng)用探索

    AS32A601將180 MHz RISC-V內(nèi)核、2 MB 嵌入式 Flash、4 路 CAN-FD以及完整的 ASIL-B 安全機(jī)制集成于單顆芯片,為國產(chǎn)車規(guī)MCU提供了可批量上車的工程樣本。本文結(jié)合AEC-Q100、ISO 26262與主流主機(jī)廠的技術(shù)要求,系統(tǒng)梳
    的頭像 發(fā)表于 11-18 14:42 ?1296次閱讀

    TCAN1042-Q1汽車類CAN收發(fā)器:設(shè)計(jì)與應(yīng)用全解析

    收發(fā)器則是CAN總線通信的關(guān)鍵組件,它負(fù)責(zé)將CAN控制器的數(shù)字信號(hào)轉(zhuǎn)換為適合在CAN總線上傳輸?shù)牟罘中盘?hào),以及將總線上的差分信號(hào)轉(zhuǎn)換為數(shù)字信
    的頭像 發(fā)表于 12-19 14:30 ?604次閱讀

    深入解析TCAN1042:具備CAN FD和故障保護(hù)功能CAN收發(fā)器

    深入解析TCAN1042:具備CAN FD和故障保護(hù)功能CAN收發(fā)器 在工業(yè)自動(dòng)化、汽車電子等眾多領(lǐng)域,
    的頭像 發(fā)表于 12-19 15:45 ?681次閱讀

    汽車類 CAN 收發(fā)器 TCAN1042-Q1 系列:設(shè)計(jì)與應(yīng)用全解析

    設(shè)備之間的數(shù)據(jù)傳輸。而 CAN 收發(fā)器則是實(shí)現(xiàn) CAN 總線通信的關(guān)鍵組件,它負(fù)責(zé)將微控制器的數(shù)字信號(hào)轉(zhuǎn)換為適合在
    的頭像 發(fā)表于 12-19 16:05 ?600次閱讀

    探索TJA1042高速CAN收發(fā)器:特性、應(yīng)用與設(shè)計(jì)要點(diǎn)

    Semiconductors TJA1042高速CAN收發(fā)器.pdf 一、TJA1042概述 TJA1042是第三代高速
    的頭像 發(fā)表于 12-24 16:45 ?885次閱讀

    探索TJA1042高速CAN收發(fā)器:特性、應(yīng)用與設(shè)計(jì)要點(diǎn)

    TJA1042是恩智浦半導(dǎo)體(NXP)推出的第三代高速CAN收發(fā)器,它為CAN協(xié)議控制器和物理雙線CA
    的頭像 發(fā)表于 12-29 15:05 ?964次閱讀

    TJA1042高速CAN收發(fā)器:汽車應(yīng)用的理想之選

    連接CAN協(xié)議控制器和物理CAN總線的關(guān)鍵接口。今天,我們就來詳細(xì)探討一下恩智浦(NXP)半導(dǎo)體推出的TJA1042高速CAN
    的頭像 發(fā)表于 01-15 17:55 ?1537次閱讀

    探秘TJA1042高速CAN收發(fā)器:設(shè)計(jì)與應(yīng)用指南

    、TJA1042概述 TJA1042作為第三代高速CAN收發(fā)器,為CAN協(xié)議控制器與物理雙線
    的頭像 發(fā)表于 01-28 16:50 ?1022次閱讀

    TCAN1042-Q1系列CAN收發(fā)器:汽車應(yīng)用的理想之選

    起著至關(guān)重要的作用。而CAN收發(fā)器則是實(shí)現(xiàn)CAN總線通信的關(guān)鍵組件,它負(fù)責(zé)將控制器的數(shù)字信號(hào)轉(zhuǎn)換為適合在
    的頭像 發(fā)表于 02-28 17:10 ?1071次閱讀

    TCAN1042-Q1系列CAN收發(fā)器:汽車應(yīng)用的理想之選

    控制起著至關(guān)重要的作用。而CAN收發(fā)器則是實(shí)現(xiàn)CAN總線通信的關(guān)鍵部件,它負(fù)責(zé)將控制器的數(shù)字信
    的頭像 發(fā)表于 03-30 12:05 ?265次閱讀
    略阳县| 黄石市| 唐海县| 白河县| 濉溪县| 孙吴县| 临清市| 元阳县| 临颍县| 嘉禾县| 江口县| 淳安县| 井研县| 靖宇县| 汉阴县| 伊金霍洛旗| 郎溪县| 健康| 黄冈市| 维西| 桃园市| 浦东新区| 天津市| 郓城县| 枣阳市| 漳州市| 体育| 池州市| 苏州市| 黄冈市| 曲沃县| 行唐县| 竹北市| 安乡县| 大理市| 武穴市| 张掖市| 县级市| 中阳县| 安吉县| 喀喇|