查看: 4071|回复: 7

[其他] (求助)有关CAN通信协议的一些问题

[复制链接]

该用户从未签到

5

主题

17

帖子

0

新手上路

Rank: 1

积分
6
最后登录
1970-1-1
发表于 2012-5-20 14:35:03 | 显示全部楼层 |阅读模式
小弟正在学习有关CAN协议部分的知识,用的DSP56F807的开发板MSCAN模块,我根据书上的例题尝试做了2个节点之间一种信号的通信,现在想做多个信号之间的仲裁协议通信,哪位朋友有相关程序或者资料,帮帮我吧,都快被老师逼疯了
我知道答案 目前已有6人回答
回复

使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-5-21 09:47:08 | 显示全部楼层

    RE:(求助)有关CAN通信协议的一些问题

    多个节点和2个一样。他们共同接到一个CAN总线上就可以了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    17

    帖子

    0

    新手上路

    Rank: 1

    积分
    6
    最后登录
    1970-1-1
     楼主| 发表于 2012-5-21 11:08:51 | 显示全部楼层

    回复:(求助)有关CAN通信协议的一些问题

    回复第 2 楼 于2012-05-21 09:47:08发表:
    多个节点和2个一样。他们共同接到一个CAN总线上就可以了。 

    我之前做的是两个节点之间,一个单纯的发,另一个单纯的收,不涉及CAN协议的问题。
    多节点的话,比如说我要发送一个转速信号和一个电压信号,是不是应该先设置这两个信号的ID,通过对这两个信号的设置,来体现他们之间的优先级,在同时发送这两个信号的时候,才能通过仲裁决定这两个信号谁先发送。
    现在我手上都是CAN协议方面的一些理论资料,相关MSCAN寄存器的介绍以及多节点之间的协议收发例程基本没有,真心向各位大师们求教,拜托了!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    17

    帖子

    0

    新手上路

    Rank: 1

    积分
    6
    最后登录
    1970-1-1
     楼主| 发表于 2012-5-21 11:15:37 | 显示全部楼层

    回复:(求助)有关CAN通信协议的一些问题

    这是之前做的单纯一个电压信号的发送程序,希望大家给看看
    #include "Cpu.h"
    #include "Events.h"
    #include "AD1.h"
    #include "CAN1.h"
    #include "Bits1.h"
    #include "TI1.h"
    /* Include shared modules, which are used for whole project */
    #include &quotE_Types.h"
    #include &quotE_Error.h"
    #include &quotE_Const.h"
    #include "IO_Map.h"
    #include "Stdio.h"
    unsigned int i;
    bool k=FALSE;
    byte values;
    byte ch[2];
    float v;
    //word data=0;
    //bool n,c,d;
    void main(void)
    {
      /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
      PE_low_level_init();
      /*** End of Processor Expert internal initialization.                    ***/
      /* Write your code here */
    /*   while(1)
      {
             
      
      if(k)
      {
              k=FALSE;
              AD1_Measure(FALSE);
             
      }
      
      CAN_TB0_DSR0=ch[0];
       CAN_TB0_DSR1=ch[1];
       CAN_TB0_DSR2=55;
       CAN_TB0_DSR3=66;
       CAN_TB0_DSR4=77;
      CAN_TB0_DSR5=88;
      CAN_TB0_DSR6=99;
      CAN_TB0_DSR7=22;
      
      printf("------------------------------");
    printf("number=%d\n",i);
    printf("send values0=%d\n",CAN_TB0_DSR0);
    printf("send values1=%d\n",CAN_TB0_DSR1);
    Bits1_PutVal((byte)ch[0]);

              if(CANTFLG&0x0001)
    {  
       CANTCR=0x0000;
        CANTFLG=0x0001;
    }

           // Run measurement with set wait for result flag
      //AD1_GetValue(&values); // Get AD conversion results
       */
    while((CANCTL0)&0010==1)
    CAN_TB0_IDR0=0x33;     /* 设置发送缓冲区的接收符ID,使用标准模式*/
    CAN_TB0_IDR1=0;
    CAN_TB1_IDR0=0x44;
    CAN_TB1_IDR1=0;
    CAN_TB2_IDR0=0x55;
    CAN_TB2_IDR1=0;

    CAN_TB0_DLR=0x0008;   /* 设置发送缓冲区的数据长度*/
    CAN_TB1_DLR=0x0008;
    CAN_TB2_DLR=0x0008;

    CAN_TB0_TBPR=0x10;  /* 设置发送缓冲区的优先级*/
    CAN_TB1_TBPR=0x20;
    CAN_TB2_TBPR=0x30;

    GPR3=0x7500;       /* 设置中断级别*/     
    CANRIER=0x0001;    //允许MSCAN接收中?

    while(1)
    {
       AD1_Measure(TRUE);
       
            AD1_GetValue(&values);
            ch[0]=values>>8;
        ch[1]=(values&0x00ff)>>1;
      v=(float)(ch[0]*256+ch[1]*2)*3.3/32760;
        CAN_TB0_DSR0=ch[0];
      CAN_TB0_DSR1=ch[1];
      i=i+1;
    // CAN_TB0_DSR2=55;
    // CAN_TB0_DSR3=66;
    // CAN_TB0_DSR4=77;
      //CAN_TB0_DSR5=88;
    // CAN_TB0_DSR6=99;
    //CAN_TB0_DSR7=22;
    printf("number=%d\n",i);
    printf("------------------------------\n");
    printf("v=%f\n",v);
    printf("send values0=%d\n",CAN_TB0_DSR0);
    printf("send values1=%d\n",CAN_TB0_DSR1);
      Bits1_PutVal((byte)ch[0]);       
       
    if(CANTFLG&0x0001)
    {  
       CANTCR=0x0000;
       CANTFLG=0x0001;
      CAN_TB0_DSR0=0;
      CAN_TB0_DSR1=0;
    CAN_TB0_DSR2=0;
    CAN_TB0_DSR3=0;
    CAN_TB0_DSR4=0;
      CAN_TB0_DSR5=0;
      CAN_TB0_DSR6=0;
    CAN_TB0_DSR7=0;
    }
    }
    }
    /* END can_send */
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-5-21 11:33:43 | 显示全部楼层

    RE:(求助)有关CAN通信协议的一些问题

    一样的,你只要接收就行了。这个是由CAN模块来处理的。优先级高的,CAN会先接收。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    17

    帖子

    0

    新手上路

    Rank: 1

    积分
    6
    最后登录
    1970-1-1
     楼主| 发表于 2012-5-21 14:44:35 | 显示全部楼层

    回复:(求助)有关CAN通信协议的一些问题

    回复第 5 楼 于2012-05-21 11:33:43发表:
    一样的,你只要接收就行了。这个是由CAN模块来处理的。优先级高的,CAN会先接收。 

    哦 是这样的啊,那不用设置掩码和比较码寄存器吗?
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-5-22 09:58:02 | 显示全部楼层

    RE:(求助)有关CAN通信协议的一些问题

    可以设置为全接收,也可设置为接收某个ID,这个根据你的需求来配置。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    17

    帖子

    0

    新手上路

    Rank: 1

    积分
    6
    最后登录
    1970-1-1
     楼主| 发表于 2012-5-22 15:15:47 | 显示全部楼层

    回复:(求助)有关CAN通信协议的一些问题

    茅塞顿开,谢谢安版主,那我先试着写写程序
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-9-9 20:11 , Processed in 0.113534 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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