找回密码
 立即注册
查看: 93|回复: 4

刚开始学习CAN 不懂请教 | 已解决

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:385
  • 最近打卡:2025-05-01 08:05:45

25

主题

113

回帖

725

积分

高级会员

积分
725
发表于 2025-4-12 20:41:21 | 显示全部楼层 |阅读模式
刚开始学习CAN 没有屠龙刀  使用自己做的学习板子。芯片STC32G128K

can1  P00  P01
CAN2 P02  P03
使用2个tja1050模块。两个模块的CANH  CANL分别连接。
第一个模块的RX TX 分别接入P00 P01  第二个模块的RX  TX 分别接P02 P03
程序使用的是手册上的标准帧收发测试。
微信图片_20250412203408.jpg 微信图片_20250412203416.jpg    微信图片_20250412203423.jpg

由于没有USB转CAN  所以通过显示屏 显示接受的内容。现在是无论如何都无法接收到。

        while(1)
        {
                if(!P32)
                {P15 = !P15;
                        CANSEL = 0;         //选择CAN1模块
                  CanSendMsg(CAN_ID,TX_BUF);
                }
                while(!P32);
                if(B_200ms)
                {
                  B_200ms = 0;
                        CANSEL = 1;         //选择CAN2模块
      CanReadFifo(buffer);        
     OLED_ShowNum_string(1,0,buffer[1],4,1);
     OLED_ShowNum_string(6,0,buffer[2],4,1);
     OLED_ShowNum_string(11,0,buffer[3],4,1);        
                        
     OLED_ShowNum_string(1,2,buffer[4],4,1);               
     OLED_ShowNum_string(6,2,buffer[5],4,1);
     OLED_ShowNum_string(11,2,buffer[6],4,1);
                        
     OLED_ShowNum_string(1,4,buffer[7],4,1);
     OLED_ShowNum_string(6,4,buffer[8],4,1);               
     OLED_ShowNum_string(11,4,buffer[9],4,1);        
                        
     OLED_ShowNum_string(1,6,buffer[10],4,1);
     OLED_ShowNum_string(6,6,buffer[11],4,1);
     OLED_ShowNum_string(11,6,buffer[12],4,1);                        
                }

        }

我的想法是按下P32  第一个CAN模块发送一帧数据。CAN2 模块接受 。我读取内容显示到OLED上。
不知道出错到哪里。
can测试.zip (133.52 KB, 下载次数: 2)



回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-12 20:43:00 | 显示全部楼层
首先,感谢您分享您的CAN总线学习经验。针对您的问题,我将从硬件连接、软件配置和调试方法三个方面进行分析,并提供一些建议。

1. 硬件连接检查
您提到使用了两个TJA1050模块,分别连接到STC32G128K的CAN1和CAN2接口。以下是需要检查的硬件连接点:
电源和地线:确保TJA1050模块的VCC和GND引脚正确连接到电源和地,且电源电压符合TJA1050的工作要求(通常为5V)。
CANH和CANL连接:两个TJA1050模块的CANH和CANL引脚需要正确连接,确保CAN总线网络的物理层通信正常。建议使用双绞线连接,并确保终端电阻(通常为120Ω)正确接入。
RX和TX引脚:确保TJA1050的RX和TX引脚分别与STC32G128K的P00/P01(CAN1)和P02/P03(CAN2)正确连接,且没有接反。

2. 软件配置检查
您的代码中涉及CAN模块的初始化和收发操作。以下是需要重点检查的软件配置点:
CAN模块初始化:确保CAN1和CAN2模块的初始化配置正确,包括波特率、工作模式(正常模式或回环模式)等。可以参考STC32G128K的手册,确保寄存器配置正确。
发送和接收函数:检查CanSendMsg和CanReadFifo函数的实现,确保发送和接收的数据格式符合CAN协议标准帧的要求。特别是ID、数据长度和数据内容的设置。
中断处理:如果使用中断方式接收数据,确保CAN接收中断的配置和中断服务程序(ISR)正确实现。

3. 调试方法建议
由于您没有USB转CAN工具,以下是一些调试建议:
回环模式测试:将CAN模块配置为回环模式(Loopback Mode),在该模式下,发送的数据会直接回环到接收端,无需外部硬件连接。通过这种方式可以验证CAN模块的发送和接收功能是否正常。
LED指示灯:在发送和接收数据时,通过LED指示灯或显示屏实时显示状态,帮助定位问题。例如,在发送数据时点亮LED,在接收到数据时熄灭LED。
逐步调试:将问题分解为多个小步骤,逐步验证每个步骤的正确性。例如,先验证CAN模块的初始化是否成功,再验证发送功能,最后验证接收功能。

4. 代码优化建议
您的代码中涉及CAN模块的选择和数据显示。以下是一些优化建议:
模块选择优化:在切换CAN模块时,确保切换操作不会影响其他模块的状态。可以在切换前保存当前模块的状态,切换后恢复。
数据显示优化:在OLED上显示接收到的数据时,建议将数据格式化为易读的格式,例如十六进制或ASCII码。同时,确保显示函数能够正确处理数据长度和显示位置。

5. 总结
通过以上硬件连接、软件配置和调试方法的检查与优化,您应该能够逐步定位并解决CAN通信问题。如果问题仍然存在,建议进一步查阅STC32G128K的手册,或参考相关CAN总线通信的示例代码和资料。

希望这些建议对您有所帮助,祝您在CAN总线学习中取得进展!

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

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

25

主题

113

回帖

725

积分

高级会员

积分
725
发表于 2025-4-13 12:33:16 | 显示全部楼层
经过今天的学习 终于调试通了。对CAN数据格式基本了解了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2025-4-14 09:47:44 | 显示全部楼层
发送can数据包的时候,需要等待can发送标志位,等待发送完成后再切换到另一个can外设进行接收
因为can的发送没有fifo,但是can的接收有fifo,可以自己缓存。
使用readfifo前,应该使用B_CanxRead(x=1或2)来先判断是否有接收数据
回复 支持 反对

使用道具 举报 送花

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

25

主题

113

回帖

725

积分

高级会员

积分
725
发表于 2025-4-15 11:48:09 | 显示全部楼层
王*** 发表于 2025-4-14 09:47
发送can数据包的时候,需要等待can发送标志位,等待发送完成后再切换到另一个can外设进行接收
因为can的发 ...

谢谢回复。 发现连续发送多帧数据(标准帧)的时候。中间需要间隔500us以上才可以成功。如果两条发送命令之间不延时  接受只有一个。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-1 22:08 , Processed in 0.110735 second(s), 73 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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