欢迎哈哈哈3 发表于 2024-11-12 16:40:24

Ai8A8K64D4串口相关问题

本帖最后由 DebugLab 于 2024-11-12 22:40 编辑

大佬们问下,我用Ai8A8K64D4单片机串口2与ESP32通信,能够单独发送和接收数据,但是将两个功能合在一起接收发送数据,单片机就卡死了,这是什么原因呢
下面是程序:

void Uart2() interrupt 8 using 1
{
      IE2=0X00;
    if (S2CON & S2RI)//串口2接受数据
    {
      S2CON &=0x50;


      RX_buffer = S2BUF;                        
      if(RX_buffer=='+')//当第0个数据位是+号时,开始接受数据
      {
               RX_num++;

          if(RX_buffer=='-')//如果最后一个数据为-号时,就表示结束
          {
                flag1=1;
                }                                       
                        }
                else {RX_num=0;flag1=0;}      ////当第0个数据位不是+号时,不接受数据               
                        if(RX_num>30) //当数据的长度超过30个,RX_num = 0
                              RX_num = 0;                        
      }
    if (S2CON & S2TI)//串口2发送数据
    {
                        S2CON &=0x50;
         busy2 = 0;                        
                }
                IE2=0X01;
}

主程序

for(;;)
      {
      if(flag1==1)//flag1=1表示数据接受完毕,将接受的数据显示在液晶屏1602上
                {
                Print(0,0, RX_buffer);
                Print(1,0, RX_buffer);
                Print(2,0, RX_buffer);
                Print(3,0, RX_buffer);
                Print(4,0, RX_buffer);
                Print(5,0, RX_buffer);
                Print(6,0, RX_buffer);
                Print(7,0, RX_buffer);
                Print(8,0, RX_buffer);
                Print(9,0, RX_buffer);
                Print(10,0, RX_buffer);
                Print(11,0, RX_buffer);
                Print(12,0, RX_buffer);
                Print(13,0, RX_buffer);
                Print(14,0, RX_buffer);
                Print(15,0, RX_buffer);
                RX_num = 0;
                flag1=0;                        
                }
                sprintf(dataBuf,"Temp:%3.1fC\r\n",32.5);
                PrintString("AT+CIPSEND=0,12\r\n",17);                //通过ESP32发送数据到手机APP上
                DelayMs(1000);                              
                PrintString(dataBuf,12);

      }

邮箱 发表于 2024-11-12 17:39:56

接收
S2CON &=0x52;
发送
S2CON &=0x51;

试一下行不?

欢迎哈哈哈3 发表于 2024-11-12 18:48:45

邮箱 发表于 2024-11-12 17:39
接收
S2CON &=0x52;
发送


不行哦{:5_358:}

zhange 发表于 2024-11-12 19:42:18

没有联动过{:4_168:}{:4_168:}

邮箱 发表于 2024-11-12 19:45:34

本帖最后由 邮箱 于 2024-11-12 19:47 编辑

EA = 1; 写了???

发完整一点程序



仿真看卡在哪了


欢迎哈哈哈3 发表于 2024-11-12 20:39:24

邮箱 发表于 2024-11-12 19:45
EA = 1; 写了???

发完整一点程序


EA=1在程序初始化时,就打开了

欢迎哈哈哈3 发表于 2024-11-12 20:40:30

欢迎哈哈哈3 发表于 2024-11-12 20:39
EA=1在程序初始化时,就打开了

完整程序,只有等下了,我明天再传的

欢迎哈哈哈3 发表于 2024-11-12 20:41:16

zhange 发表于 2024-11-12 19:42
没有联动过

好吧{:5_358:}

欢迎哈哈哈3 发表于 2024-11-12 21:11:55

wnagming 发表于 2024-11-12 20:41
发送接收同时执行,中断方式会强行停止未完成的操作,考虑将波特率设置小一点,或者使用串口DMA。 ...

欢迎哈哈哈3 发表于 2024-11-12 21:16:38

欢迎哈哈哈3 发表于 2024-11-12 21:11


程序中已经设置过,当进入中断就关闭串口中断的,中断程序结束后再串口中断的
页: [1] 2
查看完整版本: Ai8A8K64D4串口相关问题