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.

[参考译文] TMS570LS3137:通过 SPI 接收2个字节的数据、并通过 CAN 发送1个字节的数据

Guru**** 2604225 points
Other Parts Discussed in Thread: TMS570LS3137, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/749423/tms570ls3137-recieving-2-bytes-of-data-through-spi-and-transmit-1-byte-of-data-through-can

器件型号:TMS570LS3137
主题中讨论的其他器件: HALCOGEN

 我是一个初学者,有一些疑问 我的任务是通过 SPI 接收100字节的数据、并通过 CAN 发送相同的数据。

通过研究 TMS570LS3137的 TRM,我了解到通过 SPI 函数 mibspiGetData()最多可以接收2个字节的数据。 通过 CAN,可以通过 canTransmit()函数传输1个字节的数据。

我的问题是:

1.我研究过可以传输0-8字节的数据,但 canTransmit()函数将其限制为1字节,为什么?

2.在 SPI 之后,从缓冲区中存储的2字节数据访问1字节数据(用于 CAN 发送)时,也会遇到问题。 请帮我解决这个问题

我的代码:


/*用户代码开始(0)*/
/*用户代码结束*/

/*包含文件*/

#include "sys_common.h"
#include "mibspi.h"
#include "CAN.h"

/*用户代码开始(1)*/
int 数据;
int *pdata;
uint16 rxbuffer [];
uint8 rb[];
uint8缓冲器;


/*用户代码结束*/

/**@fn void main (void)
*@应用程序主函数简介
*@请注意、默认情况下、此函数为空。
*
*此函数在启动后调用。
*用户可以使用此函数来实现应用程序。
*

/*用户代码开始(2)*/
/*用户代码结束*/

int main (空)

/*用户代码开始(3)*/
mibspiInit();
canInit();

int i、j;

for (i=0;i<10;i++)

for (j=0;j<5;j++)

rxbuffer[]=*(pdata);
pdata +;

mibspiGetData (mibspiREG1、0、rxbuffer);

/*卡在这里...*/

/*用户代码结束*/
返回0;

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

    e2e.ti.com/.../6648.MIBSPI_5F00_SLAVE_5F00_TMS570LS1224PGE.ZIPHello、

    这就是如何声明 canTransmit 函数的方式:

    uint32 canTransmit (canBASE-t *节点、uint32 MessageBox、const uint8 *数据)

    其中数据是指向缓冲区的指针。

    例如:

    uint8 TX_DATA[8]={'H'、'E'、'R'、'C'、'U'、'L'、'E'、'S'、'0'}; //缓冲8个字节

    CANTransmit (canREG1、canMESSAGE_BOX1、TX_DATA);//传输8个字节- H E R C U L E S*/

    在 HALCoGen 文件夹下、您可以找到如何使用 CAN 的示例。

    关于 SPI:

    在 MIBSPI 模式下、您可以设置用于接收/发送数据的传输组。

    在 HALCoGen 中、您可以设置要传输的缓冲区大小(最多128字节)和字符长度(2..16位)。

    附加的是使用 TG (HALCoGen 和 CCS)接收数据的工程。

    此致、

    MIOI

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我根据相关要求编写了此代码

    void main (void)


    uint16 rxp1[50];
    int i、j;
    uint16 *p;
    uint16 val;


    for (i=0;i<10;i++)

    p=rxp1;
    for (j=0;j<5;j++)

    Val=*p;
    mibspiGetData (mibspiREG1、0、val);

    uint8 val_l=(val 和0x00FF);
    canTransmit (canREG1、canMESSAGE_BOX1、val_l);

    Val = val <<8;

    uint8 val_h=(val&0x00FF);
    canTransmit (canREG1、canMESSAGE_BOX1、val_h);
    P++;

    P=(p+5);



    /*用户代码结束*/

    但我在 CCS 中遇到这些警告
    您能不能确定是哪个器件导致了此错误。

    cantransmit:类型"uint8"的参数与类型"const uint8 *"的参数不兼容
    mibbsugetdata :D 类型“uint16”的参数与类型“uint16 *”的参数不兼容
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    请参阅函数是如何声明的。
    uint32 canTransmit (canBASE-t *节点、uint32 MessageBox、const uint8 * data)-数据是指针、但 val_l 和 val_h 是 uint8。

    uint32 mibspiGetData (mibspi_t * mibspi、uint32组、uint16 * data)-数据是指针 uint16、但 val 是 uint16。

    SPI 字符长度可设置为2至16位。
    最大 CAN 有效载荷为8字节。 这意味着最多可以同时发送8个字节。 您无需发送两次数据。

    此致、
    米罗