中级会员
 
- 积分
- 288
- 金钱
- 288
- 注册时间
- 2012-9-13
- 在线时间
- 65 小时
|
发表于 2012-9-17 12:00:02
|
显示全部楼层
经过跟踪调试,发现程序有以下问题:
1、全局变量cnt在接收中断和定时中断中都修改了,这样当串口未收到数据时,是向外输出提示信息。但如果我向内部发送数据(暂不以0D0A结尾),则会造成输出提示信息的时间间隔紊乱。
2、若向串口输入以0D0A结尾的字符串,则在字符串完全输入时,USART_Rcvr的最高位置位,从而进入以下代码:
if(USART_Rcvr & 0x80)
{
len=USART_Rcvr&0x3f;//得到此次接收到的数据长度
cout("\n您发送的消息为:\n");
for(t=0;t<len;t++)
{
USART1->DR=USART_RcvDat[t];
while((USART1->SR&0X40)==0);//等待发送结束
}
cout("\n\n");//插入换行
USART_Rcvr=0;
}
在此段代码的for循环中,你采用了查询等待的方式,但因为此时串口发送中断开启,在USART1->DR=USART_RcvDat[t];发送第一个字节完成时,则进入发送中断,在中断中将发送完成标志位TC清空了,所以接下来的while((USART1->SR&0X40)==0);将永远等不到TC置位,程序执行到此处时进入死循环。 |
|