STM32L0使用HAL进行UART环回测试
UART loopback test using HAL for STM32L0
我是单片机编程新手。我想使用 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__);
}
}
您不能同时发送和接收。 HAL_UART_Transmit
是一个阻塞函数,所以当函数returns数据已经发送完毕。当您调用 HAL_UART_Receive
时,数据已收到。你应该这样做:
HAL_UART_Receive_IT(&huart2, str2, 5);
HAL_UART_Transmit(&huart2, str1, 5, 1000);
您可以通过中断或通过 DMA 来完成,但您应该在发送之前开始接收。
我是单片机编程新手。我想使用 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__);
}
}
您不能同时发送和接收。 HAL_UART_Transmit
是一个阻塞函数,所以当函数returns数据已经发送完毕。当您调用 HAL_UART_Receive
时,数据已收到。你应该这样做:
HAL_UART_Receive_IT(&huart2, str2, 5);
HAL_UART_Transmit(&huart2, str1, 5, 1000);
您可以通过中断或通过 DMA 来完成,但您应该在发送之前开始接收。