OpenEdv-开源电子网

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

关于两个板子的CAN通信的疑问!

[复制链接]

19

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2015-2-12
在线时间
40 小时
发表于 2015-10-20 19:07:44 | 显示全部楼层 |阅读模式
5金钱
最近一直在调CAN通信正常模式下的两块电路板之间的数据收发。两块电路板都是用的STM32F103C8T6 + TJA1050  。
两块板子的LOOPBACK模式均调试通过,现在卡在正常模式下无法稳定的正确收发数据。今天碰到了代码中发送数据0X11,0X22,但是查看KEIL里面的CAN发送的数据不知道为何多出来一个0X20,而且总是在第五个数据的地方出现,但是接收到的数据又是只有0X11,0X22,这是为什么?附图如下:

这个是发送端看到的发送数据


这个是发送端的发送数据代码



这个是接收端接收到的数据



请教各位这个问题是怎么回事呢?

还有问题如:
1.断开两块电路板的CANH和CANL连接,接收端绿灯依然常亮(接收端收到数据并判断正确之后绿灯常亮,否则红灯闪烁),这个如何解释?
2.发送端和接收端上电顺序对结果有没有影响?
3.两块电路板需要共地吗?


最后,希望能有高人指点指点我!!!

最佳答案

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

1. 固件库里就是无论里定义了几个发送变量,这8个数据都是投递到can邮箱的,然后根据DLC的大小来判断正确发送的数据(硬件自己判断),因为你声明TxMessage没有初始化,所以这个20就是栈里默认的数字,不过不影响实际发送和接收的。如果你不习惯,在声明之后用这个 memset((char *)&TxMessage, 0, sizeof(TxMessage));  2.你这个是逻辑问题,接收到数据判断正确后绿灯常亮,反之没有数据接收也是绿灯啊,你断开相当于没 ...
从不脑残粉,也不跟风黑。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-10-20 19:07:45 | 显示全部楼层
1.


固件库里就是无论里定义了几个发送变量,这8个数据都是投递到can邮箱的,然后根据DLC的大小来判断正确发送的数据(硬件自己判断),因为你声明TxMessage没有初始化,所以这个20就是栈里默认的数字,不过不影响实际发送和接收的。如果你不习惯,在声明之后用这个
memset((char *)&TxMessage, 0, sizeof(TxMessage)); 

2.你这个是逻辑问题,接收到数据判断正确后绿灯常亮,反之没有数据接收也是绿灯啊,你断开相当于没有数据,肯定不会改变现有状态啊,也就是绿灯还是绿,红灯还是红。

3. 如果是轮询模式,且设计合理(不会因为一次发送失败而造成程序堵塞,或者影响第二次发送),没有影响。
   如果是线性模式,接收端要先上电。

4.不清楚
回复

使用道具 举报

19

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2015-2-12
在线时间
40 小时
 楼主| 发表于 2015-10-20 20:09:49 | 显示全部楼层
回复【2楼】zc123:
---------------------------------
感谢您的解答。
根据您的解答,第一个问题我应该是可以解决的了。
2.当我刚下载好接收端程序的时候,按您的说法就是处于没有接收数据的状态吧,那为什么绿灯也不亮,红灯也不亮呢?
3.您说的轮询模式应该就是很多例程里面所说的查询方法吧?线性模式的话就是中断方法?
4.这个共地的问题我也还在找资料看。

再次感谢您的答疑解惑。
从不脑残粉,也不跟风黑。
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-10-20 20:42:21 | 显示全部楼层
回复【3楼】维拉帕克:
---------------------------------
2.因为你这个红还有绿是执行一次才激活的,"不会改变现有状态"这句话才是核心,你默认是都不亮的,那当然是不亮的啊,但执行了一次接收后,就只有红和绿两种状态了啊。

3.和查询或者中断无关
   轮询指的是CAN用来查询下位机状态的,所以会每隔一段时间发送相同的包,下位机回复处理
   线性就是CAN的数据没有规律,且发送的包如果没有回复,会对后续的接收有影响
   如果数学表达的话:轮询 1-2-3-4-1-2-3-4-1-2-3-4......
                              线性 1-2-3-4-5......
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-10-20 22:00:04 | 显示全部楼层
can通信是差分传输,是没有要求共地的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

