串口发送,检测是否完成

2019-07-25 11:20发布

本帖最后由 yzqgoodjob 于 2017-11-14 15:33 编辑

死循环中有下面三句:

{
//////////////////////////////////////
USART1->DR = 0x31;
while((USART1->SR&0x40)==0);
USART1->DR = 0x32;
/////////////////////////////////////

  ……
  ……
  ……
//
//

}
结果:

串口助手里只有一只接收到2222222222222……
(如果在两次写寄存器之间延迟1ms的花,1和2都能发送)


请教:
1.是什么原因造成只能成功发送2的?
2.是这句while((USART1->SR&0x40)==0);判断功能没有实现吗?
3.有较好的解决办法吗?


多谢~






友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
hgr211
1楼-- · 2019-07-25 11:51
 精彩回答 2  元偷偷看……
LIGONG004
2楼-- · 2019-07-25 15:48
UART5->DR = 'A';                //·¢Ëíêy¾Y
                while((UART5->SR&0X40)==0);        //μè′y·¢Ëííê±Ï
                for(i=1000;i>0; i--);
                UART5->DR = 'T';                //·¢Ëíêy¾Y
                while((UART5->SR&0X40)==0);        //μè′y·¢Ëííê±Ï
                for(i=1000;i>0; i--);
                UART5->DR = 0x1A;                //·¢Ëíêy¾Y
                while((UART5->SR&0X40)==0);        //μè′y·¢Ëííê±Ï
                for(i=1000;i>0; i--);       
yzqgoodjob
3楼-- · 2019-07-25 17:14
LIGONG004 发表于 2017-11-14 14:59
UART5->DR = 'A';                //·¢Ëíêy¾Y
                while((UART5->SR&0X40)==0);        //μè′y·¢Ëííê ...

要加for()的延迟才行吗?有没有别的方法,原子的例程也只用了while判断,为什么我这样写就不行?
xyl210xyl
4楼-- · 2019-07-25 19:38
yzqgoodjob 发表于 2017-11-14 15:16
要加for()的延迟才行吗?有没有别的方法,原子的例程也只用了while判断,为什么我这样写就不行?

for跟while没差啊
yzqgoodjob
5楼-- · 2019-07-25 19:41
xyl210xyl 发表于 2017-11-14 15:23
for跟while没差啊

我说的while是判断寄存器这个方法:while((UART5->SR&0X40)==0);,并不是用while来延时

我想问的是我程序里while((UART5->SR&0X40)==0);这条语句起作用了吗?
如果没有话怎么改正?
yzqgoodjob
6楼-- · 2019-07-26 01:10
 精彩回答 2  元偷偷看……

一周热门 更多>