两个STM32串口通信,按键后将数据发送显示在另一方的LCD上

2019-07-14 23:39发布

两个STM32串口通信,按键后将数据发送显示在另一方的LCD上,怎么发送一次,要按下复位键,对方才能显示??
您好:
     我在学习中遇到了如下问题希望你能予以帮助,我将不胜感激。

     两个STM32串口通信,按键后将数据发送显示在另一方的LCD上,怎么发送一次,要按下复位键,对方才能显示??

     串口助手加上发送新行在单个的STM32上能正确工作,但不发送新行,将不能结束接收,一直等待接收。
     显示是LGDP4532驱动。软件环境是MDK3.8
     具体实现代码在附件中。。。

读写函数:
u8* Usart_read(void)
{
        u8 *p,*q,t,len;
        len=0;
        p=q;
        if(USART_RX_STA&0x80)
        {                                          
                len=USART_RX_STA&0x3f;//得到此次接收到的数据长度
                for(t=0;tDR=USART_RX_BUF[t];
                        while((USART1->SR&0X40)==0);
                }
                USART_RX_STA=0;
               
        }
        return p;        
}
u8 Usart_write(u8 *p)
{
        u8 len;
        len=0;
        for(;lenDR=USART_RX_BUF[len];
                while((USART1->SR&0X40)==0);
        }        
        
        return len;
}
u8 Usart_scan(u8 *p)                //1:zuoz, 2:youz, 3:qian, 4:hout, 5:ting, 0:没有信号
{
        u8 flag;
        flag=0;
        p++;
        if(*p=='1')flag=1;
        else if(*p=='2')flag=2;
        else if(*p=='3')flag=3;
        else if(*p=='4')flag=4;
        else if(*p=='5')flag=5;
        return flag;
}
主函数:
int main(void)
{                          
        u8 len,len1;
        u8 *buf;
        *buf=0;
        len=0;
        len1=0;

        Stm32_Clock_Init(9);        //系统时钟设置
        uart_init(72,9600);                 //串口初始化为9600
        delay_init(72);                            //延时初始化
        
        LCD_Init();
        LED_Init();                                  //初始化与LED连接的硬件接口
        ZUOYOU_Init();                        //电机初始化
        KEY_Init();                        //按键初始化               
        
        while(1)
        {
                len1=KEY_Scan(0);
                if(len1)
                {
                        switch(len1)
                        {
                                case KEY_1:Usart_write("1111");break;
                                case KEY_2:Usart_write("2222");break;
                                case KEY_3:Usart_write("3333");break;
                                case KEY_4:Usart_write("4444");break;
                        }
                        len1=0;                        
                }
                buf=Usart_read();               
                if(*buf=='1'||*buf=='2'||*buf=='3'||*buf=='4'||*buf=='5')
                {        
                        LCD_ShowString(30,90,200,16,16,buf);               
                        len=Usart_scan(buf);                        
                        switch(len)
                        {
                                case 0:LCD_ShowString(30,50,200,16,16,"xian zai shi ling  ");break;
                                case 1:LCD_ShowString(30,50,200,16,16,"zheng zai zuo zhuan");LED1=0;LED2=0;LED3=0;break;
                                case 2:LCD_ShowString(30,50,200,16,16,"zheng zai you zhuan");LED1=0;LED2=0;LED3=0;break;
                                case 3:LCD_ShowString(30,50,200,16,16,"zheng zai qian jin ");break;
                                case 4:LCD_ShowString(30,50,200,16,16,"zheng zai hou tui  ");break;
                                case 5:LCD_ShowString(30,50,200,16,16,"zheng zai ting zhi ");break;
                                default:LCD_ShowString(30,50,200,16,16,"chu cuo le         ");break;
                        }
                        LCD_ShowString(30,70,200,16,16,buf);

                        len=0;
                }
        }
        
}

具体的实现代码在此处:[td]两个STM32串口通信,按键后将数据发送显示在另一方的LCD上http://bbs.elecfans.com/forum.php?mod=viewthread&tid=431873&fromuid=1206673(出处: 中国电子技术论坛)

[/td]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。