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.
您好!
我正在尝试创建 CAN 环回测试。 我更喜欢 CAN 内部回路。 本手册说明传输的消息被视为
接收报文 、如果通过接受过滤、则可以将其存储到报文对象中。
我的目标是通过 环回测试来测试我的代码中设置的验收滤波。 这是否可以通过内部回送测试来实现?
是的、您可以使用环回来检查接受过滤。
您好、感谢您的回复。 我昨天曾尝试过这种方法、因此我写了邮件。 它似乎不起作用。 不确定我会出现什么问题。
我已使用将控制器设置为回环模式:
canEnabableeloopback (canReg1、Internal_LBK);
在 Halcogen 中、已在 Transmsit 节点中设置消息14。
我已经将掩码设置为0x00000000、ID 设置为0x119、生成了代码。
我已发送邮件至:
CAN ID - 0x120
CAN 消息框编号- 14 (与传输相同、因为它是环回模式。
和数据位。
但它似乎接受消息、我可以通过回送看到接收消息。 我希望它拒绝回送消息。
这是预期的工作方式还是我在这里做任何错误的事?
请为接收使用不同的消息框。
如果 MSK[28:0]= 0x0000000、 则报文对象的标识符不用于验收滤波、该报文框可以接收 ID 不同的报文。
例如、Msg box1发送 ID = 119的数据
MSG box3发送 ID = 121的数据
MSG box5发送 ID = 123的数据
报文框2配置为接收数据、该对象的 MSK 为0x0000。 此消息框将从消息框1、3和5接收数据。
#define D_SIZE 8
uint8 TX_Data1[D_size]={1、2、3、4、5、6、7、8};//系统 RAM 中的发送缓冲器*
uint8 TX_DATA2[D_SIZE]={11、12、13、14、15、16、17、18};//系统 RAM 中的发送缓冲区*
uint8 TX_DATA3[D_SIZE]={21、22、23、24、25、26、27、28};//系统 RAM 中的发送缓冲区*
uint8 RX_Data1[D_SIZE]={0};//系统 RAM 中的接收缓冲区
uint8 RX_DATA2[D_SIZE]={0};//系统 RAM 中的接收缓冲区
uint8 RX_DATA3[D_SIZE]={0};//系统 RAM 中的接收缓冲区
uint32 CAN_Comp_Flag = 0xAA5555;
/*用户代码结束*/
int main (空)
{
/*用户代码开始(3)*/
/*初始化 CAN 1 */
_enable_IRQ_interrupt_();
canInit();
canEnabableeloopback (canREG1、Internal_LBK);
CAN1上的/*发送*/
canTransmit (canREG1、canMESSAGE_BOX1、TX_Data1);
/*等待 DMA 中断 ISR 设置标志*/
while (CAN_Comp_Flag!= 0x5555AAAA);
/*重置标志*/
CAN_Comp_Flag = 0xAA5555;
CAN1上的/*发送*/
canTransmit (canREG1、canMESSAGE_box3、TX_DATA2);
/*等待 DMA 中断 ISR 设置标志*/
while (CAN_Comp_Flag!= 0x5555AAAA);
/*重置标志*/
CAN_Comp_Flag = 0xAA5555;
CAN1上的/*发送*/
canTransmit (canREG1、canMESSAGE_BOX5、TX_DATA3);
/*永久运行*/
while (1);
/*用户代码结束*/
返回0;
}
/*用户代码开始(4)*/
void canMessageNotification (canbase_t *节点、uint32 MessageBox)
{
CAN_Comp_Flag = 0x5555AAAA;
if (node=canREG1)
{
canGetData (canREG1、canMESSAGE_BOX2、(uint8 *)&RX_Data1[0]);/*复制到 RAM */
}
}
非常感谢您的支持。 这对我帮助很大。
如果您的问题得到解答、请单击"已解决"、谢谢