xie2101 发表于 2026-1-11 10:47:35

STC32G12K128 实验箱 4个串口 的 分析

串口1 的 例程是 :10-串口1中断模式与电脑收发测试

   配置流程是UART1_config;
   串口1 可以使用的定时器 是 timer1 和timer2;

      S1BRT = 1;      //S1 为0 是 使用timer1,为1 是 使用timer2,当前这个例程用的是timer2

      SetTimer1Baudraye(Baudrate);
      SetTimer2Baudraye(Baudrate);
   设置完定时器后,就是设置引脚了。
      
    SCON = (SCON & 0x3f) | 0x40;    //UART1模式, 0x00: 同步移位输出, 0x40: 8位数据,可变波特率, 0x80: 9位数据,固定波特率, 0xc0: 9位数据,可变波特率

//PS= 1;    //高优先级中断
    ES= 1;    //允许中断
    REN = 1;    //允许接收
    P_SW1 &= 0x3f;
    P_SW1 |= 0x00;      //UART1 switch to, 0x00: P3.0 P3.1, 0x40: P3.6 P3.7, 0x80: P1.6 P1.7, 0xC0: P4.3 P4.4






void SetTimer2Baudraye(u32 dat)
{
    T2R = 0;                //Timer stop
    T2_CT = 0;      //Timer2 set As Timer
    T2x12 = 1;      //Timer2 set as 1T mode
    T2H = (u8)(dat / 256);
    T2L = (u8)(dat % 256);
    ET2 = 0;    //禁止中断
    T2R = 1;                //Timer run enable
}

void SetTimer1Baudraye(u32 Baudrate1)

    {
      TR1 = 0;
      T1_CT = 0;                //Timer1 set As Timer
      T1x12 = 1;                //Timer1 set as 1T mode
      TMOD &= ~0x30;//Timer1_16bitAutoReload;
      TH1 = (u8)(Baudrate1 / 256);
      TL1 = (u8)(Baudrate1 % 256);
      ET1 = 0;    //禁止中断
      TR1 = 1;
    }




串口2 的 例程是 :11-串口2中断模式与电脑收发测试
      配置流程是 UART2_config;
       串口2 可以使用的定时器 是 timer2;
      
      S2CFG |= 0x01;   //使用串口2时,W1位必需设置为1,否则可能会产生不可预期的错误
      S2CON = (S2CON & 0x3f) | 0x40;    //UART2模式, 0x00: 同步移位输出, 0x40: 8位数据,可变波特率, 0x80: 9位数据,固定波特率, 0xc0: 9位数据,可变波特率
      ES2   = 1;         //允许中断
      S2REN = 1;         //允许接收
      S2_S= 1;         //UART2 switch to: 0: P1.0 P1.1,1: P4.6 P4.7



void SetTimer2Baudraye(u32 dat)
{
    T2R = 0;                //Timer stop
    T2_CT = 0;      //Timer2 set As Timer
    T2x12 = 1;      //Timer2 set as 1T mode
    T2H = (u8)(dat / 256);
    T2L = (u8)(dat % 256);
    ET2 = 0;    //禁止中断
    T2R = 1;                //Timer run enable
}


串口3 的 例程是 :12-串口3中断模式与电脑收发测试
   配置流程是 UART3_config;
    串口3 可以使用的定时器 是 timer2 和 timer3;


    ES3= 1;       //允许UART3中断
    S3_S = 1;       //UART3 switch bit1 to: 0: P0.0 P0.1,1: P5.0 P5.1



void SetTimer2Baudraye(u32 dat)// 使用Timer2做波特率.
{
    T2R = 0;                //Timer stop
    T2_CT = 0;      //Timer2 set As Timer
    T2x12 = 1;      //Timer2 set as 1T mode
    T2H = (u8)(dat / 256);
    T2L = (u8)(dat % 256);
    ET2 = 0;    //禁止中断
    T2R = 1;                //Timer run enable


    S3CON = 0x10;       //8位数据, 使用Timer2做波特率发生器, 允许接收
}

void SetTimer3Baudraye(u32 Baudrate3 )
    {
      T3R = 0;                //Timer stop
      S3CON = 0x50;       //8位数据, 使用Timer3做波特率发生器, 允许接收
      T3H = (u8)(Baudrate3 / 256);
      T3L = (u8)(Baudrate3 % 256);
      T3_CT = 0;      //Timer3 set As Timer
      T3x12 = 1;      //Timer3 set as 1T mode
      T3R = 1;                //Timer run enable
    }



串口4 的 例程是 :13-串口4中断模式与电脑收发测试

      配置流程是   UART4_config
          串口4 可以使用的定时器 是 timer2 和 timer4;


    ES4= 1;       //允许UART4中断
    S4_S = 0;       //UART4 switch bit2 to: 0: P0.2 P0.3, 1: P5.2 P5.3


void SetTimer2Baudraye(u32 dat)// 使用Timer2做波特率.
{
    T2R = 0;                //Timer stop
    T2_CT = 0;      //Timer2 set As Timer
    T2x12 = 1;      //Timer2 set as 1T mode
    T2H = (u8)(dat / 256);
    T2L = (u8)(dat % 256);
    ET2 = 0;    //禁止中断
    T2R = 1;                //Timer run enable




      S4CON = 0x10;       //8位数据, 使用Timer2做波特率发生器, 允许接收
}

void SetTimer4Baudraye(u32 Baudrate4 )

    {
      T4R = 0;      //Timer stop
      S4CON = 0x50;       //8位数据, 使用Timer4做波特率发生器, 允许接收
      T4H = (u8)(Baudrate4 / 256);
      T4L = (u8)(Baudrate4 % 256);
      T4_CT = 0;      //Timer3 set As Timer
      T4x12 = 1;      //Timer3 set as 1T mode
      T4R = 1;      //Timer run enable
    }



xie2101 发表于 2026-1-11 20:16:39

白水大虾2016 发表于 2026-1-11 11:56
无论那个串口与电脑通讯在波特率相等的情况下速率都是一样的吧?

那肯定

xie2101 发表于 2026-7-10 17:18:16

串口1

页: [1]
查看完整版本: STC32G12K128 实验箱 4个串口 的 分析