我正在使用STM32Cube_FW_G0_V1.5.0
固件。我观察到,我总是在函数HAL_WaitOnFlagUntilTimeout
中得到一个超时(函数添加在下面)。
有人有什么可以出错的建议吗?如何具体解决?
部分main.c代码:
/* USER CODE BEGIN PV */
uint8_t txdata[30] = "Hallo Peter \n\r";
/* USER CODE END PV */
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_I2C1_Init();
MX_RTC_Init();
MX_SPI1_Init();
MX_USART1_UART_Init();
MX_USART2_UART_Init();
MX_DAC1_Init();
/* USER CODE BEGIN 2 */
HAL_UART_Transmit(&huart1, txdata, sizeof(txdata), 100);
在发送函数中调用的超时的HAL函数代码:
HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
uint32_t Tickstart, uint32_t Timeout)
{
/* Wait until flag is set */
while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
{
/* Check for the Timeout */
if (Timeout != HAL_MAX_DELAY)
{
if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
{
/* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error)
interrupts for the interrupt process */
ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE_RXFNEIE | USART_CR1_PEIE |
USART_CR1_TXEIE_TXFNFIE));
ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
huart->gState = HAL_UART_STATE_READY;
huart->RxState = HAL_UART_STATE_READY;
__HAL_UNLOCK(huart);
return HAL_TIMEOUT;
}
这是UART配置(Acconeer的数据表):
发布于 2022-11-22 17:54:25
很可能对方没有被配置为硬件流控制,所以STM32从未看到设置了清晰的发送信号。
您可以在STM32 UART上禁用硬件流控制,或者将另一端配置为使用硬件流控制。(并确保所有RTS/CTS信号都连接。)
https://stackoverflow.com/questions/74450098
复制相似问题