找回密码
 立即注册
楼主: 421435178@qq.co

CAN数据发送求助大神 | 已解决

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2023-7-24 14:41:41 | 显示全部楼层
stc*** 发表于 2023-7-24 10:14
楼主这个程序是官方例程修改的,例程我没有修改我这个怎么一直1ms发送一次呢?定时器的值修改和计算器1000 ...

如果使用屠龙刀板子,将两路CAN的收发器都焊上,就可以进行收发通信了。
屠龙刀例程包里面“14-CAN1-CAN2总线标准帧扩展帧同时使用收发测试”这个例程可以直接烧录到板子上进行测试。
只开一路CAN控制器想自发自收是不行的,要同时打开两组CAN并将它们连在一起才可以进行通信。

点评

以下来至百度//,,,,,,,,,,,,,, 0:离线状态的退出过程是,软件对INRQ位进行置1随后清0后,一旦硬件检测到128次11位连续的隐性位,则退出离线状态 1:一旦硬件检测到128次11位连续的隐性位,则自动退出   发表于 2023-7-24 15:46
回复 支持 反对

使用道具 举报 送花

2

主题

13

回帖

82

积分

注册会员

积分
82
发表于 2023-7-24 15:57:35 来自手机 | 显示全部楼层
乘风飞扬 发表于 2023-7-24 14:41
如果使用屠龙刀板子,将两路CAN的收发器都焊上,就可以进行收发通信了。
屠龙刀例程包里面“14-CAN1-CAN2 ...

以下来至百度// 0:离线状态的退出过程是,软件对INRQ位进行置1随后清0后,一旦硬件检测到128次11位连续的隐性位,则退出离线状态 //
刚刚百度其它论坛的描述,如果按128次应答错误就重复发128次,实测一帧数据1ms左右数据串也只占定时器1000ms的四分之一,剩下来的四分之三时间应该进入空闲电平吧!
感谢飞扬的回答
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2023-7-24 17:02:32 | 显示全部楼层
stc*** 发表于 2023-7-24 15:57
以下来至百度// 0:离线状态的退出过程是,软件对INRQ位进行置1随后清0后,一旦硬件检测到128次11位连续 ...

STC CAN控制器是通过以下指令退出BUS-OFF状态:
  1. CANAR = MR;
  2. CANDR &= ~0x04;  //清除 Reset Mode, 从BUS-OFF状态退出
复制代码

检查一下你使用的程序,看都有哪些地方有进行BUS-OFF恢复的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2023-7-24 17:30:37 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:321
  • 最近打卡:2025-05-01 21:04:13
已绑定手机

21

主题

487

回帖

1027

积分

金牌会员

积分
1027
发表于 2023-8-8 09:24:35 | 显示全部楼层
乘风*** 发表于 2023-7-24 17:02
STC CAN控制器是通过以下指令退出BUS-OFF状态:

检查一下你使用的程序,看都有哪些地方有进行BUS-OFF恢 ...

你在两个发送指令中间加一个1ms的延时试试,先试试能否成功
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:321
  • 最近打卡:2025-05-01 21:04:13
已绑定手机

21

主题

487

回帖

1027

积分

金牌会员

积分
1027
发表于 2023-8-8 09:35:07 | 显示全部楼层
还有一个事情你要确认,接收端是否能及时处理接收的数据,如果第一条收到但是还没有处理完,第二条没有延时直接发送,接收端数据会冲掉的,你看看是不是这个原因,因为我的项目就遇到过,接收端我是用了两个数组保存的,接收中断如果发现接收数组1不是空的就直接存放到数组2里,如果同时接收到三个,就没办法解决了,这也是我比较困扰的地方,不知道其他朋友有没有好办法
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2023-8-8 10:48:00 | 显示全部楼层
lly*** 发表于 2023-8-8 09:35
还有一个事情你要确认,接收端是否能及时处理接收的数据,如果第一条收到但是还没有处理完,第二条没有延时 ...

CAN总线数据帧接收缓冲区有64字节,就算前面帧接收完没处理,新的帧也会收到缓冲区里,只要在缓冲区溢出之前读取就不会丢失。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:321
  • 最近打卡:2025-05-01 21:04:13
已绑定手机

21

主题

487

回帖

1027

积分

金牌会员

积分
1027
发表于 2023-8-10 21:08:43 | 显示全部楼层
乘风*** 发表于 2023-8-8 10:48
CAN总线数据帧接收缓冲区有64字节,就算前面帧接收完没处理,新的帧也会收到缓冲区里,只要在缓冲区溢出 ...

我CAN网络有8个模块,有一块是代替上位机接收其他7块CAN数据,并根据数据发送CAN指令让下位机执行,我用的是早期的官方CAN程序,看来我要抽时间看看新代码了
回复 支持 反对

使用道具 举报 送花

0

主题

2

回帖

24

积分

新手上路

积分
24
发表于 2023-8-22 11:03:38 | 显示全部楼层
例程CAN发送里使用WHILE(B_Can2Send);死等,如果CAN没接节点或者故障,单片机就会一直死等,建议 改成while(B_Can2Send && --t);
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2023-8-22 11:20:43 | 显示全部楼层
魔*** 发表于 2023-8-22 11:03
例程CAN发送里使用WHILE(B_Can2Send);死等,如果CAN没接节点或者故障,单片机就会一直死等,建议 改成wh ...

增加超时退出,故障中断里清除发送标志,这样会稳妥一些,谢谢提醒。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:36 , Processed in 0.141272 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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