STM32F4xx CAN过滤器配置

时间:2016-10-31 10:08:55

标签: can-bus stm32f4

我参考参考手册(bxCAN)中的信息写作。

我正在尝试了解CAN过滤器配置的工作原理,需要您的帮助来检查我是否正确理解它。

特别是过滤器ID和过滤器掩码ID的配置。

在我看一下stdPeriphLib和参考之后。手册,我认为在了解会发生什么,但我不确定。

FilterIdHigh /低:

FilterIdHigh / Low是二元AND与CAN Controller之后FilterIdMask的比较值吗?

e.g:     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,否则它将丢弃该消息。

不是吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

首先接收到的ID与掩码进行AND运算,以删除不需要的位,然后与ID进行比较。如果匹配,则只接受消息。

if((CAN_RX_ID & CAN_FILTER_MASK) == (CAN_FILTER_ID & CAN_FILTER_MASK))
{
  Copy Data in Buffer
}
else
{
  Discard the message
}

请注意,只比较Mask中设置的那些位。

假设您只想接受一个I​​D为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)

将接受消息。