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.

[参考译文] TMS570LC4357:sciReceive API 用于不同长度的输入

Guru**** 2468610 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1042735/tms570lc4357-scireceive-api-use-for-input-of-different-length

器件型号:TMS570LC4357

我希望使用 sciReceive API 来接收每次长度不同的数据。
 

void sciReceive (sciBASE-t * sci、uint32 length、uint8 * data)

示例:  

如果我想接收数据,这是第一次:abc (3字节长度)

第二次如果我想接收数据:qwerty (5字节)


如果我的串行端口上的数据长度每次都不同、该怎么办?

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

    您好!

    您可以定义两个 UART 器件之间的通信协议。 在发送真实数据(2字节、3字节或...)之前,设备首先发送长度。

    2.您可以向 sciReceive()函数添加超时代码。  

      TIME_OUT = 0;

      while (length > 0U) //您可以使用较大的 length 值(例如 length=100);也可以将循环更改为 while (1)
      {

           TIME_OUT++:


           /*SAFETYMCUSW 28 D MR:NA "找到可能无限的循环-执行序列的硬件状态检查"*/
          while (((sci->FLR &(uint32) SCI_RX_INT)== 0U)
          {

             如果(TIME_OUT > xxx)

               中断或返回
          }/*等待*/

          /*SAFETYMCUSW 45 D MR:21.1 "仅此驱动程序允许有效的非 NULL 输入参数"*/
          *data =(uint8)(sci->RD & 0x000000FFU);
          

          /*SAFETYMCUSW 45 D MR:21.1 "仅此驱动程序允许有效的非 NULL 输入参数"*/
          /*SAFETYMCUSW 567 S MR:17.1,17.4 "需要指针增量"*/
          Data++;
          长度--;
       }

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

     如何每次发送不同的数据长度  

    示例:  在 SCI3端口上,我希望接收不同长度的输入数据。

    计时 器如何帮助跳过长度预条件以使用 void sciReceive (sciBASE-t * sci、uint32 length、uint8 * data)接收数据。

    我不 想像上图中突出显示的那样使用长度、因为我每次都会发送不同长度的数据。

    有可能吗?

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

    这取决于您向 TMS570器件发送数据的方式。  

    如果您知道每个字符之间的最长间隔、则可以使用超时。

    您可以发送一个特殊字符来告诉接收器这是最后一个字符。