野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 32739|回复: 30

CAN接收不成功,设置了0x0000的掩码还是会把帧筛掉

[复制链接]
发表于 2014-1-13 16:25:10 | 显示全部楼层 |阅读模式
CAN发送成功了,就是接收不成功。
我用另外一个板子发送,并且在示波器上看到一个ACK的高峰确认,说明已经成功。
程序仿真时一直卡在while((CAN_MessagePending(CAN1,CAN_FIFO0) < 1));
说明是过滤器把帧筛掉了。可是:
CAN_FilterInitTypeDef  CAN_FilterInitStructure;
CAN_FilterInitStructure.CAN_FilterNumber=0;
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh= 0x0000;
CAN_FilterInitStructure.CAN_FilterIdLow= 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow= 0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0 ;
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
如上,我的过滤器设置为不过滤ID的啊,怎么还是被晒掉了呢?
回复

使用道具 举报

发表于 2014-1-13 16:26:53 | 显示全部楼层
can,还没学得,帮顶
回复 支持 反对

使用道具 举报

发表于 2014-1-13 16:42:38 | 显示全部楼层
接收到 ASK ,仅仅表示 发送成功,发送的数据没有被破坏。
不代表接收方正确接收。
回复 支持 反对

使用道具 举报

发表于 2014-1-13 16:45:26 | 显示全部楼层
楼主你还要区分使用的是标准帧还是扩展帧,IDE位和RTR位也要纳入标识符进行比较的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-13 16:50:22 | 显示全部楼层
红舒扬 发表于 2014-1-13 16:45
楼主你还要区分使用的是标准帧还是扩展帧,IDE位和RTR位也要纳入标识符进行比较的

我不比较不行吗? 我就是自己的两个板对发数据,不想使用掩码屏蔽还不行吗?我全部都不比较,过滤器直接放行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-13 16:52:26 | 显示全部楼层
恐发之际 发表于 2014-1-13 16:42
接收到 ASK ,仅仅表示 发送成功,发送的数据没有被破坏。
不代表接收方正确接收。

收到ACK说明我这板子收到了帧,但是没放到FIFO0里面去,说明被过滤器过滤掉了。但是我的过滤器设置掩码为0,全部位都不比较,怎么还是会过滤掉呢
回复 支持 反对

使用道具 举报

发表于 2014-1-13 16:53:23 | 显示全部楼层
yinhao 发表于 2014-1-13 16:50
我不比较不行吗? 我就是自己的两个板对发数据,不想使用掩码屏蔽还不行吗?我全部都不比较,过滤器直接放 ...

你尝试一下直接关闭过滤器,CAN_FilterActivation = DISABLE 这样应该就不比较了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-13 17:16:05 | 显示全部楼层
红舒扬 发表于 2014-1-13 16:53
你尝试一下直接关闭过滤器,CAN_FilterActivation = DISABLE 这样应该就不比较了

DISABLE了,把过滤器关了还是收不到帧!  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-13 17:23:54 | 显示全部楼层
求助火哥!
我严格按照例程,只把波特率改到250K,其他的都没改动。我让另外一个块板按例程的标识符来发送帧,那块板上显示发送成功(有ACK),但是ISO板上就是没反应(我在DEBUG模式下,一直在循环中,没进入接收中断)。
甚至我把过滤器DISABLE了,任然接收不到帧。这是怎么回事啊~
回复 支持 反对

使用道具 举报

发表于 2014-1-13 17:34:52 | 显示全部楼层
yinhao 发表于 2014-1-13 17:23
求助火哥!
我严格按照例程,只把波特率改到250K,其他的都没改动。我让另外一个块板按例程的标识符来发送 ...

先试试在原例程的基础上修改, 要注意两个板子程序的波特率都要改成相同的,其它相关参数也要两个程序匹配
回复 支持 反对

使用道具 举报

