查看: 6151|回复: 12

[其他] CAN总线(已解决)

[复制链接]

该用户从未签到

4

主题

17

帖子

0

新手上路

Rank: 1

积分
38
最后登录
1970-1-1
发表于 2014-7-10 20:57:54 | 显示全部楼层 |阅读模式
对于标准帧
CAN发送时有:
  // 写入标识符
  CAN0TXIDR0 = (unsigned char)(msg.id>>3);//msg.id右移3位

  CAN0TXIDR1 = (unsigned char)(msg.id
我知道答案 目前已有12人回答
回复

使用道具 举报

该用户从未签到

2

主题

69

帖子

0

中级会员

Rank: 3Rank: 3

积分
215
最后登录
1970-1-1
发表于 2014-7-10 21:54:40 | 显示全部楼层

回复:CAN总线

关于CAN的问题应该去周立功论坛
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

69

帖子

0

中级会员

Rank: 3Rank: 3

积分
215
最后登录
1970-1-1
发表于 2014-7-10 21:55:32 | 显示全部楼层

回复:CAN总线

另外为什么不用官方库函数
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2014-7-11 09:20:20 | 显示全部楼层

    RE:CAN总线

    你看一下CAN总线的ID寄存器就明白了。他这样是为了对应ID0-10的位。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    17

    帖子

    0

    新手上路

    Rank: 1

    积分
    38
    最后登录
    1970-1-1
     楼主| 发表于 2014-7-11 13:11:05 | 显示全部楼层

    回复:CAN总线

    回复第 4 楼 于2014-07-11 09:20:20发表:
    你看一下CAN总线的ID寄存器就明白了。他这样是为了对应ID0-10的位。
    你好!在CAN发送时,如果我的标识符ID是一个字节的数据,例如0x01,那我的这个8位ID跟标准帧的11位ID怎么对应呢?为什么是上述的那种移位的形式?
    CAN接收时,同问。谢谢!
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2014-7-11 14:51:41 | 显示全部楼层

    RE:CAN总线

    这个你看CAN的ID寄存器,他里面有标识哪些位表示IDX,你用的哪个芯片。这样好给你截图说明。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    17

    帖子

    0

    新手上路

    Rank: 1

    积分
    38
    最后登录
    1970-1-1
     楼主| 发表于 2014-7-12 11:33:13 | 显示全部楼层

    回复:CAN总线

    回复第 6 楼 于2014-07-11 14:51:41发表:
    这个你看CAN的ID寄存器,他里面有标识哪些位表示IDX,你用的哪个芯片。这样好给你截图说明。
     
    MC9S12Xep100;自带的MSCAN模块,收发器是TJA1050
    CAN发送时,对于ID为0x01,移位填充了ID0~ID7,ID8~ID10位自动补0了,请问这个在CAN协议里有明确这种机制么?我好想没有看到这种规定。
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2014-7-14 09:33:25 | 显示全部楼层

    回复:CAN总线

    如下图所示,标准ID要按照下面的ID0-ID10填写,很多厂家都是这样写的。这个也简单,可以用下面代码处理

     if(IDFrame == StandardFrame)
       {
          // 写入11位标识符
         
          CAN0TXIDR0 = (u8)(ID >> 3);
          CAN0TXIDR1 = (u8)((ID >> 8) & 0x70);
       }
       else
       {
          // 写入29位标识符
          CAN0TXIDR0 = (u8)(ID >> 21);
          CAN0TXIDR1 = (((u8)(ID>>13))&0xe0)|0x18|(((u8)(ID>>15))&0x07);
          CAN0TXIDR2 = (u8)(ID >> 7);
          CAN0TXIDR3 = (u8)(ID
    123.jpg
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    17

    帖子

    0

    新手上路

    Rank: 1

    积分
    38
    最后登录
    1970-1-1
     楼主| 发表于 2014-7-14 13:37:34 | 显示全部楼层

    回复:CAN总线

    <div style="padding:5px;border:1px dashed #ccc;">回复第 8 楼 于2014-07-14 09:33:25发表:
    如下图所示,标准ID要按照下面的ID0-ID10填写,很多厂家都是这样写的。这个也简单,可以用下面代码处理

     if(IDFrame == StandardFrame)
       {
          // 写入11位标识符
         
          CAN0TXIDR0 = (u8)(ID >> 3);
          CAN0TXIDR1 = (u8)((ID >> 8) & 0x70);
       }
       else
       {
          // 写入29位标识符
          CAN0TXIDR0 = (u8)(ID >> 21);
          CAN0TXIDR1 = (((u8)(ID>>13))&0xe0)|0x18|(((u8)(ID>>15))&0x07);
          CAN0TXIDR2 = (u8)(ID >> 7);
          CAN0TXIDR3 = (u8)(ID
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    151

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    396
    最后登录
    2020-6-22
    发表于 2015-11-3 13:36:48 | 显示全部楼层
    谢谢!
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 20:58 , Processed in 0.106093 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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