【问题标题】:STM32 Nucleo-WL55JC1 UART reading wrongSTM32 Nucleo-WL55JC1 UART读错
【发布时间】:2022-12-18 13:48:31
【问题描述】:

我正在尝试使用 STM32 Nucleo-WL55JC1 读取我的 GNSS 模块。首先是我的主循环代码

while (1)
{
      uint8_t buff[500];

      HAL_UART_Receive(&huart1, buff, strlen((char*)buff), HAL_MAX_DELAY);
      HAL_UART_Transmit(&huart2, buff, strlen((char*)buff), HAL_MAX_DELAY);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
}

当我运行代码时,我的串行监视器只打印几条消息,然后它就死机了

$PSTMVER,GNSSLIB_8.4.18.25_CP_ARM*07  
$GPTXT,DEFAULT LIV3FL CONFIGURATION*12  
$PSTMVER,OS20LIB_4.4.0_ARM*40  
$PSTMVER,GPSAPP_2.11.0_CP_LIV3FL_RC9_ARM*20  
$PSTMVER,BINIMG_4.6.15_CP_LIV3FL_RC9_ARM*27

然后我将接收超时更改为1000,它开始输出一些 NMEA 数据,但正如您所看到的,它与其他消息混在一起

$PSTMCPU,20.86,-1,98*4F  
$GPRMC,060732.000,V,0745.75046,S,11023.31916,E,,,071222,,,N*64  $GPGGA,060732.000,0745.75046,S,11023.31916,E,0,00,99.0,172.57,M,0.0,M11023.31916,E,060731.000,V,N*54

然后我拔掉并尝试插入 MCU,现在它只循环播放这条消息

$PSTMVER,GPSAPP_2.11.0_CP_LIV3FL_RC9_ARM*20  
$PSTMVPSTMVER,OS20LIB_4.4.0_ARM*40  
$PSTMVER,GPSAPP_2.11.0_CP_LIV3FL_RC9_ARM*20  
$PSTMVPSTMVER,OS20LIB_4.4.0_ARM*40  
$PSTMVER,GPSAPP_2.11.0_CP_LIV3FL_RC9_ARM*20  
$PSTMVPSTMVER,OS20LIB_4.4.0_ARM*40

我试过在 ESP 上使用相同的模块,它正确地打印了消息

$PSTMCPU,21.69,-1,98*4F
$GPRMC,062153.000,V,0745.76371,S,11023.30606,E,,,071222,,,N*6C
$GPGGA,062153.000,0745.76371,S,11023.30606,E,0,02,99.0,189.71,M,0.0,M,,*77
$GPVTG,,T,,M,,N,,K,N*2C
$GNGSA,A,1,26,27,,,,,,,,,,,99.0,99.0,99.0*1F
$GNGSA,A,1,,,,,,,,,,,,,99.0,99.0,99.0*1E
$GPGSV,2,1,05,26,53,342,32,27,39,189,27,22,35,019,,23,14,149,*75
$GPGSV,2,2,05,21,07,251,,,,,,,,,,,,,*4E
$GLGSV,2,1,06,70,70,053,,74,33,309,,71,29,352,,69,26,142,27*6F
$GLGSV,2,2,06,80,15,158,,85,11,205,,,,,,,,,*69
$GPGLL,0745.76371,S,11023.30606,E,062153.000,V,N*5F

这是我第一次使用 STM32 IDE 及其 HAL(我之前只使用 Arduino IDE)所以我有点不知道为什么我的输出与 ESP 相比真的不同。

【问题讨论】:

    标签: c stm32 uart


    【解决方案1】:

    strlen((char*)buff) 无效,因为 buff 的内容不确定。
    考虑HAL_UART_Receive(&huart1, buff, sizeof buff, HAL_MAX_DELAY);

    .. 并使用 HAL_UART_Receive() 的返回值来确定成功级别。

    HAL_UART_Transmit() 应该只尝试传输接收到的字符数,而不是strlen((char*)buff)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-13
      • 2021-06-21
      • 1970-01-01
      • 2023-03-24
      • 2021-04-15
      • 2017-05-26
      • 2021-12-16
      • 2021-12-19
      相关资源
      最近更新 更多