我正在尝试以中断模式实现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;
}
}
您必须检查您的UART状态,如果传输线路繁忙,则会出现错误。尝试在每个调用之间插入以下代码;
while (HAL_UART_GetState(&UartHandle) != HAL_UART_STATE_READY){
//Do Something..
}