This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28335 CAN总线断线后恢复,为什么只响应优先级最高的邮箱中断

Other Parts Discussed in Thread: TMS320F28335

在设计中,eCAN模式下,使用了4个接收邮箱,15、14、13、12号邮箱

正常情况下,4个邮箱的消息都可以正常触发接收中断,响应也正常。

问题是如果在正常通信的情况下,模拟CAN线断线后在恢复通信(实际是用打开/关闭USBCAN接口卡来模拟的),

程序就只响应优先级最高的15号接收邮箱的消息了,

如果终止15号接收邮箱的消息发送,程序就可以响应次优先级14号接收邮箱的消息了

以此类推,这种现象有人遇到吗?

另外这种故障情况下,对eCAN模块有什么影响?

  • 你好。

    4个邮箱的中断都是映射到CAN的同一条中断线上吗?

    4个邮箱的ID设置是否有用Mask?

    断线恢复后,你有没有看过除15邮箱外,其他三个邮箱有没有数据收到,也就是说接收标志的寄存器对应位及以中断标志的对应位是否有置1呢?

     

  • 四个邮箱的接收中断都在0线上,CANMIL寄存器为0

    LAMn寄存器最高位为1,其余位为0

    CAN线断线恢复后,同时发送15、14邮箱的消息时,程序只响应15邮箱的信息,而不响应14邮箱的消息中断,CANRMP寄存器的相应位为0,即使数据成功的由CAN卡发送到CAN线上,

    不发送15邮箱的消息,程序即可以正常响应14邮箱的消息

     

  • 你好。

    如果CANRMP对应位是0的话,就表示没有收到报文,肯定是不会触发中断的。

    所以需要查一下为什么没有收到报文。当发送完14号邮箱的消息时,你看一下状态寄存器的一些情况。

  • 昨天时间紧张,回复有误,抱歉。谢谢提醒

    刚才单步调试了下,对比了CAN总线断线前后CANRMP寄存器的值,应该找到了问题的原因。

    同样是通过USBCAN卡以100ms间隔发送三条消息(对应15、14、13号邮箱消息)到目标板,

    在断线前,CANRMP的值总是只有一个邮箱的中断标志位被置位,因而程序的响应是正常的

    可是断线后,CANRMP的值总是三个邮箱的中断标志位被同时置位,

    程序在处理15邮箱的消息后,就把CANRMP复位了,没有再处理其他两个邮箱的消息。

    所以只是响应高优先级的邮箱消息。

    如果CANRMP同时响应多个邮箱中断,有什么好的处理机制。

  • 你好。

    如果同时有多个中断的话,清CANRMP标志时,可以只清除已经处理的那一位,不要全清了。

    还有,按照你说的问题,就算全清了,应该在清完后,如果继续有14号邮箱的报文进了,中断应该是可以响应的。请问你有试过吗?

  • 您好,打扰您一下,我是初学者,导师让我写了一个简单的发送和接收的ecan程序(分别,见附件), A DSP发送,B DSP 接收。用的是CCS3.3

    1.然后我是把发送的程序烧写进了A板。
    但出了问题:(Flash.cmd)在烧写的过程中,出现了一个警告:对于.const那一行,no matching。(见附件)

    2.B板:将程序load program进板子,用仿真器在电脑上,观察接收邮箱寄存器里的值(此板子没有把接收程序烧进板子,但Flash里已经有了以前固化的程序,具体是什么我不清楚,不知道这个对于此时的仿真有没有影响),然后load program到板子里,开始run,在接收邮箱前设置的有断点,然后我就分别把高、低16位装入观察窗口,发现里面已经有值了,而且很大(在附件)这也太奇怪了吧?!2个板子的can的双绞线还没有连接怎么会有值呢?而且一断开,并断电;再一连接仿真器,值还是那个值。 太奇怪了?

    由于是初学者,不知道哪里出了问题,所以想请教您一下,耽误您的宝贵时间了。我怀疑是我的程序有问题,但就是不知道问题出在哪里?

    请教您一下,帮忙看看,谢谢,不胜感激! 
    另外,您能否提供一些基于2812的发送、接收成功的例程,我想学习一下;ti的官方发送接收例程在哪可以下载得到?谢谢
    导师催的很紧,所以想借助于成功例程,尽快编好。简单的程序就可以,一个dsp发送1,另一个dsp接收1,只要能实现这个功能就好。谢谢。

    祝您,工作顺利!期待您的回信,再次感谢您。1083176055@qq.com

    发送和接收2个工程.zip
  • 你好。

    1.这个Warning是你的CMD文件没有写好。请从http://www.ti.com/lit/zip/sprc097下载2812的驱动代码和相关例程。

    2.你看到的LL和HH以及寄存器中的值是不是在接收到报文之前的。如果是的话,那是可能的。因为上电后,RAM中的所有数据都是随机数,包括未赋值的变量。

     

  • 基本上搞定了,

    修改了程序结构,不按官方的例子做了,

    对CANRMP进行逐位判断,有中断发生说明要对数据缓存,

    增加个缓冲区,判断出是哪个邮箱发生了接收中断,就把相关数据放进缓冲区

    问题是会增加些周转开销,接收邮箱最好是从一端开始按使用频率排列,可稍稍减少些判断上的开销

    刚测了下,CAN断线前后现象一致,程序可以工作了

    具体的性能测试要交给同事了

    谢谢TI支持

     

  • 基本搞定了 要改下接收方式,不能像官方例子那样处理了,虽然曾经工作的很好

    修改下CAN接收函数,要对CANRMP寄存器进行逐位判断,以处理多个接收中断标志位同时存在的情况

    需要增加个缓冲区,接收函数判断发生接收中断后,用循环逐位判断CANRMP寄存器,查出中断邮箱,将相应数据放入缓冲区,清相应标志位就行了

    当CANRMP寄存器为0时,就退出循环。

    实际上只用到四个接收邮箱,要在查找中断邮箱上曾加开销,可以从32个邮箱的一端开始,按邮箱的使用频率排列接收邮箱,以减少些判断上的开销

    程序已经可以工作了,CAN断线前和恢复后的现象一致,具体的测试要交给同事了

    谢谢TI支持

  • 非常感谢您的回复。谢谢。

    您说的没错,确实是这样的,can的双绞线还没连接呢,寄存器里就观察到有数据了。

    1.我使用最普通的2跟杜邦线,将他们绞在一起制作而成的?见附件图片。不知道在发送和接收程序都没有任何问题时,这个双绞线管不管用?由于是初学者,我对硬件的连接也感到质疑。希望您能帮我看看,谢谢您。板子和原理图都在附件图片里。

    2.    板子和仿真器都是上海三意公司的。F2812的。

    1083176055@qq.com,期待您的回复,谢谢,工作顺利!

    板子原理图和硬件连接.zip
  • 你好。

    由于你的通讯距离很近,双绞线的要求就没有那么严格。你用的线应该没有问题。

  • 非常感谢您的回复。谢谢。

    我刚刚又在实验,发现RMP位一直没有置位到1,仿真暂停时发现那个黄色指针一直停在 RMP那一行

    1.我怀疑是我的程序有问题,可就是不知道问题出在哪里

    2.我感觉是有关帧设置的问题,这部分我不是很理解,还有就是为什么寄存器里不能用MSGID?而非得用GID,

    3.Mboxes.这个寄存器书上压根没讲,所以也是很迷糊。

    我将我的发送和接收例程上传到了附件,你能否帮我看看 ,帮我修改一下,感激不尽啊。 如果有机会的话,想当面谢谢你。

    导师催得要命,请大哥帮帮我吧。

    谢谢。

    期待您的回复,谢谢。1083176055@qq.com

    发送与接收文件.zip
  • 你好。

    我看了你的代码,有以下几个问题:

    1. 发送程序的ID用的是扩展的ID,而接收的程序所有邮箱都是标准的,而且ID号都对不上,这样接收的板子肯定接收不到任何报文

    2.接收的RMP判断用问题。while(ECanaRegs.CANRMP.all != 0xFFFFFFFF ) {}  //等待RMP为1 

    如果上面这个循环要退出,那么接收方的所有邮箱都要有报文收到后才会退出,可是你发送的只有一个ID的报文。所以,应该判断某个邮箱的RMP位。

  • 对了,还有eCAN模块的User Guide见http://www.ti.com/lit/pdf/spru074

    UG上有非常详细的寄存器描述。

  • 非常感谢您。祝您工作顺利!

    我对于ID的设置比较陌生,您能否举个例子怎么去设置ID号 ?

    我想将发送程序烧写到A dsp 的0号邮箱,作为发送邮箱;(编译的时候有Flash警告,见附件,不知道影响不)

    //设置接收邮箱的ID,扩展帧,IDE,
    ECanaMboxes.MBOX0.MID.all = 0xA0C80000; 

    //向邮箱RAM区写数据

    ECanaMboxes.MBOX0.MDRL.all = 0x01234567;
    ECanaMboxes.MBOX0.MDRH.all = 0x89ABCDEF;

    用B  DSP 的1号邮箱接收并利用仿真器观察LL和HH  有没有收到预定的数据:

    邮箱ID等的设置:ECanaMboxes.MBOX1.MID.all = 0xA0C80000

    并把接收到的邮箱数据存放在 Uint32 LL和HH中;

    for(;;)

    while(ECanaRegs.CANRMP.all!=0x00000002);
    ECanaRegs.CANRMP.all=0x00000002;
    LL=ECanaMboxes.MBOX1.MDRL.all;//低16位
    HH=ECanaMboxes.MBOX1.MDRH.all;//高16位
    I++; //在这里  设置断点进行观察。
    }

    看了您的指导后,我就又试着写了写,TA TRS RMP 的设置我也改正了一下,就是不知道对不。

    我刚刚又测试了一下,RMP老是不置位,还是停在等待那条语句。我快急哭了都,请大哥帮帮忙吧。谢谢。

    当然了,我给大哥您看到的只是程序的一小部分,2个工程在附件里,包括对于DBO ,MBNR,CCR,SCB,CDR,波特率等的设置,

    我感觉还有问题,就是不知道出在哪里?

    请大哥您帮我指正、修改一下,感激不尽。

    再次感谢您。

    2个工程.zip
  • 你好。

    你的初始化有点问题。

    你没有把CANA的对应GPIO引脚配置成CAN功能,如果不配置的话,就是GPIO功能,那样肯定发不出来数据来。

    调试CAN的时候,请一步步来。

    程序改完后,用示波器来看DSP1发送的数据的TX引脚(DSP引脚上)是否有波形输出,然后看收发器的CANH和CANL上是否有信号。如果这些没有问题,那么DSP1的发送应该没有问题。

    再看DSP2的RX引脚是否有波形。如果有信号,那么DSP2的CAN模块初始化没有问题,再去看RMP有没有收到数据的标志。

    接收标志的判断,建议用bit来判断,而不要用all。

  • 您好,非常感谢您,您是说can的初始化有问题吧。

    由于我是初学者,看不出来,请大哥您帮忙修改一下吧,感激不尽啊。

    如果程序有问题的话,用示波器检查相关引脚也是没用的吧?

    我实在是检查不出程序到底是哪里出现了问题。非常着急,恳求大哥帮我修改一下吧,我用到的是ccs3.3。

    期待您的回复,再次感谢。

    1083176055@qq.com。Thanks.

  • 您好,再次感谢您的回复

    以下就是配置功能引脚的程序,将引脚设置为相应的功能。

    不知道哪里缺失了什么,请大哥帮我修改修改,Thanks.

    //配置GPIO引脚工作在eCAN功能

    EALLOW;
    GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7=1;
    GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6=1;

    //配置eCAN的RX和TX分别为eCAN的接收和发送引脚
    ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all;
    ECanaShadow.CANTIOC.bit.TXFUNC = 1;
    ECanaRegs.CANTIOC.all = ECanaShadow.CANTIOC.all;

    ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all;
    ECanaShadow.CANRIOC.bit.RXFUNC = 1;
    ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all;
    EDIS;

    期待您的回复,谢谢。

  • 你好。

    请参考附件2808的CAN例程,请忽略中断的一些设置。

    建议在TI的CAN例程基础上进行开发。

  • 您好,非常感谢您。

    这份来自TI的说明书里也是说28--0位是ID消息标识符位,我不明白的是,为什么这29位只有1或0值,上面的IDE,AME,AAM,都是一位的,可以赋值为0或者1;
    可这是29位呀,怎么能同时全部赋值为0或者1呢?
    只有2种取值吗?对于这全部的29位?

    难道说是这样的意思吗:
    1. 全为1,才是1;全为0,才是0?
    2. 1和0 对应的解释 怎么理解呢?
    3. 还得由IDE决定?但是1的话,对应于IDE=1;0的话对应于IDE=1;也说不通啊。怎么理解呢?赋值为0或者1,不管用?由IDE决定?
    4. 这里的0或者1难道代表的是2种情况而已吗?

    这该怎么理解呢?!

    谢谢,等待您的回复。

    VIPeCAN.pdf
  • 你好。

    看你你是没有理解ID是怎么一回事。

    每个邮箱都有对应的MSGID寄存器,用来设置邮箱ID。只有发送邮箱的ID和接收邮箱的ID相同时,发送邮箱发出的报文才能被接收邮箱收到。

    IDE位配置该邮箱使用标准ID(11位)还是扩展ID(29位)。

    • 如果使用标准ID,那么ID[28:18]位有效,低18位[17:0]无效。比较你要设置一个标准ID为5,那么MSGID寄存器就配置成 0x00140000
    • 如果使用扩展ID,那么所有29位ID都有效,设置扩展ID为5的话,MSGID寄存器配置成0x80000005

  • 非常感谢您的回复

    是不是可以这样理解?

    就是最高位IDE决定,ID是标准的,还是扩展的?

    如果IDE为1,则是扩展标识符;

    如果IDE为0,则是标准标识符。

  • 是的,就是这样的。

    发送的邮箱和接收的邮箱一定做到ID能对上。

    建议学习一下CAN协议。

  • 谢谢您。

    您能说说,为什么RMP不会置位的原因吗?就是我做的那个程序, A DSP 发,B dsp 接收。但就是接不到,不知道哪里的原因

    每个工程的文件只有这两个CAN_TEST.c和DSP28_ECan.c是参考其他例程写的,其他的文件我没动。可就是找不出为什么不成的原因

    您能否帮我看看是 程序哪里的问题呢?

    感激不尽。

    谢谢。

    RT.zip
  • 您好,我用的是2812的eCAN。

    以下是配置功能引脚的程序,将引脚设置为相应的收、发功能。

    不知哪里缺失了什么,请您指出,谢谢.

    //配置GPIO引脚工作在eCAN功能

    EALLOW;
    GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7=1;
    GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6=1;

    //配置eCAN的RX和TX分别为eCAN的接收和发送引脚
    ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all;
    ECanaShadow.CANTIOC.bit.TXFUNC = 1;
    ECanaRegs.CANTIOC.all = ECanaShadow.CANTIOC.all;

    ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all;
    ECanaShadow.CANRIOC.bit.RXFUNC = 1;
    ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all;
    EDIS;

    期待您的回复,谢谢。

  • 1)邮箱初始化配置:首先应确定从32个邮箱中选择要配置的目标邮箱,比如配置成发送邮箱或接收邮箱,一般是成对出现的。然后是对靠近的邮箱进行ID号(标识符)的配置,数据长度,优先级的设置,是远程帧还是普通扩展数据帧等。

    具体步骤总结如下:第一步在写标识符前必须将所有邮箱屏蔽掉,ECanaRegs.CANME.all=0。(第五步,最后将要用到的邮箱配置好后,使能需要用到的邮箱,比如邮箱0和邮箱16,ECanaRegs.CANME.bit.ME0=1;ECanaRegs.CANME.bit.ME16=1;)第二步:通过向寄存器CANMC的CDR位请求改变数据区,该位允许快速更新数据消息。再第五步的时候,需要将该位写0,CPU请求正常操作。第三步,设置邮箱的ID(标识符,发送邮箱对应的接收邮箱的标识符是一致的,这个需注意),数据方向寄存器配置了发送邮箱还是接收邮箱。数据长度,发送优先级的设置,以及是否有远方应答帧的请求,向邮箱RAM区写数据(这个注意:ECanaboxes.MBOXO.MDRL.all=?ECanaboxes.MBOXO.MDRH.all=?)

    2)邮箱初始化之后,就可以对其进行发送或者接收操作啦!前面第一步主要是前奏,现在进入主题。

    消息的发送操作,分为五步:

    第一步:清除CANTRS发送请求置位寄存器---当邮箱n准备发送时,CPU将TRSn置1,启动发送。就相当于一个开关一样,当数据要被发送时,将开关TRSn闭合,则数据发送出去。上电复位,各位都被清0。接着配置发送响应寄存器CANTA,如果邮箱n中的消息已经发送成功,则相应的TAn将置位。CPU通过向TANTA中的位写1,使其复位。如果已经产生中断,向CANTA寄存器写1,则可以清除中断,向CANTA寄存器写0没有影响。上电后,寄存器所有的位都被清除。

    第二步:初始化邮箱,见第一部分。

    第三步:设置TRS请求发送标志,请求发送消息

    第四步:等待传输响应位置位,邮箱完成发送。(由0置1才能跳出循环等待,这点是关键!!!)

    第五步:复位TA和传输标志,需要向相应的寄存器位写1才能清零(这点相当重要,向该位写1才能清零,等待下一次发送!!!)。

    3)消息的接收操作,分五步操作

    第一步:设置局部接收屏蔽寄存器LAMn,它可以指明哪些标识符位

    第二步:初始化邮箱

    第三步:等待接收响应标志置位

    第四步:CPU读取邮箱中的数据

    第五步:复位接收消息挂起标志

  • 您好,我现在设计的是3块dsp之间的通信,但遇到了这样的问题:

    A的一个发送邮箱的ID为8000FFFF;  

    B的一个发送邮箱的ID为80C8FFFF;  

    C的其中2个邮箱分别接收A、B发送过来的数据;

    我通过观察寄存器发现,只能收到ID为8000FFFF的邮箱数据,而另一个好像不被响应;只有将A  DSP的复位键按下不松手,才会看到邮箱接收到了来自于B板的数据,一松手复位键,又是只能收到A板的数据,好像是A板的优先级高,永远不让B发送数据一样。也不能不让B板接收数据吧,A永远在发送……不知道这是怎么回事,怎么做才能让C同时收到A、B发送过来的数据呢?谢谢。

    期待您的回复……

    我使用中断线0,接收数据:程序如下

    Uint32 Rec_l;
    Uint32 Rec_h;


    interrupt void ECAN0INTA_ISR(void) // eCAN-A
    { struct ECAN_REGS ECanaShadow;


    do
    {
    ECanaShadow.CANRMP.all=ECanaRegs.CANRMP.all;//检查接收成功标志位位值
    }
    while(ECanaShadow.CANRMP.bit.RMP12!=1&&ECanaShadow.CANRMP.bit.RMP1!=1);
    //循环等待接收

    GpioDataRegs.GPFCLEAR.bit.GPIOF14=1;//灯亮,证明已经接收信息
    ECanaShadow.CANRMP.all = 0;
    ECanaShadow.CANRMP.bit.RMP1 = 1;
    ECanaShadow.CANRMP.bit.RMP12 = 1;
    ECanaRegs.CANRMP.all = ECanaShadow.CANRMP.all;//目的是,复位GMIF0接收成功中断标志位
    GpioDataRegs.GPFSET.bit.GPIOF14=1;//让指示灯灭,用来监测动态变化

    Rec_l=ECanaMboxes.MBOX1.MDRL.all;//收到的数据低位保存在接收邮箱Mbox1的低32位
    Rec_h=ECanaMboxes.MBOX1.MDRH.all;//收到的数据高位保存在接收邮箱Mbox1的高32位

    PieCtrl.PIEACK.bit.ACK9 = 1;//使得同组其他中断能够得到响应

    EINT;

    }

  • 这个简直了。。。。我一段时间以来调CAN一直出现这个情况程序停在那while语句,今天看到才想起是这个问题。太感谢楼主的回答。

  • 您好,我用的是TMS320F28335,我最近做的项目中包含如下的一下can总线通信系统:

      A -DSP中有2个邮箱,标识符分别为:0x8000FFFF   (发送邮箱);0x8FFFFFFF(接收邮箱)。

      B-DSP中与A对应的也有2个邮箱,0x8000FFFF   (接收邮箱);0x8FFFFFFF(发送邮箱)。

    然后我是把A中的AD采样数据结果寄存器中的数字量发给B,用仿真器和B连接,来观察B对应的邮箱里的数据,观察接收是否正常。

    把B中的一个数值常量整型25发送给A,让A稳定输出一25V电压值。

    【问题是】,

    一、如果让2个DSP中的上述的4个邮箱都工作时,用示波器观测can总线上的波形:木有任何波形,就是数据没有被传送;

    二、如果分别让2个DSP中的2个邮箱,就是一个发,另一个DSP接收数据,是能正常工作的。

    【我是这么想的】好像是 仲裁机制的问题,优先级高的一直在占用总线,而不会退出,优先级低的始终获取不了传送数据权限。

    也不知道我这样认为对不对?您是怎么处理 在2块或者多块DSP,之间进行若干个邮箱之间进行数据通信的,怎么做才能让每个邮箱都有权获取总线特权,都可以实时的进行数据传输呢?

    我的qq,1083176055@qq.com期待您的回复,谢谢。

     

  • 您好,我用的是TMS320F28335,我最近做的项目中包含如下的一下can总线通信系统:

      A -DSP中有2个邮箱,标识符分别为:0x8000FFFF   (发送邮箱);0x8FFFFFFF(接收邮箱)。

      B-DSP中与A对应的也有2个邮箱,0x8000FFFF   (接收邮箱);0x8FFFFFFF(发送邮箱)。

    然后我是把A中的AD采样数据结果寄存器中的数字量发给B,用仿真器和B连接,来观察B对应的邮箱里的数据,观察接收是否正常。

    把B中的一个数值常量整型25发送给A,让A稳定输出一25V电压值。

    【问题是】,

    一、如果让2个DSP中的上述的4个邮箱都工作时,用示波器观测can总线上的波形:木有任何波形,就是数据没有被传送;

    二、如果分别让2个DSP中的2个邮箱,就是一个发,另一个DSP接收数据,是能正常工作的。

    【我是这么想的】好像是 仲裁机制的问题,优先级高的一直在占用总线,而不会退出,优先级低的始终获取不了传送数据权限。

    也不知道我这样认为对不对?您是怎么处理 在2块或者多块DSP,之间进行若干个邮箱之间进行数据通信的,怎么做才能让每个邮箱都有权获取总线特权,都可以实时的进行数据传输呢?

    我的qq,1083176055@qq.com期待您的回复,谢谢。

    1. 您好,如果按照can2.0B协议的话,邮箱标识符ID越小的优先级越高,4块DSP之间8个邮箱同时开始传送或者接收的话,优先级高的邮箱先响应发送,优先级的后响应,优先级低的也会发送数据。
    2. 【可是我通过寄存器观察到的现象是,优先级低的一直收不到数据,根本就没有机会获得总线的使用权限,不知道这是怎么回事?
    3. 有什么办法解决这个问题,让优先级低的邮箱也能进行正常通信!非常感谢!期待您的回复……

  • 不是太理解你的描述,我的理解是

    CAN总线是串行总线,无论信息帧的优先级高低,只要有信息帧抢占了总线,要等该信息帧传输完毕,其他信息帧才能在竞争总线。

    所以只要低优先级的信息在总线上传输过,应该一定能被接收的。

    另外如果对信息帧的实时性要求不高的话,可以考虑在规定的时间片中传输信息帧。

    简单的设计,如有10条周期100ms的信息要传输,可以将100ms划分为10个10ms,在每个10ms传输一个信息帧,每100ms为1个循环,以降低信息帧间竞争总线的概率。

    复杂的设计应该参考TTCAN

  • 非常感谢您的回复。我是这样设计的,由于是实验,我就是发送“ABCDEFG”这样的字符,循环发送,以便于动态观察寄存器的值。目前我是用定时的发送模式,让低优先级的邮箱有机会赢得总线的使用权,但这样的话速度就下来了。最终我是要用于控制3个 DC/DC变换器 模块 之间的电压电流数据通信与传递控制命令。

    相关程序字段如截图:另外我想问问您有关远程帧的问题,连接如下:http://bbs.21ic.com/icview-854385-1-1.html