首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >板卡与GPS模块之间的通信

板卡与GPS模块之间的通信
EN

Stack Overflow用户
提问于 2018-03-16 13:29:56
回答 1查看 498关注 0票数 0

我目前在开发板(STM32L476RG)和GPS模块(GP-207U)之间的对话中遇到了问题。我的代码现在所做的是,它可以打印出从GPS到PuTTY的第一个数据包,并将继续打印相同的数据包,即使我从开发板上拔下Tx线,PuTTY仍将继续打印。我怀疑要么是存储接收到的值的缓冲区没有得到更新(实现),要么是HAL_UART_Receive()函数只运行一次。(接收函数在main中的While(1)中,所以我很困惑)

enter image description here (我拔下了GPS,Putty还在打印,所以接收函数在收到来自GPS的第一个数据包后没有做任何事情)

代码语言:javascript
复制
/*retrive data from GPS*/
char UARTRxBuffer[1024] = "";
char RxBuffer[1024] = "";

void GetGPS(void) {
    HAL_UART_Receive(&huart3, (uint8_t *)UARTRxBuffer, 1024, 1000);
    HAL_Delay(100);
    sprintf(RxBuffer,"%s\r\n\r\n", UARTRxBuffer);
    HAL_UART_Transmit(&huart2, (uint8_t *)RxBuffer, strlen(RxBuffer), 5000);
    HAL_Delay(100);
}

GetGPS()放入main()中的while(1)中。

我尝试了所有基于我的猜测的方法,但都不起作用。

感谢您的任何帮助!

EN

回答 1

Stack Overflow用户

发布于 2018-03-17 13:57:50

我怀疑在第二次/后续尝试读取HAL_UART_Receive期间,对GPS的调用超时(在代码中为1000ms)。如果是这样,缓冲区内容将不会被清除或覆盖,从而导致重复打印相同的数据。阅读GPS数据表/手册可能有助于找出最大轮询速度(此处显示为~200ms,考虑到2x 100ms的延迟),并在GPS设备无法跟上时调整延迟。

尝试此操作以确认

代码语言:javascript
复制
HAL_StatusTypeDef status = HAL_UART_Receive(/*same as above*/);

if(status == HAL_OK){
  // got valid data
  sprintf(RxBuffer,"%s\r\n\r\n", UARTRxBuffer);
  HAL_UART_Transmit(&huart2, (uint8_t *)RxBuffer, strlen(RxBuffer), 5000);
}
else{
  sprintf(RxBuffer,"read timeout.\r\n\r\n");
  HAL_UART_Transmit(&huart2, (uint8_t *)RxBuffer, strlen(RxBuffer), 5000);
}

API参考文档here第1037/2232页

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49313755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档