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.

[参考译文] CCS/TMS320F2.8335万:连续CAN传输

Guru**** 2387830 points
Other Parts Discussed in Thread: SN65HVD230, CONTROLSUITE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/618939/ccs-tms320f28335-continous-can-transmission

部件号:TMS320F2.8335万
主题中讨论的其他部件:SN65HVD230,controlSUITE

工具/软件:Code Composer Studio

大家好,

我正在使用F2.8335万实验板套件的CAN模块。 基本上我使用ADC获取传感器数据并通过CAN传输这些数据。 我尝试在一个连续的永久循环中执行此操作。 我正在使用SN65HVD230 CAN收发器。 我还 使用串行通信将传感器数据显示到LabVIEW上。 因此,我的代码由串行,ADC和CAN组成。

但这里的问题是我无法通过CAN持续传输传感器数据。 数据仅传输一次。 之后,传感器输出的任何变化都不会反映在CAN变速箱上。 尽管我能够在LabVIEW上看到连续的实时数据。

我特此附上我的代码的一部分,用于连续传输。 请建议所需的更改。

对于(;;)

用于(i=0;i<AVG;i++)

while (AdcRegs.ADCST.bit.INT_SEQ1= 0){}//等待中断
AdcRegs.ADCST.Bit.INT_SEQ1_CLR = 1;
SampleTable[i]=((AdcRegs.ADCRESULT0>>4));
Val = SampleTable[i];
f = val * 7.3260.0732万e-4;
G = f * 33.8.98305084亿 ;

浮子n = g;
ftoa (n,res,4);

浮子m = val;
ftoa (m,res1,4);

浮点o = 24.528 ;
ftoa (o,res2,4);

MSG =分辨率;
scia_msg (msg);
//while (SciaRegs.SCIFFRX.bit.RXFFST !=1){}//等待XRDY =1为空状态

//获取字符
// ReceivedChar[50]= SciaRegs.SCIRXBUF.ALL;

ECanaMbboxes.MBOX25.MDL.ALL = g;
ECanaMbboxes.MBOX25.MDH.all = f;


ECanaShadow.CANTRS.ALL = 0;
ECanaShadow.CANTRS.bit.TRS25 = 1;//为正在测试的邮箱设置TRS
ECanaRegs.CANTRS.ALL = ECanaShade.CANTRS.ALL;



ECanaShade.Canta.All = ECanaRegs.Canta.all;
} While (ECanaShade.Canta.bit.TA25 ==0);//等待设置TA5位。


ECanaShadow.Canta.all = 0;
ECanaShade.Canta.bit.TA25 = 1;//清除TA5
ECanaRegs.Canta.all = ECanaShade.Canta.all;

// loopcount ++;

}
}
}

ps. ftoa是 串行通信所需的浮点到字符串转换函数。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Gautham:

    这是我在F2.8035万项目中使用的代码片段(来自循环内),它通过SPI总线从IC读取两个RTD温度,并通过CAN连续(每秒一次)报告这些温度。

    //写入MBOX0的邮箱RAM字段
    //这是我们写入温度数据的位置!
    ECanaMboxes.MBOX0.MDL.ALL = tempBoth;
    ECanaMboxes.MBOX0.MDH.ALL = 0;
    
    
    ECanaRegs.CANTRS.ALL = 0x0.0001万;//为所有传输邮箱设置TRS
    while (ECanaRegs.Canta.all != 0x0.0001万){}//等待所有位设置。
    ECanaRegs.Canta.all = 0x0.0001万;//清除所有Tan
    



    这是我使用的Cana初始化代码。

    //设置GPIOs CAN-A功能
    InitECanGpio();
    
    //初始化所有设备外设:
    InitECana();//初始化eCAAN-A模块
    
    
    //邮箱一次可以写入16位或32位
    //写入传输的MSGID字段BEMBOX0 -15
    ECanaMboxes.0xOMEF = MSX0;所有邮箱
    
    //将邮箱0配置为Tx
    //由于此写入是到整个寄存器(而不是位
    //字段),因此不需要影子寄存器。
    ECanaRegs.CANMD.ALL = 0x0万;
    
    //启用邮箱0*////
    由于此写入到整个寄存器(而不是位
    //字段),因此不需要阴影寄存器。
    ECanaRegs.CANME.ALL = 0x0.0001万;
    
    //指定将发送8个字节
    ECanaMMboxes.MBOX0.MSGCTRL.BIT.DLC = 8;
    
    //由于此写入是对整个寄存器(而不是位
    //字段)的,因此不需要阴影寄存器。
    EALLOW;
    ECanaRegs.CANMIM.ALL = 0x0.0001万;
    EDIS;
    



    享受,
    Tom

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    连续传输相当简单。 请看一下SPRA876中的示例或任何controlSUITE示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你,汤姆!!
    请详细说明SPI与SCI的不同之处。 因为我在工作中使用SCI
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Gautham,
    如果您的问题未与您的原始帖子关联,请开始新帖子。 这使得将来的搜索更容易。