OpenEdv-开源电子网

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

CAN边发边收问题

[复制链接]

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
发表于 2014-2-11 16:37:13 | 显示全部楼层 |阅读模式
想请教原子哥,CAN可以边发边收么?我用两块板做CAN通讯。我用一个板发送,一个板接收没有问题。但是当我在程序上同时发送和接收,这时候就不能接收到数据了。
我是用中断接收数据的。当我在主程序里加上 Can_Send_Msg(sendbuf,8);//发送8个字节这条程序时就不能进入中断了。




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-11 22:25:04 | 显示全部楼层
回复【楼主位】648342243:
---------------------------------
CAN是半双工.所以不能边发边收.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2014-2-12 10:20:43 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
哦哦,那我两块板子要相互通信,要怎样才能发送数据,又能接收到数据呢?中断发送和中断接收可以么?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-12 11:35:56 | 显示全部楼层
回复【3楼】648342243:
---------------------------------
是双工,只是你要分时间用罢了
A发的时候,B就不要发.
等总线空闲了,B再发.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2014-2-12 15:22:27 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
怎样能判断总线空闲了呢?没有收到数据视为空闲么?
if(Can_Msg_Pend(0)==0)
{
Can_Send_Msg(sendbuf,8);  //发送8个字节
}
但是这样写不行。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-13 00:47:17 | 显示全部楼层
回复【5楼】648342243:
---------------------------------
当然不行,CAN总线有仲裁机制的。
会自动判断总线是否空闲。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2014-2-13 10:13:33 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
那怎样才知道此时总线是空闲的还是不空闲的?或者说怎样让A发送的时候B不发送?我刚学CAN,有好多的没琢磨透,希望原子哥教教。当A发送的时候,总线不空闲,此时B中断接收,如果这时候B也发送,是不是就会发送不成功,而且会影响A发送成功或者B接收成功?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-13 11:58:08 | 显示全部楼层
看这个资料.

can入门教程.pdf

1.82 MB, 下载次数: 142

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2014-2-18 10:18:04 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
原子哥,我看了两天的入门教程和参考手册,好像说CAN硬件会自动检测到总线是否空闲是吧?一旦检测到总线空闲就会发送数据,可是这样A,B两块板都会发送数据,怎么让A,B两块板发送数据分开来呢?小弟愚笨,还是没能看到关键,还望原子哥能给我指出来。谢谢了!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-2-18 14:42:34 | 显示全部楼层
回复【9楼】648342243:
---------------------------------
比如:
A,B,你同时发数据.
A的ID优先级比B高.
那么开始会竞争总线,结果B败下阵来...
这个时候A完全占有总线,A发送数据
等待A发送完成,总线就是空闲状态了.
这个时候B就会去发送数据.

这样A,B不就相安无事的发完了么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2013-5-2
在线时间
4 小时
 楼主| 发表于 2014-2-19 10:41:15 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
哦哦,谢谢原子哥!我一开始以为优先级的竞争只是在同一侧发生。研究资料还是不够仔细!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-6 13:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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