找回密码
 立即注册
查看: 221|回复: 1

STC32G12K128 实验箱 4个串口 的 分析

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:101
  • 最近打卡:2026-01-28 10:26:01

36

主题

172

回帖

865

积分

高级会员

积分
865
发表于 2026-1-11 10:47:35 | 显示全部楼层 |阅读模式
串口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
    }



回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:101
  • 最近打卡:2026-01-28 10:26:01

36

主题

172

回帖

865

积分

高级会员

积分
865
发表于 2026-1-11 20:16:39 | 显示全部楼层
白水大*** 发表于 2026-1-11 11:56
无论那个串口与电脑通讯在波特率相等的情况下速率都是一样的吧?

那肯定
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-3-23 23:09 , Processed in 0.102875 second(s), 44 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表