19

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2015-2-12
在线时间
40 小时
 楼主| 发表于 2015-10-21 08:32:09 | 显示全部楼层
回复【4楼】zc123:
---------------------------------
非常感谢。几个疑问都清楚了。多谢多谢
从不脑残粉,也不跟风黑。
回复

使用道具 举报

19

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2015-2-12
在线时间
40 小时
 楼主| 发表于 2015-10-22 16:12:17 | 显示全部楼层
回复【4楼】 zc123 :
---------------------------------

不好意思 又得麻烦您帮帮我了。

我现在是循环发送固定的数据11 22 33给另一块板子。但是通过keil调试时发现发送数据并不是一直发送11 22 33,而且另一块板子接收的数据也不全是11 22 33
发送端CAN_TransmitMailbox中的数据如下:


发送端代码是这样的:


其中的res=can_send_msg()语句就是发送数据的函数,can_send_msg函数定义如下:


接收端邮箱中数据如下:


麻烦您帮我看看这是什么问题吧,感谢!
从不脑残粉,也不跟风黑。
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2015-10-23 09:58:23 | 显示全部楼层
双CAN是直连的,还是接入到了CAN局域网络测试的,如果是直连的,这个我解释不了!
如果是接收的局域网络里,倒是好理解:
CAN通讯采用数据块编码的方式,可使不同的节点接收到相同的数据,然后再根据各节点内CAN配置选择处理还是丢弃该信息。
也就是接入CAN网络的话,每一个CAN节点都会接收到网络中的所有数据,然后根据需求处理需要的数据。
我之前写的 http://www.cnblogs.com/zc110747/p/4868449.html, 也许有帮助
回复

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2015-3-9
在线时间
27 小时
发表于 2016-1-20 23:33:25 | 显示全部楼层
维拉帕克 发表于 2015-10-22 16:12
回复【4楼】 zc123 :
---------------------------------

楼主,请问你的这个调试窗口在哪里找到的,我用keil5没有
回复

使用道具 举报

0

主题

63

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3867
金钱
3867
注册时间
2015-8-26
在线时间
285 小时
发表于 2016-1-21 09:13:48 | 显示全部楼层
借鉴一下调试经验
回复

使用道具 举报

1

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2015-12-10
在线时间
49 小时
发表于 2016-1-25 20:40:21 | 显示全部楼层
zc123 发表于 2015-10-23 09:58
双CAN是直连的,还是接入到了CAN局域网络测试的,如果是直连的,这个我解释不了!
如果是接收的局域网络里 ...

我现在遇到的问题是,环回模式正常(103mini和一个407最小系统),但连起来不行,我用的是3.3V的can驱动器模块VP230.
打算先到单位找台手持示波器看看,俺是在家里鼓捣。
逆水行舟不进则退
回复

使用道具 举报

18

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2015-6-21
在线时间
34 小时
发表于 2016-3-29 21:33:44 | 显示全部楼层
zc123 发表于 2015-10-23 09:58
双CAN是直连的,还是接入到了CAN局域网络测试的,如果是直连的,这个我解释不了!
如果是接收的局域网络里 ...

兄弟  想问下 设置为标识符列表模式后  can-filterid  和can-filtermaskid  如何配置 ,麻烦交下,谢谢
努力吧,骚年
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2016-3-30 15:14:34 | 显示全部楼层
好好学 发表于 2016-3-29 21:33
兄弟  想问下 设置为标识符列表模式后  can-filterid  和can-filtermaskid  如何配置 ,麻烦交下,谢谢

http://www.openedv.com/posts/list/20666.htm
这篇文章讲的很详细了
多过滤组是并联的,通过一个即可。
回复

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-10-2
在线时间
9 小时
发表于 2016-4-19 21:48:17 | 显示全部楼层
直连怎么办呢?
加油,加油
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2019-5-4
在线时间
12 小时
发表于 2019-5-5 17:52:28 | 显示全部楼层
gelin_ss 发表于 2016-1-25 20:40
我现在遇到的问题是,环回模式正常(103mini和一个407最小系统),但连起来不行,我用的是3.3V的can驱动 ...

请问你这个问题解决了吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 21:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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