发表于 2014-1-13 17:35:42 | 显示全部楼层
楼主有没有开启中断呀?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-13 19:15:33 | 显示全部楼层
flyleaf 发表于 2014-1-13 17:34
先试试在原例程的基础上修改, 要注意两个板子程序的波特率都要改成相同的,其它相关参数也要两个程序匹配 ...

我ISO板发送 那块板接收能成功。表示波特率已经是对的。
那块板发送,ISO板接收时,那块板显示发送成功,但是ISO板没有进入接收中断。
是在原例程的基础上只修改了波特率,我DEBUG调试看的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-14 11:52:25 | 显示全部楼层
呼唤火哥~ 软件硬件都检查了,不知道怎么回事啊~  那边发送了帧,ISO给了ACK确认了之后就把帧丢了,没存进FIFO里。标示符都对的,甚至我把过滤器关了也是这样。急~
回复 支持 反对

使用道具 举报

发表于 2014-1-14 11:56:54 | 显示全部楼层
要不楼主先买一个USB-CAN的适配器,通过适配器先调试下,然后在用两个班子对调??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-14 12:51:03 | 显示全部楼层
flr 发表于 2014-1-14 11:56
要不楼主先买一个USB-CAN的适配器,通过适配器先调试下,然后在用两个班子对调??

CAN转USB适配器有什么用,USE口接电脑能分析CAN的报文吗?用什么软件?那还是不知道ISO为什么不能接收啊
回复 支持 反对

使用道具 举报

发表于 2014-1-14 12:53:46 | 显示全部楼层
跟原来的例程对比下就知道了呀
回复 支持 反对

使用道具 举报

发表于 2014-1-14 12:54:00 | 显示全部楼层
yinhao 发表于 2014-1-14 11:52
呼唤火哥~ 软件硬件都检查了,不知道怎么回事啊~  那边发送了帧,ISO给了ACK确认了之后就把帧丢了,没存进F ...

这个,还没搞过,不懂
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-14 12:57:05 | 显示全部楼层
郑倚云 发表于 2014-1-14 12:53
跟原来的例程对比下就知道了呀

就是用的例程,也是能发不能收。
例程的回环模式可以。主机发送也行,就是做从机接收不到。
接收的时候已经给出了ACK回应了,但是FIFO里就是没有报文,标识符是对的,把过滤器关了都不行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-14 12:59:44 | 显示全部楼层
风落小鱼 发表于 2014-1-14 12:54
这个,还没搞过,不懂

军师级别的高手啊~  求助您军师级别领域的朋友~
回复 支持 反对

使用道具 举报

发表于 2014-1-14 13:15:52 | 显示全部楼层
你另一块用的是什么板子?刚刚我重新测试了一下我们的例程,
ISO板子----旧的板子
ISO板子----ISO板子    之间的互相通讯都可以,无论是哪个作为从机或是主机。
用我们的例程时注意区分主从机的程序,测试时先给从机上电。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-14 13:25:44 | 显示全部楼层
flyleaf 发表于 2014-1-14 13:15
你另一块用的是什么板子?刚刚我重新测试了一下我们的例程,
ISO板子----旧的板子
ISO板子----ISO板子    ...

我另一块板子是MCF5282的芯片,是飞思卡尔的,工业级的芯片,比较贵。想用STM32做一块基于CAN通讯的扩展板。
用ISO板发送,我那块板接收是没问题的,说明线路、报文格式、标识符什么的都是对的。但是反过来ISO接收的时候,那边发送正常,并且ISO板已经给出了ACK回应,但是FIFO就是没有收到报文,把过滤器关了都不行。
百思不得其解~ 我昨晚琢磨了一晚软件设置,没发现什么异常,今天早上查了一早硬件线路,在接收时PB8引脚上用示波器看确实有波形。软件又没问题,硬件也正常,为什么接收不了呢!!!!~~~~~~
回复 支持 反对

使用道具 举报

