这个程序为什么过不去,一直执行while循环

[复制链接]
1961|13
 楼主| jxmzzr 发表于 2013-7-25 16:36 | 显示全部楼层 |阅读模式
能不能帮我看一个程序?
while(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)==RESET)
{
XBeeEndSend(ID,0x00,0x00);串口1发送数据函数
delay_nms(1000);
}
Buffer=USART_ReceiveData(USART2); //接受数串口2的数据
if(Buffer==0xA)//判断是否为起始位

这个程序为什么过不去,一直执行while循环

串口2没有收到数据,串口1就循环发,串口2有收到数据的话,就去处理其他的数据了
初衷是这样的
zeluo 发表于 2013-7-25 19:12 | 显示全部楼层
难道是触发中断位没有及时清除吗   楼主  有这个可能
linfeng24 发表于 2013-7-25 19:35 | 显示全部楼层
检查USART的配置,看开中断没有?
haibian826 发表于 2013-7-27 09:51 | 显示全部楼层
发送数据后,要查询是否发送成功,才能走下一步。。。。
我贴一个代码,你看下
USART_SendData(USART1 , TxBuf[i]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);

只有第二句通过了,才能说明发送成功,程序往下走才有意义
hxb20122012 发表于 2013-7-27 11:56 | 显示全部楼层
请问,一下,谁发数据给串口2了??
hxb20122012 发表于 2013-7-27 11:57 | 显示全部楼层
看错了。
hxb20122012 发表于 2013-7-27 12:26 | 显示全部楼层
你第一步要判断USART1的数据是不是真的发送给了USART2,
hxb20122012 发表于 2013-7-27 12:27 | 显示全部楼层
你最好是要等一帧数据发送完成之后再发送一帧,你就直接XBeeEndSend(ID,0x00,0x00);数据会变乱的。
拿起书本 发表于 2013-7-27 18:44 | 显示全部楼层
如果是限定的发一个数组的字串,那么那个是用来限制 无限制发的
huangfeng33 发表于 2013-8-1 19:00 | 显示全部楼层
你在后面可以做个施密特触发器做信号整形
 楼主| jxmzzr 发表于 2013-8-1 19:01 | 显示全部楼层
串口2没有收到数据,串口1就循环发,串口2有收到数据的话,就去处理其他的数据了
初衷是这样的
 楼主| jxmzzr 发表于 2013-8-1 19:02 | 显示全部楼层
zeluo 发表于 2013-7-25 19:12
难道是触发中断位没有及时清除吗   楼主  有这个可能

没有,这个是在main()主函数里面查询的
 楼主| jxmzzr 发表于 2013-8-1 19:03 | 显示全部楼层
USART_InitStructure.USART_BaudRate = 9600;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  //USART_InitStructure.USART_Clock = USART_Clock_Disable;
  //USART_InitStructure.USART_CPOL = USART_CPOL_Low;
  //USART_InitStructure.USART_CPHA = USART_CPHA_2Edge;
  //USART_InitStructure.USART_LastBit = USART_LastBit_Disable;
  USART_Init(USART1, &USART_InitStructure);


  USART_ClearFlag(USART1, USART_FLAG_TC);  
  /* Enable USART1 */
  USART_Cmd(USART1, ENABLE);

  USART_InitStructure2.USART_BaudRate = 2400;
  USART_InitStructure2.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure2.USART_StopBits = USART_StopBits_1;
  USART_InitStructure2.USART_Parity = USART_Parity_No;
  USART_InitStructure2.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure2.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  //USART_InitStructure2.USART_Clock = USART_Clock_Disable;
  //USART_InitStructure2.USART_CPOL = USART_CPOL_Low;
  //USART_InitStructure2.USART_CPHA = USART_CPHA_2Edge;
  //USART_InitStructure2.USART_LastBit = USART_LastBit_Disable;
  USART_Init(USART2, &USART_InitStructure2);


  USART_ClearFlag(USART2, USART_FLAG_TC);  
  /* Enable USART1 */
  USART_Cmd(USART2, ENABLE);
这是串口初始化的函数配置
outstanding 发表于 2013-8-1 20:09 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

460

主题

2188

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部