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条回答
嵌入白白白
1楼-- · 2019-08-23 03:46
正点原子 发表于 2016-12-17 17:07
最多29位ID,你搞出32位来了啊。

其实我没有超出29位,后来u我看了下寄存器,只是把我需要收到的ID左移三位,再加上对应的帧类型标识,总共加起来一起是32位
Ldd69stm32
2楼-- · 2019-08-23 05:14
Da Wen 发表于 2016-12-16 16:01
你的过滤器设置错了,当工作在1个32位的位屏蔽模式时,高29位表示 ID标志符,最低位无作用,bit1表示要接收 ...

大神这个CAN  ID怎么设置啊。左移三位看懂了。后面的没看懂。
Da Wen
3楼-- · 2019-08-23 08:25
 精彩回答 2  元偷偷看……
Ldd69stm32
4楼-- · 2019-08-23 08:46
Da Wen 发表于 2017-4-12 09:56
bit1是决定你要接收的帧类型,遥控帧或者是数据帧
bit2是决定你要接收的是扩展帧还是标准帧。数据手册上 ...

好的我尝试尝试。谢谢你啊

一周热门 更多>