STM32F4xx CAN 滤波器配置
STM32F4xx CAN Filter Configuration
我是参考参考手册(bxCAN)中的信息写的。
我正在尝试了解 CAN
过滤器配置的工作原理,需要您的帮助来检查我是否理解正确。
特别是filter ID和filter mask ID的配置。
我看了 stdPeriphLib
和参考之后。手册,我认为了解会发生什么,但我不确定。
FilterIdHigh/Low:
FilterIdHigh/Low 是 CAN Controller
二进制与 FilterIdMask
后的比较值吗?
例如:
CAN 控制器接收消息 --> CAN_Rx_
CAN Controller makes a binary AND with the FilterIdMask -->
CAN_Rx_ArbitrationField & FilterIdMask = Result
CAN Controller
将结果与 FilterId 进行比较。
如果匹配 CAN Controller
将 CAN_Rx_ 消息放入指定的 FIFO,否则将丢弃该消息。
不是吗?
谢谢。
首先收到的ID与Mask进行AND运算,去除不需要的位,然后与ID进行比较。如果它们匹配,则只接受消息。
if((CAN_RX_ID & CAN_FILTER_MASK) == (CAN_FILTER_ID & CAN_FILTER_MASK))
{
Copy Data in Buffer
}
else
{
Discard the message
}
请注意,仅比较掩码中设置的那些位。
比如说,您只想接受 ID 为 0x18EBFAB0 的一帧。在这种情况下,您会将 Filter ID 设置为 0x18EBFAB0,将 Mask 设置为 0x1FFFFFFF。
当具有任何其他 ID 的消息到达时,它将不满足要求的条件并且将被忽略。
如果收到 ID 为 0x18EBF9B0 的消息,
(0x18EBF9B0 & 0x1FFFFFFF) != (0x18EBFAB0 & 0x1FFFFFFF)
消息将被忽略
如果您想接受 ID 0x120 到 0x127 之间的任何消息。
在这种情况下,将 Mask 设置为 0x1F0,将 Filter ID 设置为 0x120。这样,ID 的最后 4 位将被忽略,因为它们被设置为 0。
当收到 ID 为 0x123 的消息时,
(0x123 & 0x1F0) == (0x120 & 0x1F0)
消息将被接受。
我是参考参考手册(bxCAN)中的信息写的。
我正在尝试了解 CAN
过滤器配置的工作原理,需要您的帮助来检查我是否理解正确。
特别是filter ID和filter mask ID的配置。
我看了 stdPeriphLib
和参考之后。手册,我认为了解会发生什么,但我不确定。
FilterIdHigh/Low:
FilterIdHigh/Low 是 CAN Controller
二进制与 FilterIdMask
后的比较值吗?
例如: CAN 控制器接收消息 --> CAN_Rx_
CAN Controller makes a binary AND with the FilterIdMask -->
CAN_Rx_ArbitrationField & FilterIdMask = Result
CAN Controller
将结果与 FilterId 进行比较。
如果匹配 CAN Controller
将 CAN_Rx_ 消息放入指定的 FIFO,否则将丢弃该消息。
不是吗?
谢谢。
首先收到的ID与Mask进行AND运算,去除不需要的位,然后与ID进行比较。如果它们匹配,则只接受消息。
if((CAN_RX_ID & CAN_FILTER_MASK) == (CAN_FILTER_ID & CAN_FILTER_MASK))
{
Copy Data in Buffer
}
else
{
Discard the message
}
请注意,仅比较掩码中设置的那些位。
比如说,您只想接受 ID 为 0x18EBFAB0 的一帧。在这种情况下,您会将 Filter ID 设置为 0x18EBFAB0,将 Mask 设置为 0x1FFFFFFF。 当具有任何其他 ID 的消息到达时,它将不满足要求的条件并且将被忽略。 如果收到 ID 为 0x18EBF9B0 的消息,
(0x18EBF9B0 & 0x1FFFFFFF) != (0x18EBFAB0 & 0x1FFFFFFF)
消息将被忽略
如果您想接受 ID 0x120 到 0x127 之间的任何消息。 在这种情况下,将 Mask 设置为 0x1F0,将 Filter ID 设置为 0x120。这样,ID 的最后 4 位将被忽略,因为它们被设置为 0。 当收到 ID 为 0x123 的消息时,
(0x123 & 0x1F0) == (0x120 & 0x1F0)
消息将被接受。