深山老妖 发表于 2024-9-5 00:15:41

求助AI32G12K64的串口波特率问题

本帖最后由 DebugLab 于 2024-9-5 00:22 编辑

四路串口全开,其中1 2 4三均为115200,全部共用定时器2,串口3为9600,单独用定时器3,测试发送测试数据,发现1和4都是115200的波特率,可是2和3都是9600的波特率,2应该为115200的,却成了9600,有点奇怪,配置如下:

void Serial_Init(void)//串口初始化函数
{      
      TMOD = 0xf0;//16位自动重装
      TL0 = 0x78;
      TH0 = 0xec; //5毫秒 @12.000MHz
      TF0 = 0;
      TR0 = 1;      //开启定时器0
      ET0 = 1;      //开启定时器0中断

      SCON = 0x50;                //8位数据,可变波特率
      AUXR |= 0x01;                //串口1选择定时器2为波特率发生器
      AUXR |= 0x04;                //定时器时钟1T模式
      T2L = 0xE6;                        //设置定时初始值 115200 @12.000MHz
      T2H = 0xFF;                        //设置定时初始值
      AUXR |= 0x10;                //定时器2开始计时
      ES = 1;
      
      S2CON = 0x50;                //8位数据,可变波特率 串口2 115200
      ES2   = 1;
               
      S3CON = 0x10;                //8位数据,可变波特率
      S3CON |= 0x40;                //串口3选择定时器3为波特率发生器
      T4T3M |= 0x02;                //定时器时钟1T模式
      T3L = 0xC7;                        //设置定时初始值9600
      T3H = 0xFE;                        //设置定时初始值
      T4T3M |= 0x08;                //定时器3开始计时
      ES3   = 1;
      
      S4CON = 0x10;//8位可变波特率,
      S4CON &= 0xBF; //串口4选择定时器2为波特率发生器
      ES4   = 1;
      
      EA   = 1;   //开启全局中断
}

DebugLab 发表于 2024-9-5 00:37:25


深山老妖 发表于 2024-9-5 01:11:42

DebugLab 发表于 2024-9-5 00:37


非常感谢!

liuzonggong 发表于 2024-9-5 07:47:26

DebugLab 发表于 2024-9-5 00:37


这个是正确的,大多数人不静静的读手册。
页: [1]
查看完整版本: 求助AI32G12K64的串口波特率问题