张三丰 发表于 2025-7-30 11:32:18

CAN接收问题求助

我使用的是STC32G8K64这款芯片,在can接收数据时,4位帧ID,从右到左顺序,只要第三位及以上有数,就无法接收到数据,如4位帧ID:00 01 00 00,只要这位有数就无法接收正确数据,00 00 xx xx, xx这两位是什么数都能正常接收数据。用例程STC32G-DEMO-CODE里的50-CAN总线扩展帧收发测试也是一样的问题。

国芯人工智能 发表于 2025-7-30 11:33:00

尊敬的用户,您好!

感谢您对我们产品的关注与使用。关于您在使用STC32G8K64芯片进行CAN通信时遇到的接收问题,我们非常重视,并已对相关情况进行分析。

根据您的描述,您在使用4位帧ID(即标准帧)时,当第三位及以后的位存在非零值时,无法正确接收数据;而前两位为0的情况下,能够正常接收。同时,您提到使用官方例程“50-CAN总线扩展帧收发测试”也出现相同问题。

经过初步排查和分析,可能的原因如下:

1. 帧ID配置错误
   在CAN通信中,帧ID的配置方式对通信结果有直接影响。STC32G8K系列支持标准帧(11位)和扩展帧(29位),但部分型号可能默认使用标准帧模式。若您使用的是标准帧(11位),则帧ID应为11位长度。若误将4位作为帧ID输入,可能导致解析异常。

2. 滤波器配置不当
   CAN控制器通常通过滤波器匹配接收到的帧ID。如果滤波器设置不正确或未正确启用,可能导致某些帧ID无法被识别。建议检查滤波器寄存器配置,确保其与目标帧ID匹配。

3. 帧ID位序问题
   STC32G系列的CAN控制器在处理帧ID时,可能存在位序(高位优先或低位优先)的问题。例如,若您将帧ID按从右到左的方式写入寄存器,而控制器实际按照从左到右的方式解析,可能导致帧ID错位,从而导致无法正确接收。

4. 中断或接收缓冲区处理问题
   若未正确配置接收中断或未及时读取接收缓冲区,可能导致数据丢失或覆盖。建议检查接收中断服务程序是否正确实现,以及接收缓冲区是否被正确读取。

5. 硬件连接或波特率设置问题
   请确认CAN总线的物理层连接是否稳定,包括终端电阻、线路阻抗等。同时,检查波特率设置是否与主控设备一致,避免因通信速率不匹配导致数据丢失。

建议您采取以下步骤进行排查:
检查CAN控制器的工作模式(标准帧/扩展帧)是否与实际应用一致;
确认帧ID的位序是否符合控制器要求;
验证滤波器配置是否正确;
检查接收中断和缓冲区处理逻辑;
使用示波器或CAN分析仪观察实际通信波形,确认数据是否正常发送和接收。

如您仍无法解决问题,欢迎提供更详细的代码片段、配置寄存器截图或通信抓包数据,我们将进一步协助您定位问题。

感谢您的理解与支持!如需进一步帮助,请随时联系我们的技术支持团队。

祝工作顺利!

[本文内容由国芯人工智能辅助生成,仅供参考]

张三丰 发表于 2025-7-30 11:35:28

我使用的是扩展帧

王昱顺 发表于 2025-7-30 12:41:44

你底下的id格式使用的是左对齐,有可能是这个问题?
可以使用官方的can收发工具试试,can部分都在哪个工具上测试过的

张三丰 发表于 2025-7-30 13:53:38

你好,使用的是

张三丰 发表于 2025-7-30 14:07:29

程序是咱们官方的例程STC32G-DEMO-CODE,中的“50-CAN总线扩展帧收发测试”。帧ID 00 00 00 00时,是下图中的0-3条,发送一个就立刻转发一条。当帧ID为 00 01 00 00时,4-7条只发出了,就收不到转发的了。

乘风飞扬 发表于 2025-7-30 14:17:23

你的上位机软件是不是设置了CAN ID过滤?
用例程STC32G-DEMO-CODE里的50-CAN总线扩展帧收发测试是可以正常收发的:

张三丰 发表于 2025-7-30 14:26:11

没设置ID过滤。那我这同样是例程的程序,为啥不行呢?

张三丰 发表于 2025-7-30 14:30:22

情况是这样子。我参照咱们的例程做的自己的程序。是实际两个产品间的测试,测试时时候发现收不到对方传来的CAN数据,发现是ID这块有数据造成的,我想着是不是我的程序有问题。于是用例程试,情况试一样的

张三丰 发表于 2025-7-30 14:36:52

实际的现有产品给我发过来一包数据是 :4位帧ID:00 02 80 00, 8位数据 :06 00 00 00 00 00 00 00,我收不到需要的06这个字节。而4位帧ID改成 00 00 80 00,我就能收到后面的8位数据中的06。所以我就用例程测试,结果也是这样
页: [1] 2
查看完整版本: CAN接收问题求助