找回密码
 立即注册
查看: 663|回复: 21

CAN通讯疑问

[复制链接]
  • TA的每日心情
    开心
    昨天 12:47
  • 签到天数: 157 天

    [LV.7]常住居民III

    13

    主题

    244

    回帖

    839

    积分

    高级会员

    积分
    839
    发表于 2024-2-16 15:40:07 | 显示全部楼层 |阅读模式
    本帖最后由 suncat0504 于 2024-2-16 15:46 编辑

    我用STC32G12K128搭建了CAN通讯电路,使用的是两个CAN通讯模块,收发器使用TJA1050。电路形式如下:

    图片1.png
    测试程序中,CAN1和CAN2周期性发送不同数据。

    结果测试中发现CAN1发送的数据,总是被CAN1自己接收。CAN2发送的数据,总是被CAN2接收。处在相同的网络中,CAN1和CAN2不是都应该能接收吗?

    之后在初始化CAN1加了单模式过滤,期待CAN1只接收CAN2的发送数据,CAN2能接受CAN1和CAN2的数据。结果CAN1和CAN2都只能发送,不接收了。
    初始化部分的代码:

        // 总线验收代码寄存器
        // CAN1_ID = 0x01303132;
        // CAN2_ID = 0x03333435;
        // 对CAN1,ACR配置成CAN2的ID
        CanID = CAN2_ID << 3;                   // 挤掉高位前3位
            CAN_InitStructure.CAN_ACR0    = (u8)(CAN2_ID>>24);
        // 总线验收代码寄存器
            CAN_InitStructure.CAN_ACR1    = (u8)(CAN2_ID>>16);
            // 总线验收代码寄存器
        CAN_InitStructure.CAN_ACR2    = (u8)(CAN2_ID>>8);
            // 总线验收代码寄存器
        CAN_InitStructure.CAN_ACR3    = (u8)(CAN2_ID);
            // 总线验收屏蔽寄存器
        CAN_InitStructure.CAN_AMR0    = 0x00;                            //总线验收屏蔽寄存器 0~0xFF
            // 总线验收屏蔽寄存器
        CAN_InitStructure.CAN_AMR1    = 0x00;
            // 总线验收屏蔽寄存器
        CAN_InitStructure.CAN_AMR2    = 0x00;
            // 总线验收屏蔽寄存器
        CAN_InitStructure.CAN_AMR3    = 0x00;
       
        CAN_Inilize(CAN1,&CAN_InitStructure);                            //CAN1 初始化
       
       
        // 总线验收代码寄存器
        // CAN1_ID = 0x01303132;
        // CAN2_ID = 0x03333435;
        // 对CAN2,ACR配置成CAN1的ID
            CAN_InitStructure.CAN_ACR0    = 0x00;                            //总线验收代码寄存器 0~0xFF
        // 总线验收代码寄存器
            CAN_InitStructure.CAN_ACR1    = 0x00;
            // 总线验收代码寄存器
        CAN_InitStructure.CAN_ACR2    = 0x00;
            // 总线验收代码寄存器
        CAN_InitStructure.CAN_ACR3    = 0x00;
            // 总线验收屏蔽寄存器
        CAN_InitStructure.CAN_AMR0    = 0xFF;                            //总线验收屏蔽寄存器 0~0xFF
            // 总线验收屏蔽寄存器
        CAN_InitStructure.CAN_AMR1    = 0xFF;
            // 总线验收屏蔽寄存器
        CAN_InitStructure.CAN_AMR2    = 0xFF;
            // 总线验收屏蔽寄存器
        CAN_InitStructure.CAN_AMR3    = 0xFF;
       
            CAN_Inilize(CAN2,&CAN_InitStructure);                            //CAN2 初始化


    看了用户手册。用户手册中对于ID的描述中,诸如ID.n中的n,和ID的位编号是一致吗?B0就是ID.0?另外处理ID时,对扩展帧只处理ID0 ~ ID28,对于四个字节的ID,是不是就不要B31 ~B29了?
    在单模式滤波时,AMR都设置为0, 设置ACR时,如何处理ID的配置,才能实现定向过滤指定的ID呢?


    回复 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9307

    回帖

    1万

    积分

    管理员

    积分
    14067
    发表于 2024-2-16 15:49:41 | 显示全部楼层
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 12:47
  • 签到天数: 157 天

    [LV.7]常住居民III

    13

    主题

    244

    回帖

    839

    积分

    高级会员

    积分
    839
     楼主| 发表于 2024-2-16 21:59:54 | 显示全部楼层
    神农鼎 发表于 2024-2-16 15:49
    你这个,好像可以测试下面的演示

    CAN视频教学, USB 转 2组CAN, STC-ISP V6.92L 【CAN助手】收发测试 - CAN ...

    收到!谢谢您!我马上去看看,学习!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 44 天

    [LV.5]常住居民I

    0

    主题

    24

    回帖

    264

    积分

    中级会员

    积分
    264
    发表于 2024-2-18 21:38:14 | 显示全部楼层
    我记得手册里说过一句话 两组CAN在硬件上独立的,但是寄存器访问地址是相同的,当访问不同组内部寄存器时,需要通过CANSEL去选择再去访问,会不会是这里出问题了
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 12:47
  • 签到天数: 157 天

    [LV.7]常住居民III

    13

    主题

    244

    回帖

    839

    积分

    高级会员

    积分
    839
     楼主| 发表于 2024-2-19 09:02:29 | 显示全部楼层
    peterwangjp 发表于 2024-2-18 21:38
    我记得手册里说过一句话 两组CAN在硬件上独立的,但是寄存器访问地址是相同的,当访问不同组内部寄存器时, ...

    不是这个问题。因为设置了允许中断,既然在一个总线上,发出的数据,两个CAN控制器应该是可以同时收到数据的。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:55
  • 签到天数: 131 天

    [LV.7]常住居民III

    26

    主题

    1297

    回帖

    4033

    积分

    论坛元老

    积分
    4033
    发表于 2024-2-19 09:33:34 | 显示全部楼层
    屠龙刀例程包:14-CAN1-CAN2总线标准帧扩展帧同时使用收发测试
    跟你的用法差不多,你用这个例子试试
    截图202402190932375887.jpg
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 12:47
  • 签到天数: 157 天

    [LV.7]常住居民III

    13

    主题

    244

    回帖

    839

    积分

    高级会员

    积分
    839
     楼主| 发表于 2024-2-20 08:54:51 | 显示全部楼层
    乘风飞扬 发表于 2024-2-19 09:33
    屠龙刀例程包:14-CAN1-CAN2总线标准帧扩展帧同时使用收发测试
    跟你的用法差不多,你用这个例子试试
    ...

    太感谢了!就去看看那个例程。谢谢你的提醒。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-27 08:40
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    0

    主题

    5

    回帖

    46

    积分

    新手上路

    积分
    46
    发表于 2024-2-27 16:17:22 | 显示全部楼层
    成功没?
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 12:47
  • 签到天数: 157 天

    [LV.7]常住居民III

    13

    主题

    244

    回帖

    839

    积分

    高级会员

    积分
    839
     楼主| 发表于 2024-2-28 08:32:55 | 显示全部楼层
    最近一直忙,没来得及测试呢。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

    2024-3-12 09:47
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    0

    主题

    32

    回帖

    98

    积分

    注册会员

    积分
    98
    发表于 2024-3-8 17:48:34 | 显示全部楼层
    我也是这样搭线的 但是检测不到 为什么啊
    截图202403081748269902.jpg
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-4 04:44 , Processed in 0.102161 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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