TRIGGERFAN 发表于 2022-3-24 12:41:24

STC15W408AS SOP-16的串口2没法用

用了贵公司的STC15W408AS-35I-SOP16,测试了串口1数据收发和IO口(接了个小灯)都没问题,定时器1和2也都没问题(小灯翻转),可是到串口2程序就会卡在sendstring里面,while(busy)的busy位一直得不到清零,给SBUF写数据后进不去串口2终端服务函数,我用的是ISP里的例程

    P_SW2 &= ~S2_S0;            //S2_S0=0 (P1.0/RxD2, P1.1/TxD2)
//P_SW2 |= S2_S0;             //S2_S0=1 (P4.6/RxD2_2, P4.7/TxD2_2)

#if (PARITYBIT == NONE_PARITY)
    S2CON = 0x50;               //8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
    S2CON = 0xda;               //9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
    S2CON = 0xd2;               //9位可变波特率,校验位初始为0
#endif

    T2L = (65536 - (FOSC/4/BAUD));   //设置波特率重装值
    T2H = (65536 - (FOSC/4/BAUD))>>8;
    AUXR = 0x14;                //T2为1T模式, 并启动定时器2
    IE2 = 0x01;               //使能串口2中断
    EA = 1;
    while (1)
    {
                        SendString("STC15F2K60S2\r\nUart Test !\r\n");
                        delayms(1000);P11=!P11;
                        if(sendback){
                                sendback=0;
                                SendString("sendback3333333333");
                        }
    }

/*----------------------------
UART2 中断服务程序
-----------------------------*/
void Uart2() interrupt 8 using 1
{
    if (S2CON & S2RI)
    {
      S2CON &= ~S2RI;         //清除S2RI位
      //P0 = S2BUF;             //P0显示串口数据
      //P2 = (S2CON & S2RB8);   //P2.2显示校验位
                                sendback=1;
    }
    if (S2CON & S2TI)
    {
      S2CON &= ~S2TI;         //清除S2TI位
      busy = 0;               //清忙标志
    }
}

请问各位大哥有没有遇到类似情况?
还有一个问题就是引脚图里的txd2,rxd2都是在P37和P36引脚上的,可是手册里的切换却说的是在P10和P11,以及P46和P47之间切换?很迷惑,感谢各位大哥帮助解答

TRIGGERFAN 发表于 2022-3-24 13:18:44

我又回去看了一下手册里的总体描述,原来是只有一组串口然后分三路用啊,本来想加快速度照着isp的例程走,结果把自己坑了

小李非刀 发表于 2022-3-24 22:09:06

注意,STC15W408AS只有一个串口,可以切换到3组IO而已(P3.0/P3.1、P3.6/P3.7、P1.6/P1.7)。
STC15W408AS只有两个定时器Timer0和Timer2,没有Timer1.
页: [1]
查看完整版本: STC15W408AS SOP-16的串口2没法用