STM32 Uart中断突发发送问题

问题描述 投票:0回答:1

我正在尝试以中断模式实现uart,但显然出了点问题。这是我的问题:我想尽快发送一些字符串(例如:想发送10次字符串“ test123”),但是由于某种原因(我犯了一些错误,但是不知道那是哪里)错误)。我使用STM32CubeIDE,mcu是stm32f407vgt6。第一次成功发送代码后,将代码放入Error_Handler()中,这是不可接受的。当我在每次传输之间使用延迟时,所有字符串都将成功传输,但是为什么可以用这种方式完成。代码为

uint8_t TxData[] = "test123\n";
bool flagTxCmpltUsart = true;

for(i = 0; i < 10; i++){`

    if(HAL_UART_Transmit_IT(&huart3, TxData, strlen(TxData)) != HAL_OK)
    {
        Error_Handler();
    } 
        Wait_Unit_Uart_Tx_Is_Complete();
        Reset_Uart_Tx_Complete_Flag();}
void Reset_Uart_Tx_Complete_Flag(void) 
{
    flagTxCmpltUsart = false;
}

void Wait_Unit_Uart_Tx_Is_Complete(void)
{
    while(!flagTxCmpltUsart){}
}

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance == USART3)
    {
        flagTxCmpltUsart = true;
    }
}
c stm32 interrupt uart stm32f4discovery
1个回答
0
投票

您必须检查您的UART状态,如果传输线路繁忙,则会出现错误。尝试在每个调用之间插入以下代码;

while (HAL_UART_GetState(&UartHandle) != HAL_UART_STATE_READY){
   //Do Something..
} 
© www.soinside.com 2019 - 2024. All rights reserved.