最近在写串口相关的程序,百度的讲解和数据手册(中文)的讲法就不提了,下面说说依然存在的问题和解决方法。
现象
1.串口初始化时直接TC=0,TC=0。并且加入死循环确定清零。
USART_ClearFlag(USART2,USART_FLAG_TXE);
USART_ClearFlag(USART2,USART_FLAG_TC);
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=RESET);
2.主函数使用如下代码,尽量避免是其他串口的影响
temp1=0xa0;
temp2=0xa0;
if(USART_GetFlagStatus(USART1,USART_FLAG_TC)==1) //US1用作printf打印
temp1=250; USART_ClearFlag(USART1,USART_FLAG_TC); if(USART_GetFlagStatus(USART2,USART_FLAG_TC)==1)
temp2=250;
USART_SendData(USART2,temp1);
while(USART_GetFlagStatus(USART2, USART_FLAG_TC)!=SET); //读SR
USART_SendData(USART2,temp2);
while(USART_GetFlagStatus(USART2, USART_FLAG_TC)!=SET); //读SR
3.我程序的初始化顺序,我查下来没有发现问题,同事也看了一下,如果有什么没注意的地方希望大家说说。
RCC_Configuration();
usart_config(115200);
NVIC_Configuration();
SysTick_Init();
4.出现的结果就是
串口发送的数据temp2是250,证明US2的SR的TC位居然是置1的,所以我推荐发送函数这样处理,每步发送前清零。
void usart_tx(u8 dat)
{
USART_ClearFlag(USART2,USART_FLAG_TC);
USART_SendData(USART2, dat);
while(USART_GetFlagStatus(USART2, USART_FLAG_TC)!=SET); //相当于是读了SR
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>