OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7907|回复: 10

CAN通讯扩展帧设置问题

[复制链接]

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-7-14
在线时间
12 小时
发表于 2016-12-16 16:01:21 | 显示全部楼层 |阅读模式
1金钱

设置发送函数中的       
        //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 的作用了,至今找不到问题在哪里?

最佳答案

查看完整内容[请看2#楼]

你的过滤器设置错了,当工作在1个32位的位屏蔽模式时,高29位表示 ID标志符,最低位无作用,bit1表示要接收数据帧或者遥控帧,bit2表示要接收扩展帧还是标准帧,如下图。所以你的在过滤器设置那里你的ID要左移3位,然后再加上bit1、bit2的选项
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2016-12-16 16:01:22 | 显示全部楼层
你的过滤器设置错了,当工作在1个32位的位屏蔽模式时,高29位表示 ID标志符,最低位无作用,bit1表示要接收数据帧或者遥控帧,bit2表示要接收扩展帧还是标准帧,如下图。所以你的在过滤器设置那里你的ID要左移3位,然后再加上bit1、bit2的选项 B3I0TP8RTVGNL[GCMKRHHJ6.png
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-7-14
在线时间
12 小时
 楼主| 发表于 2016-12-16 16:03:10 | 显示全部楼层
上位机发送指令的ID同样是0x120DC0DB,但是还是接收不到 数据
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-7-14
在线时间
12 小时
 楼主| 发表于 2016-12-16 16:17:30 | 显示全部楼层
原子哥求助,自顶
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-7-14
在线时间
12 小时
 楼主| 发表于 2016-12-16 16:34:58 | 显示全部楼层
不要沉了呀
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-12-17 17:07:48 | 显示全部楼层
最多29位ID,你搞出32位来了啊。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2016-12-18 09:23:24 | 显示全部楼层
正点原子 发表于 2016-12-17 17:07
最多29位ID,你搞出32位来了啊。

这刚好29位
回复

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2016-7-14
在线时间
12 小时
 楼主| 发表于 2016-12-19 09:14:07 | 显示全部楼层
正点原子 发表于 2016-12-17 17:07
最多29位ID,你搞出32位来了啊。

其实我没有超出29位,后来u我看了下寄存器,只是把我需要收到的ID左移三位,再加上对应的帧类型标识,总共加起来一起是32位
回复

使用道具 举报

32

主题

230

帖子

0

精华

高级会员

Rank: 4

积分
508
金钱
508
注册时间
2016-4-14
在线时间
113 小时
发表于 2017-4-12 09:43:27 | 显示全部楼层
Da Wen 发表于 2016-12-16 16:01
你的过滤器设置错了,当工作在1个32位的位屏蔽模式时,高29位表示 ID标志符,最低位无作用,bit1表示要接收 ...

大神这个CAN  ID怎么设置啊。左移三位看懂了。后面的没看懂。
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2017-4-12 09:56:27 | 显示全部楼层
Ldd69stm32 发表于 2017-4-12 09:43
大神这个CAN  ID怎么设置啊。左移三位看懂了。后面的没看懂。

bit1是决定你要接收的帧类型,遥控帧或者是数据帧
bit2是决定你要接收的是扩展帧还是标准帧。数据手册上面有写
回复

使用道具 举报

32

主题

230

帖子

0

精华

高级会员

Rank: 4

积分
508
金钱
508
注册时间
2016-4-14
在线时间
113 小时
发表于 2017-4-12 10:18:12 | 显示全部楼层
Da Wen 发表于 2017-4-12 09:56
bit1是决定你要接收的帧类型,遥控帧或者是数据帧
bit2是决定你要接收的是扩展帧还是标准帧。数据手册上 ...

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-22 04:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表