两个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]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
oblivionmiko
1楼-- · 2019-07-15 11:49
{:1:}学习学习 顶下
我会告诉你真名
2楼-- · 2019-07-15 13:55
现在串口接受一段字符怎么写啊?
201302030107
3楼-- · 2019-07-15 19:53
发发发发发发发发发发发发发发发发发发发发发发发发发发发发发发发
jpaekeo
4楼-- · 2019-07-15 21:36
看不明白你的问题是什么?

一周热门 更多>