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

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-06-17 12:12:21
已绑定手机

40

主题

2060

回帖

7079

积分

论坛元老

积分
7079
发表于 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

回帖

84

积分

注册会员

积分
84
发表于 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
  • 打卡总天数:445
  • 最近打卡:2025-06-17 12:12:21
已绑定手机

40

主题

2060

回帖

7079

积分

论坛元老

积分
7079
发表于 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
  • 打卡总天数:100
  • 最近打卡:2025-06-17 08:13:13

733

主题

1万

回帖

1万

积分

管理员

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:359
  • 最近打卡:2025-06-16 18:59:30
已绑定手机

21

主题

488

回帖

859

积分

高级会员

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

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:359
  • 最近打卡:2025-06-16 18:59:30
已绑定手机

21

主题

488

回帖

859

积分

高级会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-06-17 12:12:21
已绑定手机

40

主题

2060

回帖

7079

积分

论坛元老

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:359
  • 最近打卡:2025-06-16 18:59:30
已绑定手机

21

主题

488

回帖

859

积分

高级会员

积分
859
发表于 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
  • 打卡总天数:445
  • 最近打卡:2025-06-17 12:12:21
已绑定手机

40

主题

2060

回帖

7079

积分

论坛元老

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

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 15:17 , Processed in 1.543793 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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