我正在编写一个程序,通过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));
}