CAN通讯扩展帧设置问题

2019-08-22 14:15发布


设置发送函数中的       
        //TxMessage.StdId=0x12;                        // 标准标识符
        TxMessage.ExtId=0x120DC0DB;                        // 设置扩展标示符
        TxMessage.IDE=CAN_Id_Extended;         // 扩展帧
        TxMessage.RTR=CAN_RTR_Data;                // 数据帧
后在设置
        CAN_FilterInitStructure.CAN_FilterNumber=0;        //过滤器0
        CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;         //屏蔽位模式
        CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;         //32位宽
        CAN_FilterInitStructure.CAN_FilterIdHigh=0x120D;        //32位ID
        CAN_FilterInitStructure.CAN_FilterIdLow=0xC0DB;
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xFFFF;//32位MASK
        CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xFFFF;
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//过滤器0关联到FIFO0
        CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//激活过滤器0

        CAN_FilterInit(&CAN_FilterInitStructure);                        //滤波器初始化
后上位机发送扩展ID为0x120DC0DB的数据指令给开发板,在我LCD液晶上显示不出接收到的数据,表明没有仲裁成功如果改为:
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK
        CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
则可以成功接收到数据,但是起不到屏蔽ID 的作用了,至今找不到问题在哪里?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
Da Wen
1楼-- · 2019-08-22 15:01
你的过滤器设置错了,当工作在1个32位的位屏蔽模式时,高29位表示 ID标志符,最低位无作用,bit1表示要接收数据帧或者遥控帧,bit2表示要接收扩展帧还是标准帧,如下图。所以你的在过滤器设置那里你的ID要左移3位,然后再加上bit1、bit2的选项 B3I0TP8RTVGNL[GCMKRHHJ6.png
嵌入白白白
2楼-- · 2019-08-22 16:23
上位机发送指令的ID同样是0x120DC0DB,但是还是接收不到 数据
嵌入白白白
3楼-- · 2019-08-22 19:01
原子哥求助,自顶
嵌入白白白
4楼-- · 2019-08-22 19:21
 精彩回答 2  元偷偷看……
正点原子
5楼-- · 2019-08-23 00:19
最多29位ID,你搞出32位来了啊。
Da Wen
6楼-- · 2019-08-23 00:42
正点原子 发表于 2016-12-17 17:07
最多29位ID,你搞出32位来了啊。

这刚好29位

一周热门 更多>