我知道串口的DR是双寄存器,收发数据都会经过它。但是如果这样,那么如果采用全双工方式,对接收过来的数据进行处理的话,发送出去的数据也必定会被进行相同的处理啊。那这样就乱了。
[mw_shl_code=c,true] int main(void)
{
u8 *p,*p1;
delay_init();
SystemInit();
NVIC_Configuration();
uart_init(115200);
uart2_init(115200);
uart3_init(9600);
LED_Init();
TFT_Init();
KEY_Init();
TIME_init();
NVIC_init();
GUI_Init();
POINT_COLOR=RED;
LCD_Clear(BLACK);
while(1)
{
key=KEY_Scan(1);
uCGUI();
sendmessage();
if(USART2_RX_STA)
{
if(flag!=1)
{
p=USART2_RX_BUF;
delay_ms(10);
LED1=!LED1;
POINT_COLOR=BLUE;
LCD_ShowString(50,160,48,p);
USART2_RX_STA=0;
}
else if(flag==1)
{
flag=0;
USART2_RX_STA=0;
}
}
}
}
void sendmessage(void)
{
int t=0;
buf[0]= (u8)((speed/100)%10);
buf[1]= (u8)((speed/10)%10);
buf[2]= (u8)(speed%10);
if(key==1)
{
delay_ms(20);
t=0;
for(t=0;t<3;t++)
{
USART_SendData(USART2, buf[t]+0x30);//
flag=1;
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);//
}
}
} [/mw_shl_code]
这是我试过的方法:当发送数据时,给置一个标志位FLAG=1,然后判断接收过来的数据时,判断flag是否等于1. 如果等于1就置0,不进行操作;如果不等于1就说明数据时zigbee发过来的,进行显示。但是结果都是会显示发送和接收两个的数据。 |