你这逻辑不好,1发往2,2发往1,理论上会死循环
我用两个串口调试助手发的,串口1收到数据后会触发串口1的中断,再通过串口2往外发数据,但是不会触发串口2的中断。我感觉现在的逻辑上应该是不会出现死循环的,应该是buffer溢出了。发送的数据越长,出现的乱码频率越多。数据短可能发个10条才会出现一次乱码。数据长大概3条就出现一次。 rubnun 发表于 2025-1-20 16:56
我用两个串口调试助手发的,串口1收到数据后会触发串口1的中断,再通过串口2往外发数据,但是不会触发串 ...
右边是发送的数据,左边是接收,隔一段时间就会出现重复的乱码
试试改用非阻塞式收发
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;
}
}
}
}
}
Lkck8210 发表于 2025-1-20 17:09
试试改用非阻塞式收发
还是不行,还是会出现隔几条就会出现乱码,而且现在收到的数据没一条是正确的,每条都有数据缺失
以前写过类似的测试程序,用附件例子试试看。 可以多用几个busy看看
页:
1
[2]