CH554T设置为24M时钟,串口要更改设置?

void mInitSTDIO( )

{

    UINT32 x;

    UINT8 x2; 


    SM0 = 0;    //该位为0选择8位数据异步通信

    SM1 = 1;    //该位为1设置可变波特率,由定时器T1或者T2产生

    //SM0=0, SM1=1 模式1,8位异步通信方式,波特率可变,由定时器T1或者T2产生

    SM2 = 0;    //串口0使用模式1;在模式1时,如果SM2=1,那么只有接收到有效的停止位时,接收才有效

    

    //使用Timer1作为波特率发生器

    RCLK = 0;   //UART0接收时钟,该位为0选择Timer1溢出脉冲产生波特率

    TCLK = 0;   //UART0发送时钟,该位为0选择Timer1溢出脉冲产生波特率

    PCON |= SMOD;//SMOD=0慢速模式, SMOD=1快速模式

    x = 10 * FREQ_SYS / UART0_BUAD / 16;    //如果更改主频,注意x的值不要溢出                            

    x2 = x % 10;

    x /= 10;

    if ( x2 >= 5 ) x ++;    //四舍五入


    TMOD = TMOD & ~ bT1_GATE & ~ bT1_CT & ~ MASK_T1_MOD | bT1_M1;   //0X20,Timer1作为8位自动重载定时器

    T2MOD = T2MOD | bTMR_CLK | bT1_CLK; //Timer1时钟选择

    TH1 = 0-x;  //12MHz晶振,buad/12为实际需设置波特率

    TR1 = 1;    //启动定时器1

    TI = 1;

    REN = 1;    //串口0接收使能

}


请问在系统时钟设为24M时,这里的串口配置程序需要修改? x = 10 * FREQ_SYS / UART0_BUAD / 16;    //如果更改主频,注意x的值不要溢出 TH1 = 0-x;  //12MHz晶振,buad/12为实际需设置波特率 这两句怎么理解?如果产品工作环境温差大的话,这个串口的误差率在允许范围内?

x的值不要溢出:在32位变量加上554能够设置的主频上限,这个32位变量是不会超出的。

关于TH1,其实我们只要关注波特率计算公式就行了:

image.png


谢谢,综合考虑还是用12M的时钟了


只有登录才能回复,可以选择微信账号登录