神农鼎 发表于 2024-1-29 13:22:15








njtfl 发表于 2024-2-6 22:02:41

神农鼎 发表于 2023-4-6 11:15


我共用T2, UART1与PC通信做为调试串口,UART4与串口屏通信,没有问题。
增加UART3(与同一块板子上的ESP32通信),主程序中只要增加“Uart3Init();”,串口屏上就看不到UART4发送的数据了,问题出在哪儿了呢?

神农鼎 发表于 2024-2-6 22:16:49

用仿真功能来调试分析你程序错在哪

gnensis 发表于 2024-4-10 21:28:21

请教下,我在STC8H8K64U上面使用 Timer2 做波特率发生器;同时使用串口1,2,3,4在中断方式下收发数据。现在的问题时1,3,4三个串口可以一起正常工作、或者1,2串口能一起正常工作。只要串口3,或者串口4初始化,串口2就不工作了。
串口一初始化代码:
        TR1 = 0;
        AUXR &= ~0x01;      //S1 BRT Use Timer1;
        AUXR |=(1<<6);    //Timer1 set as 1T mode
        TMOD &= ~(1<<6);    //Timer1 set As Timer
        TMOD &= ~0x30;      //Timer1_16bitAutoReload;
        TH1 = (u8)((65536UL - (FOSC / 4) / BAUD1) / 256);
        TL1 = (u8)((65536UL - (FOSC / 4) / BAUD1) % 256);
        ET1 = 0;    //禁止中断
        TR1= 1;
        SCON = (SCON & 0x3f) | 0x40;
        ES= 1;    //允许中断
        REN = 1;    //允许接收
      P_SW1 & 0x3f;       //Clear bit7,bit6
        P_SW1 |= UART_IOSEL;
串口二初始化代码:
        AUXR &= ~(1<<4);    //Timer2 stop
        AUXR &= ~(1<<3);    //Timer2 set As Timer
        AUXR |=(1<<2);    //Timer2 set as 1T mode
        T2H = (65536UL - (FOSC / 4) / BAUD2) / 256;
        T2L = (65536UL - (FOSC / 4) / BAUD2) % 256;
      IE2&= ~(1<<2);        //Disable Timer 2 Interrupt.
        AUXR |=(1<<4);    //Timer run enable
        IE2&= ~1;                    //Disable Uart2 Interrupt.
        S2CON &= ~(1<<7);   // 8位数据, 1位起始位, 1位停止位, 无校验
      IE2   |= 1;         //ES2
        S2CON |= (1<<4);    //允许接收
      P_SW2 & ~(1);
        P_SW2 |= UART_IOSEL;        //UART2 switch to: 0: P1.0 P1.1
串口三、初始化代码:
        AUXR &= ~(1<<4);    //Timer stop
        AUXR &= ~(1<<3);    //Timer2 set As Timer
        AUXR |=(1<<2);    //Timer2 set as 1T mode
        T2H = (65536UL - (FOSC / 4) / BAUD2) / 256;
        T2L = (65536UL - (FOSC / 4) / BAUD2) % 256;
        IE2&= ~(1<<3);    //禁止中断
      IE2&= ~(1<<2);
        AUXR |=(1<<4);    //Timer run enable
        S3CON &= ~(1<<7);   //mode0:8位数据, 1位起始位, 1位停止位, 无校验
      S3CON &= ~(1<<6);   //S3ST3:select Timer 2
      //IE2:Bit0-ES2; Bit1-ESP1; bit2-ET2; bit3-ES3; bit4-ES4
        IE2   |= (1<<3);    //ES3允许中断
        S3CON |= (1<<4);    //允许接收
      //P_SW2:bit2-S4_S, bit1-S3_S, bit0-S2_S
      P_SW2 & ~(1<<1);
        P_SW2 |= (UART_IOSEL < 1);        //UART3 switch to: 0: P0.0,P0.1
串口四初始化代码:
        AUXR &= ~(1<<4);    //Timer2 stop
        AUXR &= ~(1<<3);    //Timer2 set As Timer
        AUXR |=(1<<2);    //Timer2 set as 1T mode
        T2H = (65536UL - (FOSC / 4) / BAUD2) / 256;
        T2L = (65536UL - (FOSC / 4) / BAUD2) % 256;
       
      IE2&= ~(1<<2);
        AUXR |=(1<<4);    //Timer run enable

        IE2&= ~(1<<4);    //Uart4 Interrupt Disable.
        S4CON &= ~(1<<7);   // 8位数据, 1位起始位, 1位停止位, 无校验
      S4CON &= ~(1<<6);   //S3ST3:select Timer 2
      //IE2:Bit0-ES2; Bit1-ESP1; bit2-ET2; bit3-ES3; bit4-ES4
        IE2|= (1<<4);                //Uart4 Interrupt Enable.
        S4CON |= (1<<4);    //允许接收
      //S2_S:bit0; S3_S:bit1; S4_S:bit2
      //S2_S:0-P1.0,P1.1;1-P4.6,P4.7
      //S3_S:0-P0.0,P0.1;1-P5.0,P5.1
      //S4_S:0-P0.2,P0.3;1-P5.2,P5.3
   
      //P_SW2:bit2-S4_S, bit1-S3_S, bit0-S2_S
      P_SW2 & ~(1<<2);
        P_SW2 |= (UART_IOSEL < 2);        //UART4 switch to: 0: P0.2 P0.3

神农鼎 发表于 2024-4-10 21:54:43



深圳国芯人工智能有限公司-实验箱 (stcai.com)




神农鼎 发表于 2024-4-10 21:56:59


页: 1 [2]
查看完整版本: 波特率发生器要共用,只能共用 T2,串口1,串口2,串口3,串口4