STM32 UART仅发送少量字节然后停止

时间:2016-10-26 12:41:06

标签: c serial-port embedded stm32 uart

我正在编写一个程序,通过UART将STM32F429开发板的串行数据发送到PC。程序发送一条消息,但每当它应该继续以相同的字节数发送数据时停止(157)。

我通过PC上的终端程序收到的数据是正确的,但终端只显示收到的157个字节与我给出的输入无关。 电路板仍然运行并且while循环继续执行(在调试中使用计数器监视检查)但是在157字节之后没有在端口上接收到新数据。

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_USART1_UART_Init();
    __HAL_UART_ENABLE_IT(&huart1, UART_IT_TC);

    /* Infinite loop */
    while (1)
    {
       if(serialFlag)
       {
           char Message[13];
           for(int i=1;i<6;i++)
           {
               SendMessage("Hello\n\r");
               HAL_Delay(1);
           }

           serialFlag=false;
       }
    }
}

我的UART传输后的ISR

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
    __HAL_UART_FLUSH_DRREGISTER(&huart1);
}

初​​始化:

static void MX_USART1_UART_Init(void)
{
     huart1.Instance = USART1;
     huart1.Init.BaudRate = 115200;
     huart1.Init.WordLength = UART_WORDLENGTH_8B;
     huart1.Init.StopBits = UART_STOPBITS_1;
     huart1.Init.Parity = UART_PARITY_NONE;
     huart1.Init.Mode = UART_MODE_TX_RX;
     huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
     huart1.Init.OverSampling = UART_OVERSAMPLING_16;
     if (HAL_UART_Init(&huart1) != HAL_OK)
     {
        Error_Handler();
     }
}

此过程处理发送到UART的文本

void SendMessage(char str[]) 
{
    char *result = (char *)malloc(strlen(str)+1);
    strcpy(result,str);
    HAL_UART_Transmit_IT(&huart1,(uint8_t*)result, strlen(str));
}

0 个答案:

没有答案