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.

[参考译文] RTOS/CC2650:UART_Read 不能#39;t 获取整个字符串

Guru**** 2587365 points
Other Parts Discussed in Thread: CC2650

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/595925/rtos-cc2650-uart_read-doesn-t-get-the-whole-string

器件型号:CC2650

工具/软件:TI-RTOS

您好!

我有一个应用、在该应用中、我使用 UART 将 SIM5320 GSM 调制解调器连接到处理器。 当 GSM 模块启动时、我从该模块获得一些正常的初始化消息。 之后、我发送 AT 命令、然后侦听端口以从模块获取答案。 对于响应是短字符串的命令、一切都正常。 例如、我发送 AT+CREG? 我得到:

+CREG:0、0
正常 

这正是我应该得到的结果。 但问题是,应对时间应更长。 例如、当我发送 AT+CGPSINFOCFG 时、我应该得到:

+CGPSINFO:(0-255)、(0-31)
正常 

但我只得到第一行的一部分:  

+CGPSINFO:(0 

我非常确信该模块工作正常、因为当我使用串行接口将其直接连接到计算机时、一切都正常。

我尝试从我的代码中删除 System_flush()(从串行中获取每个字符后),以查看它是否获得整个响应,但我仍然没有得到整个字符串。

我检查了具有较长响应的不同命令、我注意到我将获得31个字符、其余字符将丢失。  

我将代码放在这里:

char msg_write[]="AT+CGPSINFOCFG=?\r\n;//保留消息
UART_WRITE (UART、msg_write、sizeof (msg_write)-1);
uint32_t t0=seconds_get ();
// 而(idx<140){
while (flag2){
UART_READ (UART、INPUT、1);
MSG_READ[idx++]=输入;
System_printf ("%c"、输入);
system_flush();
if ( strstr (msg_read,"OK")!= NULL ){
flag2=false;
System_flush();
}
msg_read[0]='\0';//清除消息
idx=0;
}
MSG_READ[idx]='\0';
//System_flush();
System_printf ("%s"、msg_read);
system_flush(); 

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

    我怀疑 UART 配置不正确和/或您不能处理更长的读取。 您可能已经怀疑、31字节是 FIFO 的深度。 希望这足够线索来进一步了解调试器。

    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我检查了其他波特率、似乎我在115200中获得 FIFO 溢出。 我尝试了9600波特率、得到了完整的字符串。
    我认为串行存在问题、因为 CC2650应支持至少115200波特率。

    你对此有什么想法吗?
    如何增加 FIFO。 我在 UART 配置中使用阻塞模式。 您认为回调模式可以解决该问题吗?

    阿萨德