16137|11

76

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

CAN一次最多发多少字节数据? [复制链接]


TxMessage.DLC最多是8字节,我一次要发24个。分三次发,发送程序如下

TestStatus CAN_Polling(void)
{
  u32 i = 0;
  u8  m=0;  //每次发送的字节数
  u8  n=0;  //总的发送的字节数
  u8 p;  //清空缓存用
  u8 TransmitMailbox;  //发送邮箱

  TxMessage.StdId=0x11;  //对方ID码
  TxMessage.RTR=CAN_RTR_DATA;  //数据帧
  TxMessage.IDE=CAN_ID_STD;  //标准帧
  TxMessage.DLC=8;  //每次放8个字节,三次发24个
 
  for(;n<24;m++,n++)
  {
      TxMessage.Data[m]=n;//CAN_SendDataTab[n];
      while(m==8)
         { 
           m=0;
           TransmitMailbox=CAN_Transmit(&TxMessage);//开始发送数据
         i = 0;
           //检测是否发送成功
         while((CAN_TransmitStatus(TransmitMailbox) != CANTXOK) && (i != 0xFF))
            {
            i++;//若发送255次仍失败则自动CAN复位
            }
                i = 0;
           while((CAN_MessagePending(CAN_FIFO0) < 1) && (i != 0xFF))
              {
                i++;
              }
           //CAN数据位清空,留着存下一组八字节
           for(p=0;p<8;p++)
               {
                 TxMessage.Data[p]=0;
               }
  }
  //index=+1;  
  return PASSED; /* 24个字节全部发送成功 */
}

运行结果:00 01 02 03 04 05 06 07。剩下来16字节就没得了
而我想要的是:00 01 02 03 04 05 06 07 00 09 0a 0b 0c 0d 0e 0f 00 11 12 13 14 15 16 17

此帖出自stm32/stm8论坛

最新回复

                                 老帖子翻出来了  详情 回复 发表于 2011-3-4 08:25
点赞 关注
 

回复
举报

92

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

CAN一次最多发多少字节数据?

  CAN一次最多发多少字节数据?正常情况下是8个字节。
出现非预期的结果,就需要调试啦。
此帖出自stm32/stm8论坛
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

是不是不支持超过8字节的数据呢?

我用CAN那么长时间总感觉只是皮毛,没吃透。那三个邮箱不知道是啥意思?是不是邮箱一满了,填邮箱2,邮箱2满了填了3.3满了后来的数据抛弃或者后来的覆盖前面的。先发送1,2,3等待,然后2,3等待,接下来的跟上,不知道是不是这个理
此帖出自stm32/stm8论坛
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 

CAN数据分包发送吧, 学学IP协议包就理解了

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 

楼上打包后数据占多大字节?怎么计算

俺对IP协议懂的不多,虽然以前学过TCPIP但是没有真正用到过
在网上搜罗一下
  typedef   struct   _packet   
  {   
        char   id;   
        int   iIength;   
        char   cPhone[16];   
        char   cBody[255];   
  }packet;   
  packet   m_packet;   
  ZeroMemory(&m_packet,sizeof(packet));   
  m_packet.id   =   0xfe;   
  m_packet.iIength   =   1+4+16+255;   
  CopyMemory(m_packet.cPhone,"13012345678",11);   
  CopyMemory(m_packet.cBody,"ABCDE",5);  

大概知道打包发送的概念,但是打包后数据包多大,数据包在CAN里面怎么摆呢?要打包后接受方还要根据你包格式最相应处理吧。
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 关注,,,
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 

问题



你的程序有问题,好像有一个“}”不见了,我不确定是哪个丢了,如果按你上面写的,“00 01 02 03 04 05 06 07”都不该出现,难道见鬼了?
你的代码整理:
TestStatus CAN_Polling(void)
{
    u32 i = 0;
    u8 m=0;     //每次发送的字节数
    u8 n=0;      //总的发送的字节数
    u8 p;         //清空缓存用
    u8 TransmitMailbox;    //发送邮箱
    TxMessage.StdId=0x11;    //对方ID码
    TxMessage.RTR=CAN_RTR_DATA;    //数据帧
    TxMessage.IDE=CAN_ID_STD;    //标准帧
    TxMessage.DLC=8;    //每次放8个字节,三次发24个

    for(;n<24;m++,n++)
    {
        TxMessage.Data[m]=n;//CAN_SendDataTab[n];
        while(m==8)
        {
            m=0;
            TransmitMailbox=CAN_Transmit(&TxMessage);//开始发送数据
            i = 0;
            //检测是否发送成功
            while((CAN_TransmitStatus(TransmitMailbox) != CANTXOK) && (i != 0xFF))
            {
                i++;//若发送255次仍失败则自动CAN复位
            }
            i = 0;
            while((CAN_MessagePending(CAN_FIFO0) < 1) && (i != 0xFF))
            {
                i++;
            }
            //CAN数据位清空,留着存下一组八字节
            for(p=0;p<8;p++)
            {
                TxMessage.Data[p]=0;
            }
        }
        //index=+1;   
        return PASSED; /* 24个字节全部发送成功 */
    }


按照你的流程,程序还没发送就退出了。
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
不是有一个“}”不见了,而是最后一个“}”放错地方了,

这就是写程序时不对齐 { 与 } 的后果。
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 CAN协议2.0中有规定,数据帧数据有效位最多是8bytes。也就是一帧你最多可以包含的数据就是8个字节,这8个字节不包含ID、CRC等域。
此帖出自stm32/stm8论坛
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 楼上用理。
此帖出自stm32/stm8论坛
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 学习了
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

12
 
                                 老帖子翻出来了
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表