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.

[参考译文] RM44L920:SCI 非中断模式接收到的数据不一致。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1222845/rm44l920-sci-non-interrupt-mode-data-recieved-is-not-consistent

器件型号:RM44L920

我将 LIN 用作 SCI 模式(SCI2)、以便仅接收我从 ESP32板通过 UART 发送的消息。当我尝试接收到该消息时、接收到的数据在一段时间内不一致时、某些随机数据会被接收到。

我将在下面附上代码:

void get_gps(){
   J=0;
   sciReceiveByte (scilinREG);
   字符 c = scilinREG->RD;
   if (c='$'){
            sciReceive (scilinREG、buffer_size、(unsigned char *) rxBuffer);

            char *标记;

                令牌= strtok (rxBuffer、"、");
                Latitude = strtod (token、endptr);

                while (token!= NULL && j<4){

                    如果(j =1){
                      经度= strtod (token、endptr);
                    }
                    否则、如果(j =2){
                        速度= strtod (token、endptr);
                    }
                    否则、如果(j==3){
                       海拔高度= strtod (token、&endptr);
                    }

                    令牌= strtok (NULL、"、");
                    J++;
                }
         }
   }

Buffer_size = 32 ,char rxBuffer[buffer_size];

SCI 数据格式:波特率-115200,停止位-1,奇偶校验-偶数,奇偶校验-使能,数据位-8。

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

    Karthik、您好、

    您能否尝试下面稍作修改的代码? 修改是"sciReceiveByte"。它会自行从 RD 寄存器返回字符、因此无需从 RD 寄存器进一步读取。

    void get_gps(){
       J=0;

      字符;
       c = sciReceiveByte (scilinREG);


       if (c='$'){
                sciReceive (scilinREG、buffer_size、(unsigned char *) rxBuffer);

                char *标记;

                    令牌= strtok (rxBuffer、"、");
                    Latitude = strtod (token、endptr);

                    while (token!= NULL && j<4){

                        如果(j =1){
                          经度= strtod (token、endptr);
                        }
                        否则、如果(j =2){
                            速度= strtod (token、endptr);
                        }
                        否则、如果(j==3){
                           海拔高度= strtod (token、&endptr);
                        }

                        令牌= strtok (NULL、"、");
                        J++;
                    }
             }
       }

    --

    谢谢。此致、
    Jagadish。

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

    你好、jadish、

    确保我将进行测试并顺便做上述方法是快速和准确的接收 SCI 数据或我应该使用中断方法。

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

    Karthik、您好、

    以上方法对于接收 SCI 数据或我应该使用中断方法快速而准确。

    如果您的代码没有要执行的任何其他模块代码、则上述方法很好、但如果您的代码涉及多个代码模块、则最好使用中断方法、而不是轮询字符接收。

    --

    谢谢。此致、
    Jagadish。

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

    Jagadish、您好!

    是的,我还有一些其他的模块,如 CAN ,SPI,ADC。所以你能给我发送一个代码,我可以用中断模式复制同样的代码。

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

    Karthik、您好、

    是的、您可以进入中断模式以获得优化的解决方案。

    --

    谢谢。此致、
    Jagadish。