This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

有关tms320f28609 can过滤器设置问题

假设标准帧模式下,只接收ID为0x12的消息,应该如何设置?

我的设置如下,但是都被屏蔽了,

void CAN_Rx_Config(void)//接收配置函数,程序中相关备注
{
struct ECAN_REGS ECanaShadow;

//1.关闭邮箱
ECanaShadow.CANME.all = ECanaRegs->CANME.all;
ECanaShadow.CANME.bit.ME1 = 0;//不使能邮箱1
// ECanaShadow.CANME.bit.ME31 = 0;//不使能邮箱31
ECanaRegs->CANME.all = ECanaShadow.CANME.all;

//邮箱1相关配置
ECanaMboxes->MBOX1.MSGCTRL.bit.DLC = 8;//配置数据长度,应该是没意义的;
ECanaMboxes->MBOX1.MSGID.all |= (uint32_t)(0x12) << 18;//设置接收消息的有效ID
ECanaMboxes->MBOX1.MSGID.bit.AME = 1;//屏蔽使能位,如果需要使用屏蔽,必须将该位置1
ECanaMboxes->MBOX1.MSGID.bit.IDE = CAN_ID_STD;
// ECanaLAMRegs->LAM1.all = (uint32_t)0xFFFFFFFF;
/// ECanaLAMRegs->LAM1.all = 0x1FF3FFFF;//
ECanaLAMRegs->LAM1.all = (uint32_t)0x00000000;//
// ECanaLAMRegs->LAM1.bit.LAM_L = 0xFFFF;

ECanaLAMRegs->LAM1.bit.LAMI = 1;

//邮箱方向
ECanaShadow.CANMD.all = ECanaRegs->CANMD.all;
ECanaShadow.CANMD.bit.MD1 = 1;
ECanaRegs->CANMD.all = ECanaShadow.CANMD.all;

//使能邮箱
ECanaShadow.CANME.all = ECanaRegs->CANME.all;
ECanaShadow.CANME.bit.ME1 = 1;//使能邮箱1
ECanaRegs->CANME.all = ECanaShadow.CANME.all;
}

新手,求指教,谢谢了

  • 没有搞过这个,支持下。
  • 您可以参考一下下面的代码

    void CAN1_Config2Filter(uint16_t Id1, uint16_t Id2)
    
    {
    
              tCANMsgObject l_RxCANMessage;
    
              l_RxCANMessage.ui32MsgID = Id1;
              l_RxCANMessage.ui32MsgIDMask = 0xFFFFFFFF;
              l_RxCANMessage.ui32Flags = MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER;
              l_RxCANMessage.ui32MsgLen = 8;
    
              ROM_CANMessageSet(CAN1_BASE, 2, &l_RxCANMessage, MSG_OBJ_TYPE_RX);
    
              l_RxCANMessage.ui32MsgID = Id2;
              l_RxCANMessage.ui32MsgIDMask = 0xFFFFFFFF;
              l_RxCANMessage.ui32Flags = MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER;
              l_RxCANMessage.ui32MsgLen = 8;
    
              ROM_CANMessageSet(CAN1_BASE, 3, &l_RxCANMessage, MSG_OBJ_TYPE_RX);
    
    }