【问题标题】:UART loopback test using HAL for STM32L0使用 HAL 对 STM32L0 进行 UART 环回测试
【发布时间】:2018-05-14 10:32:09
【问题描述】:

我是 MCU 编程新手。我想使用 HAL 测试 UART 环回(镜像)。 IAR 项目由 CubeMX 为 STM32L071RZT6 生成。这段代码在主永恒循环中:

HAL_UART_Transmit(&huart2, str1, 5, 1000); HAL_UART_Receive(&huart2, str2, 5, 1000);

我只得到第一个元素填充 str2(以空结尾的字符串)。我该如何解决?

/* USART2 init function */
 static void MX_USART2_UART_Init(void)
{

   huart2.Instance = USART2;
   huart2.Init.BaudRate = 115200;
   huart2.Init.WordLength = UART_WORDLENGTH_8B;
   huart2.Init.StopBits = UART_STOPBITS_1;
   huart2.Init.Parity = UART_PARITY_NONE;
   huart2.Init.Mode = UART_MODE_TX_RX;
   huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
   huart2.Init.OverSampling = UART_OVERSAMPLING_16;
   huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
   huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
   if (HAL_UART_Init(&huart2) != HAL_OK)
   {
    _Error_Handler(__FILE__, __LINE__);
   }

}

【问题讨论】:

标签: stm32 uart


【解决方案1】:

您不能同时发送和接收。 HAL_UART_Transmit是一个阻塞函数,所以当函数返回时数据已经发送。当您致电HAL_UART_Receive 时,数据已收到。你应该这样做:

HAL_UART_Receive_IT(&huart2, str2, 5);
HAL_UART_Transmit(&huart2, str1, 5, 1000);

您可以通过中断或 DMA 来完成,但您应该在发送之前开始接收。

【讨论】:

  • 为什么他要在发送之前开始接收?
猜你喜欢
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 2014-09-12
  • 2021-02-16
  • 2020-08-04
  • 2019-08-19
  • 2017-05-26
  • 1970-01-01
相关资源
最近更新 更多