找回密码
 立即注册
查看: 502|回复: 7

为什么只能收到5帧 | CAN总线接收缓冲区 RXBUF 只有64字节,DLC=8的标准帧

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:488
  • 最近打卡:2025-05-01 11:54:45
已绑定手机

20

主题

293

回帖

4436

积分

论坛元老

积分
4436
发表于 2024-5-23 18:17:24 | 显示全部楼层 |阅读模式
我使用的屠龙刀例程中的代码,明明我发送了多帧,但是打印出来的最多只有5帧,在5帧以内正常,超过5帧就只显示5帧。

什么原因导致这种情况呢?下面是截图和代码。

屠龙刀CAN.rar (238.43 KB, 下载次数: 57)

截图202405231826124559.jpg 截图202405231825403361.jpg

回复

使用道具 举报 送花

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

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2024-5-23 18:40:15 | 显示全部楼层
我用你的例子测试,使用工具接收一次性可以收到10帧报文:
截图202405231838523786.jpg
如果你那里还是不行的话,将超时计数器改成16位/32位模式,增加超时计数试试:
截图202405231838316274.jpg
回复 支持 反对

使用道具 举报 送花

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

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2024-5-23 18:45:34 | 显示全部楼层
对了,忘了一件事,
你是使用CAN2接收CAN1发送的数据然后通过串口打印出来。
CAN总线接收缓冲区 RXBUF 只有64字节,

DLC=8的标准帧最多只能存放5帧,所以你收到5帧是正常的。
截图202405231843301142.jpg
所以要尽快将收到的报文从缓冲区里读取出来,才能继续接收后续发来的报文。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:488
  • 最近打卡:2025-05-01 11:54:45
已绑定手机

20

主题

293

回帖

4436

积分

论坛元老

积分
4436
发表于 2024-5-23 18:56:27 来自手机 | 显示全部楼层
乘风飞扬 发表于 2024-5-23 18:45
对了,忘了一件事,你是使用CAN2接收CAN1发送的数据然后通过串口打印出来。
CAN总线接收缓冲区 RXBUF 只有6 ...

收到
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:488
  • 最近打卡:2025-05-01 11:54:45
已绑定手机

20

主题

293

回帖

4436

积分

论坛元老

积分
4436
发表于 2024-5-25 19:07:50 | 显示全部楼层
乘风*** 发表于 2024-5-23 18:45
对了,忘了一件事,
你是使用CAN2接收CAN1发送的数据然后通过串口打印出来。
CAN总线接收缓冲区 RXBUF 只有 ...



截图202405251858211485.jpg 截图202405251905182206.jpg

n = CanReadMsg(CAN2_Rx);   这句不应该已经把FIFO中的数据已经存入CAN_DataDef CAN1_Rx[8]这个数组了吗?

n的大小不应该是由CAN_DataDef CAN1_Rx[]这个数组的大小决定吗?为什么还是不能超过FIFO的64字节,这还是有点懵。
回复 支持 反对

使用道具 举报 送花

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

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2024-5-27 09:12:58 | 显示全部楼层
马*** 发表于 2024-5-25 19:07
n = CanReadMsg(CAN2_Rx);   这句不应该已经把FIFO中的数据已经存入CAN_DataDef CAN1_Rx[8]这个数组 ...
CAN控制器自动将CAN总线上收到的报文存入FIFO,这是由硬件自动处理的,不需要占用CPU资源。
而CanReadMsg是通过软件将FIFO里面的数据读取到自定义的缓冲区里面,软件运行需要占用CPU资源,

如果从CAN总线一下子收到的报文数量超过FIFO上限,软件又没有及时从FIFO里面读取出来的话,
就会照成FIFO溢出,从而丢失报文。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-01 16:33:45

3

主题

50

回帖

1012

积分

金牌会员

积分
1012
发表于 2024-5-31 16:16:51 | 显示全部楼层
怎么我下载了你的程序却没有串口打印
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:488
  • 最近打卡:2025-05-01 11:54:45
已绑定手机

20

主题

293

回帖

4436

积分

论坛元老

积分
4436
发表于 2024-5-31 16:42:38 | 显示全部楼层
桃花*** 发表于 2024-5-31 16:16
怎么我下载了你的程序却没有串口打印

我用的串口3.0 3.1,CAN用的0.0 0.1 0.2 0.3。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 00:10 , Processed in 0.116415 second(s), 97 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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