发表于 2014-1-14 13:44:04 | 显示全部楼层
yinhao 发表于 2014-1-14 13:25
我另一块板子是MCF5282的芯片,是飞思卡尔的,工业级的芯片,比较贵。想用STM32做一块基于CAN通讯的扩展板 ...

那肯定是ISO的接收程序还没匹配好,我没有试过不使用过滤器,不知道是不是会直接转存入FIFO。
检查一下接收中断有没有使能,还有我们原来的程序里, 在中断服务函数是修改了标志位的,
main函数是根据这个标志位的状态跳出循环。不知道你有没有修改了这些代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-14 13:48:55 | 显示全部楼层
flyleaf 发表于 2014-1-14 13:44
那肯定是ISO的接收程序还没匹配好,我没有试过不使用过滤器,不知道是不是会直接转存入FIFO。
检查一下接 ...

只修改了波特率,其他的都没改,安装ISO CAN从机程序的标示符配置的我那块板,发送成功了,说明波特率标识符什么的都是对的,如果不对,收不到ACK的,是不会发送成功的。其他设置都没改,就是不进中断。不用中断,我用轮询,也还是检查不到FIFO有收到报文。
不懂啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这是为啥啊~~~~~~~~~~~~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2014-1-14 13:59:19 | 显示全部楼层
yinhao 发表于 2014-1-14 13:48
只修改了波特率,其他的都没改,安装ISO CAN从机程序的标示符配置的我那块板,发送成功了,说明波特率标识 ...

真的很奇怪,搞不懂
回复 支持 反对

使用道具 举报

发表于 2014-1-14 14:17:57 | 显示全部楼层
yinhao 发表于 2014-1-14 12:51
CAN转USB适配器有什么用,USE口接电脑能分析CAN的报文吗?用什么软件?那还是不知道ISO为什么不能接收啊

可以分析CAN的报文 我之前调试的时候用的是吉阳光电 他们公司的产品 当然你也可以不用他们的产品 他们网站上有USB-CAN的驱动、资料等
你先可以把软件下载下来看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-14 19:10:33 | 显示全部楼层
问题已经解决了啊~~
但是不知道怎么回事,突然就好了! 就用昨晚用的程序也是能通的!
这是撞邪了么?
回复 支持 反对

使用道具 举报

发表于 2014-1-14 21:39:38 | 显示全部楼层
yinhao 发表于 2014-1-14 19:10
问题已经解决了啊~~
但是不知道怎么回事,突然就好了! 就用昨晚用的程序也是能通的!
这是撞邪了么?:d ...

。。。你修改了什么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-15 08:10:00 | 显示全部楼层
flyleaf 发表于 2014-1-14 21:39
。。。你修改了什么?

什么都没改~~~   用回DEMO程序都可以了,我觉得是硬件上的问题,哪个芯片之前没有正常工作,也没道理啊,能发不能收。哎,反正就是突然好了,解释不了。
回复 支持 反对

使用道具 举报

发表于 2014-1-15 23:51:09 | 显示全部楼层
yinhao 发表于 2014-1-15 08:10
什么都没改~~~   用回DEMO程序都可以了,我觉得是硬件上的问题,哪个芯片之前没有正常工作,也没道理啊, ...

不会是接触不良吧。。。
回复 支持 反对

使用道具 举报

发表于 2014-1-31 00:11:19 | 显示全部楼层
yinhao 发表于 2014-1-15 08:10
什么都没改~~~   用回DEMO程序都可以了,我觉得是硬件上的问题,哪个芯片之前没有正常工作,也没道理啊, ...

难道是没有接 120欧的电阻?或者电阻精度比较低?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-7 10:21:17 | 显示全部楼层
房宜楠 发表于 2014-1-31 00:11
难道是没有接 120欧的电阻?或者电阻精度比较低?

不可能! 我相信ISO的品质!
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 13:52 , Processed in 0.036775 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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