使用HAL进行STM32L0的UART环回测试

时间:2017-11-30 13:16:38

标签: stm32 uart

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

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

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

/* 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__);
   }

}

1 个答案:

答案 0 :(得分:2)

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

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

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