大家好、
客户有问题需要您的帮助:
配置为 CAN 标准帧过滤,如图所示,修改了 main 函数的 can_setupMessageObject()函数,但使用 CAN 工具多次发送消息,尝试了所有类型的 ID, 然后可以接收消息(LED1将闪烁)、检查寄存器、但 MSK 的值未修改。
我最初的目的是仅接收具有0x607 ID 的消息、并且其他消息被过滤。 如何修改配置?
谢谢。此致、
本
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 标准帧过滤,如图所示,修改了 main 函数的 can_setupMessageObject()函数,但使用 CAN 工具多次发送消息,尝试了所有类型的 ID, 然后可以接收消息(LED1将闪烁)、检查寄存器、但 MSK 的值未修改。
我最初的目的是仅接收具有0x607 ID 的消息、并且其他消息被过滤。 如何修改配置?
谢谢。此致、
本
尊敬的 Ben:
对不起 Ben ,我看不到一个图,但不管怎样,在函数 CAN_setupMessageObject()中,一定要使用标志 CAN_MSG_OBJ_USE_ID_FILTER 作为标准 ID。 将消息 ID 设置为0x607、将屏蔽值设置为0x1FFFFFFF。 这应该只允许接收 ID 为0x607的消息。 掩码位位置的"0"值将忽略该位置的屏蔽、但"1"表示该位位置用于滤波。
关于屏蔽值的一个重要说明是它存储在 CAN_IFxMSK 寄存器中并被放置在位[28:0]中。 如果使用标准 ID、则掩码信息将使用11个最高有效位[28:18]。 为了进行说明、假设您希望允许接收从0x600到0x60F 的消息 ID、屏蔽值应为0x1FC3FFFF。 对于标准 ID、CAN_IFxMSK 掩码位置[28:18]中的二进制值为111 1111 0000 (忽略消息 ID 的4个 LSB)、但当存储在屏蔽位位置[28:0]时、 掩码 值 将变为 0x1FC3FFFF。
希望这对您有所帮助。
此致、
约瑟夫