为什么只能收到5帧 | CAN总线接收缓冲区 RXBUF 只有64字节,DLC=8的标准帧
我使用的屠龙刀例程中的代码,明明我发送了多帧,但是打印出来的最多只有5帧,在5帧以内正常,超过5帧就只显示5帧。什么原因导致这种情况呢?下面是截图和代码。
我用你的例子测试,使用工具接收一次性可以收到10帧报文:
如果你那里还是不行的话,将超时计数器改成16位/32位模式,增加超时计数试试:
对了,忘了一件事,
你是使用CAN2接收CAN1发送的数据然后通过串口打印出来。
CAN总线接收缓冲区 RXBUF 只有64字节,
DLC=8的标准帧最多只能存放5帧,所以你收到5帧是正常的。
所以要尽快将收到的报文从缓冲区里读取出来,才能继续接收后续发来的报文。
乘风飞扬 发表于 2024-5-23 18:45
对了,忘了一件事,你是使用CAN2接收CAN1发送的数据然后通过串口打印出来。
CAN总线接收缓冲区 RXBUF 只有6 ...
收到 乘风飞扬 发表于 2024-5-23 18:45
对了,忘了一件事,
你是使用CAN2接收CAN1发送的数据然后通过串口打印出来。
CAN总线接收缓冲区 RXBUF 只有 ...
n = CanReadMsg(CAN2_Rx); 这句不应该已经把FIFO中的数据已经存入CAN_DataDef CAN1_Rx这个数组了吗?
n的大小不应该是由CAN_DataDef CAN1_Rx[]这个数组的大小决定吗?为什么还是不能超过FIFO的64字节,这还是有点懵。
马永锋 发表于 2024-5-25 19:07
n = CanReadMsg(CAN2_Rx); 这句不应该已经把FIFO中的数据已经存入CAN_DataDef CAN1_Rx这个数组 ...CAN控制器自动将CAN总线上收到的报文存入FIFO,这是由硬件自动处理的,不需要占用CPU资源。
而CanReadMsg是通过软件将FIFO里面的数据读取到自定义的缓冲区里面,软件运行需要占用CPU资源,
如果从CAN总线一下子收到的报文数量超过FIFO上限,软件又没有及时从FIFO里面读取出来的话,
就会照成FIFO溢出,从而丢失报文。
怎么我下载了你的程序却没有串口打印 桃花飞舞 发表于 2024-5-31 16:16
怎么我下载了你的程序却没有串口打印
我用的串口3.0 3.1,CAN用的0.0 0.1 0.2 0.3。
页:
[1]