多串口使用

STM32三个串口的调试

串口一与其他串口的区别

串口一使用高速时钟,挂在APB2上面;
波特率设置为115200;
其他串口使用低速时钟,挂在APB1上面;
波特率设置为9600

注意事项

TX引脚设置为复用推挽输出,速度为50M
RX引脚设置为浮空输入

出现的错误及解决办法

错误:
本次调试的是串口一二三,调试的过程中发现串口一的在接收时会丢失第一位数据,而另外两个正常 。
解决办法:

        if(USART1_RX_STA&0x8000)
	{					   
		len=USART1_RX_STA&0x3fff;//得到此次接收到的数据长度
		printf("\r\n串口1发送数据为:\r\n\r\n");
		for(t=0;t<len;t++)
		{
		     while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
		     USART_SendData(USART1, USART1_RX_BUF[t]);//向串口1发送数据
		}
		printf("\r\n\r\n");//插入换行
		USART1_RX_STA=0;
	}

将等待发送结束放到向串口发送数据即可,具体原因不清楚。

猜你喜欢

转载自blog.csdn.net/qq_43413381/article/details/84698897