找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2812|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

有關(guān)CAN 通訊擴(kuò)展幀和多ID問題求助

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:826942 發(fā)表于 2022-4-23 10:20 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
在學(xué)習(xí)CAN的時(shí)候發(fā)現(xiàn)這個(gè)例程是用標(biāo)準(zhǔn)幀、回環(huán)模式,但是我需要改成擴(kuò)展幀和多ID,看到手冊(cè)上說改IDE這個(gè)配置可以改成擴(kuò)展幀,就是這個(gè)代碼   CAN_TxMessages[0].IDE     = CAN_ID_STD;    //設(shè)置為標(biāo)準(zhǔn)幀ID 此處可以改成擴(kuò)展幀ID
但是除此之外還要怎么改?

  uint8_t i = 0;
    /* Init Transmit frame初始化發(fā)送幀*/
    CAN_TxMessages[0].StdId   = CAN_TX1_SID;   //標(biāo)準(zhǔn)識(shí)別符
    CAN_TxMessages[0].IDE     = CAN_ID_STD;    //設(shè)置為標(biāo)準(zhǔn)幀ID 此處可以改成擴(kuò)展幀ID
    CAN_TxMessages[0].RTR     = CAN_RTRQ_DATA; //  數(shù)據(jù)幀
    CAN_TxMessages[0].DLC     = CAN_TXDLC_8;   // 數(shù)據(jù)為8
    for(i=0;i<CAN_TXDLC_8;i++)
    {
       CAN_TxMessages[0].Data[i]=CAN_Tx_Frame1_Data[i];
    }
    CAN_TxMessages[1].ExtId   = CAN_TX2_EID;//擴(kuò)展幀標(biāo)識(shí)符
    CAN_TxMessages[1].IDE     = CAN_ID_EXT;//設(shè)置成擴(kuò)展幀
    CAN_TxMessages[1].RTR     = CAN_RTRQ_DATA;
    CAN_TxMessages[1].DLC     = CAN_TXDLC_8;
    for(i=0;i<CAN_TXDLC_8;i++)
    {
       CAN_TxMessages[1].Data[i]=CAN_Tx_Frame2_Data[i];
    }


這代碼是不是說CAN_TxMessages[0].為標(biāo)準(zhǔn)幀 而 CAN_TxMessages[1].為擴(kuò)展幀?

然后要是改擴(kuò)展幀的話過濾器試試不是也要改?
uint8_t Check_CANRxMessage(CanRxMessage* RxMessage)  //檢查CAN接收消息
{
        //   如果       接收消息是標(biāo)準(zhǔn)幀       與       接收消息不是發(fā)送CAN_TX1標(biāo)準(zhǔn)幀ID   或
        //              接收消息是擴(kuò)展幀       與       接收消息不是發(fā)送CAN_TX2擴(kuò)展幀ID
    if ( ((RxMessage->IDE == CAN_ID_STD) && (RxMessage->StdId != CAN_TX1_SID)) ||
         ((RxMessage->IDE == CAN_ID_EXT) && (RxMessage->ExtId != CAN_TX2_EID)) \
       ) return FAILED; //返回0
                //  接收消息數(shù)據(jù)幀不是發(fā)送的數(shù)據(jù)             返回0
    if ( RxMessage->RTR != CAN_RTRQ_DATA) return FAILED;
                //  接收消息數(shù)據(jù)長(zhǎng)度不是發(fā)送的數(shù)據(jù)長(zhǎng)度        返回0
    if ( RxMessage->DLC != CAN_TXDLC_8)   return FAILED;
    //  接收消息數(shù)據(jù)0位不是0x01         與  接收消息數(shù)據(jù)0位不是0x08       或
    if ( ( (RxMessage->Data[0] != 0x01) && (RxMessage->Data[0] != 0x08) ) ||\
         ( (RxMessage->Data[1] != 0x02) && (RxMessage->Data[1] != 0x07) ) ||\
         ( (RxMessage->Data[2] != 0x03) && (RxMessage->Data[2] != 0x06) ) ||\
         ( (RxMessage->Data[3] != 0x04) && (RxMessage->Data[3] != 0x05) ) ||\
         ( (RxMessage->Data[4] != 0x05) && (RxMessage->Data[4] != 0x04) ) ||\
         ( (RxMessage->Data[5] != 0x06) && (RxMessage->Data[5] != 0x03) ) ||\
         ( (RxMessage->Data[6] != 0x07) && (RxMessage->Data[6] != 0x02) ) ||\
         ( (RxMessage->Data[7] != 0x08) && (RxMessage->Data[7] != 0x01) ) \
        )  return FAILED;//返回0
    return PASSED;//返回1
}

就是這個(gè)函數(shù)嗎?
懇請(qǐng)大佬指點(diǎn)下 在這個(gè)例程上要改成擴(kuò)展幀的話要改那幾個(gè)代碼?


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:826942 發(fā)表于 2022-4-23 10:21 | 只看該作者
多ID的話該怎么配置?
回復(fù)

使用道具 舉報(bào)

板凳
ID:573999 發(fā)表于 2022-4-24 07:08 | 只看該作者
你說的是CAN接收過濾吧,庫(kù)函數(shù)說明就有
回復(fù)

使用道具 舉報(bào)

地板
ID:573999 發(fā)表于 2022-4-24 07:10 | 只看該作者
同樣接收也可以用用戶數(shù)據(jù)處理來做邏輯實(shí)現(xiàn)的,只不過處理的數(shù)據(jù)多點(diǎn)
回復(fù)

使用道具 舉報(bào)

5#
ID:1013883 發(fā)表于 2022-4-24 09:20 | 只看該作者
發(fā)送和接收都得是一樣的,發(fā)送寄存器是標(biāo)準(zhǔn)幀,接收寄存器也得是標(biāo)準(zhǔn)幀,反之同理
回復(fù)

使用道具 舉報(bào)

6#
ID:826942 發(fā)表于 2022-4-24 10:50 | 只看該作者
SDDQ 發(fā)表于 2022-4-24 09:20
發(fā)送和接收都得是一樣的,發(fā)送寄存器是標(biāo)準(zhǔn)幀,接收寄存器也得是標(biāo)準(zhǔn)幀,反之同理

我也是這樣改的 但是測(cè)試的話說失敗啦
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表