rubnun 发表于 2025-1-20 16:56:27

Ayb_ice 发表于 2025-1-20 16:47
你这逻辑不好,1发往2,2发往1,理论上会死循环

我用两个串口调试助手发的,串口1收到数据后会触发串口1的中断,再通过串口2往外发数据,但是不会触发串口2的中断。我感觉现在的逻辑上应该是不会出现死循环的,应该是buffer溢出了。发送的数据越长,出现的乱码频率越多。数据短可能发个10条才会出现一次乱码。数据长大概3条就出现一次。

rubnun 发表于 2025-1-20 17:06:57

rubnun 发表于 2025-1-20 16:56
我用两个串口调试助手发的,串口1收到数据后会触发串口1的中断,再通过串口2往外发数据,但是不会触发串 ...



右边是发送的数据,左边是接收,隔一段时间就会出现重复的乱码

Lkck8210 发表于 2025-1-20 17:09:28

试试改用非阻塞式收发
void main()
{
        P0M0=0x00;
        P0M1=0x00;
        P1M0=0x00;
        P1M1=0x00;
        P2M0=0x00;
        P2M1=0x00;
        P3M0=0x00;
        P3M1=0x00;
        P4M0=0x00;
        P4M1=0x00;
        P5M0=0x00;
        P5M1=0x00;

        UartInit();
        ES=1;
        IE2=0X01;
        EA=1;
        UartSendStr("Hello World\r\n");

        while(1)
        {
                //UartSendStr("Hello World\r\n");
                if(rptr!=wptr)
                {
                        if(!busy2)
                        {
                                busy2=1;
                                S2BUF=buffer;
                                if(rptr>=MAX)
                                {
                                        rptr=0;
                                }
                        }
                }
                //串口2收到数据往串口1发数据
                if(rptr2!=wptr2)
                {
                        if(!busy)
                        {
                                busy=1;
                                SBUF=buffer2;
                                if(rptr2>=MAX)
                                {
                                        rptr2=0;
                                }
                        }
                }
        }
}

rubnun 发表于 2025-1-20 17:19:44

Lkck8210 发表于 2025-1-20 17:09
试试改用非阻塞式收发

还是不行,还是会出现隔几条就会出现乱码,而且现在收到的数据没一条是正确的,每条都有数据缺失

乘风飞扬 发表于 2025-1-20 18:05:53

以前写过类似的测试程序,用附件例子试试看。

欢迎哈哈哈3 发表于 2025-1-20 20:49:13

可以多用几个busy看看
页: 1 [2]
查看完整版本: 串口收发出现乱码