金牌会员
 
- 积分
- 1010
- 金钱
- 1010
- 注册时间
- 2016-11-8
- 在线时间
- 233 小时
|
2金钱
使用的板子是 mini ,程序是选自原子串口实验源码例程。。
代码如下
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
printf("\r\n您发送的消息为:\r\n");
for(t=0;t<len;t++)
{
USART1->DR=USART_RX_BUF[t];
while((USART1->SR&0X40)==0);//等待发送结束
}
printf("\r\n\r\n");//插入换行
USART_RX_STA=0;
}else
{
times++;
if(times%5000==0)
{
printf("\r\nALIENTEK MiniSTM32开发板 串口实验\r\n");
printf("正点原子@ALIENTEK\r\n\r\n\r\n");
}
if(times%500==0)printf("请输入数据,以回车键结束\r\n");
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
delay_ms(10);
}
}
疑问在标红部分,为什么在这个for循环里要加上“while((USART1->SR&0X40)==0);//等待发送结束”?
如果删掉此句,无论接收多少字符,则只会发送一个字符。。
有几点不明白的:
① 当发送仍未完成的时候,while后的判断语句为真,此处相当于while(1),死循环,后面无语句,空循环。。那么for循环会怎么执行?
②我理解,若无此句,执行循环体时判断t<len,此条件满足,会一直执行循环,把所有接收内容进行发送。。结果当然不是了。。
还望大神们赐教。。
|
|