初级会员

- 积分
- 65
- 金钱
- 65
- 注册时间
- 2016-11-7
- 在线时间
- 15 小时
|
本帖最后由 2576936901 于 2017-7-30 09:20 编辑
请大家帮帮忙,我找了好久也不知道为什么,我写了一个串口程序,当上位机往单片机发送数据的时候,数据保存在数组中,单片机接收完后把数组中的数据返回到上位机,问题出现在下面的while()语句中,没注释的语句是有问题的,在调试过程中,发现当条件不满足的时候也不跳出循环。然后被注释的语句是正常的语句,当条件不满足的时候正常跳出循环。逻辑上这两个语句应该是一样的,但是发现MDK出现不同的反应。。。。。。。我想问大家,出现这种原因是我的逻辑问题还是MDK编译器的问题?源码在附件链接中,之前是配置串口2,后来找不出问题以为是串口问题,就把程序改到串口1,但是没有修改注释
#include "MyUsart.h"
#include "sys.h"
#include "delay.h"
extern u16 My_USART_RX_STA;//1表示单片机接收完数据
extern char My_USART_RX_BUF[200];//单片机用于保存从上位机发送来的数据
int main(void)
{ int i;
int len;
Stm32_Clock_Init(9);
delay_init(72);
MyNvicInit();
My_UsartInit();
while(1)
{
if(My_USART_RX_STA&0x8000)//单片机接受完数据的标志
{
len=My_USART_RX_STA&0x3fff;//获取字节个数
for(i=0;i<len;i++)
{
while((USART1->SR&0x80)!=1);//问题语句,条件为假的时候不跳出循环
//while((USART1->SR&0x80)==0); //没问题语句,条件为假的时候跳出循环
USART1->DR=My_USART_RX_BUF;//把数组中的数据发送到上微机
}
My_USART_RX_STA=0;//发送完所有数据后把接受标志清零
}
}
}
|
|