金牌会员
 
- 积分
- 1194
- 金钱
- 1194
- 注册时间
- 2017-8-31
- 在线时间
- 295 小时
|
1金钱
我用两台单片机进行CAN通信试验,收发都成功了,但发现了一个问题,设置的过滤器id为00和01,结果另一台单片机发送ID
StdId无论改为什么这台单片机都能收到消息,怎么回事?难道双节点通信不需要用ID标识符过滤消息?
这是我的can过滤器设置:
void CAN1_Config16BitFilter(uint16_t id1, uint16_t id2)
{
CAN_FilterInitTypeDef CAN_FilterInitStructure;
uint16_t mask = 0xFFFF;
CAN_FilterInitStructure.CAN_FilterNumber = 1;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;//IDÄ£ê½
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_16bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = (id1 << 5);
CAN_FilterInitStructure.CAN_FilterIdLow = (id2 << 5);
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = (mask << 5);
CAN_FilterInitStructure.CAN_FilterMaskIdLow = (mask << 5);
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0; //FIFO0
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
}
|
最佳答案
查看完整内容[请看2#楼]
我找到原因了,我发送函数拓展ID和标准ID设置反了,导致单片机以拓展帧的方式过滤我的发送帧
if((id & 0x7FF) == 0x7FF)
{
TxMessage.IDE = CAN_ID_EXT; //拓展ID
}
else
{
TxMessage.IDE = CAN_ID_STD; //标准ID
}
|