打印

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

[复制链接]
1708|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);

只有第二句通过了,才能说明发送成功,程序往下走才有意义

使用特权

评论回复
5
hxb20122012| | 2013-7-27 11:56 | 只看该作者
请问,一下,谁发数据给串口2了??

使用特权

评论回复
6
hxb20122012| | 2013-7-27 11:57 | 只看该作者
看错了。

使用特权

评论回复
7
hxb20122012| | 2013-7-27 12:26 | 只看该作者
你第一步要判断USART1的数据是不是真的发送给了USART2,

使用特权

评论回复
8
hxb20122012| | 2013-7-27 12:27 | 只看该作者
你最好是要等一帧数据发送完成之后再发送一帧,你就直接XBeeEndSend(ID,0x00,0x00);数据会变乱的。

使用特权

评论回复
9
拿起书本| | 2013-7-27 18:44 | 只看该作者
如果是限定的发一个数组的字串,那么那个是用来限制 无限制发的

使用特权

评论回复
10
huangfeng33| | 2013-8-1 19:00 | 只看该作者
你在后面可以做个施密特触发器做信号整形

使用特权

评论回复
11
jxmzzr|  楼主 | 2013-8-1 19:01 | 只看该作者
串口2没有收到数据,串口1就循环发,串口2有收到数据的话,就去处理其他的数据了
初衷是这样的

使用特权

评论回复
12
jxmzzr|  楼主 | 2013-8-1 19:02 | 只看该作者
zeluo 发表于 2013-7-25 19:12
难道是触发中断位没有及时清除吗   楼主  有这个可能

没有,这个是在main()主函数里面查询的

使用特权

评论回复
13
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);
这是串口初始化的函数配置

使用特权

评论回复
14
outstanding| | 2013-8-1 20:09 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

460

主题

2188

帖子

12

粉丝