首页 > 其他分享 >N76E003使用双串口,波特率异常(115200 bps)

N76E003使用双串口,波特率异常(115200 bps)

时间:2023-08-12 09:02:01浏览次数:47  
标签:115200 u32Baudrate 16.6 MHz 串口 波特率 65536

1、如下图通过数据手册可以看出在16Mhz的时钟下115200会有较大误差,故须将时钟配置为16.6Mhz

2、使用双串口的情况下串口0使用timer1作为时钟,串口1使用timer3作为时钟,在这种情况下,实际上timer1的时钟是16.588Mhz,需要按16.588Mhz来计算波特率,否则波特率有较大误差。(即便如此,在某些芯片上,波特率仍有固定误差,应和物料有关)
系统时钟16.6Mhz设置代码如下:

sfr RCTRIM0 = 0x84;
sfr RCTRIM1 = 0x85;
void MODIFY_HIRC_166(void)
{
    unsigned char hircmap0,hircmap1;
    unsigned int trimvalue16bit;
    /* 因为只有开机才能重新加载RCTRIM0和RCTRIM1的值,所以检查开机标志*/
    if ((PCON&SET_BIT4)==SET_BIT4)
    {
        hircmap0 = RCTRIM0;
        hircmap1 = RCTRIM1;
        trimvalue16bit = ((hircmap0<<1)+(hircmap1&0x01));
        trimvalue16bit = trimvalue16bit - 15;
        hircmap1 = trimvalue16bit&0x01;
        hircmap0 = trimvalue16bit>>1;
        TA=0XAA;
        TA=0X55;
        RCTRIM0 = hircmap0;
        TA=0XAA;
        TA=0X55;
        RCTRIM1 = hircmap1;
        /* 修改HIRC值后,清除上电标志 */
        PCON &= CLR_BIT4;
    }
}

波特率设置示例代码如下:

void InitialUART0_Timer1(UINT32 u32Baudrate)    //T1M = 1, SMOD = 1
{
    SCON = 0x52;     //UART0 Mode1,REN=1,TI=1
    TMOD |= 0x20;    //Timer1 Mode1

    set_SMOD;        //UART0 Double Rate Enable
    set_T1M;
    clr_BRCK;        //Serial port 0 baud rate clock source = Timer1

#ifdef FOSC_160000
    //TH1 = 256 - (1000000/u32Baudrate+1);          /*16 MHz */
    TH1 = 256 - (1036750/u32Baudrate+1);         /*16.588 MHz */
    //TH1 = 256 - (1037500/u32Baudrate+1);         /*16.6 MHz */
#endif       

#ifdef FOSC_221184
    TH1 = 256 - (1382400/u32Baudrate);               /*22.1184 MHz */
#endif
    set_TR1;
}

void InitialUART1_Timer3(UINT32 u32Baudrate) //use timer3 as Baudrate generator
{
    P02_Quasi_Mode;        //Setting UART pin as Quasi mode for transmit
    P16_Quasi_Mode;        //Setting UART pin as Quasi mode for transmit

    SCON_1 = 0x50;        //UART1 Mode1,REN_1=1,TI_1=1
    T3CON = 0x08;          //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1), UART1 in MODE 1

    clr_BRCK;

#ifdef FOSC_160000

    //RH3    = HIBYTE(65536 - (1000000/u32Baudrate)-1);      /*16 MHz */
    //RL3    = LOBYTE(65536 - (1000000/u32Baudrate)-1);      /*16 MHz */

    RH3    = HIBYTE(65536 - (1037500/u32Baudrate));          /*16.6 MHz */
    RL3    = LOBYTE(65536 - (1037500/u32Baudrate));          /*16.6 MHz */
#endif

#ifdef FOSC_166000
    RH3    = HIBYTE(65536 - (1037500/u32Baudrate));           /*16.6 MHz */
    RL3    = LOBYTE(65536 - (1037500/u32Baudrate));           /*16.6 MHz */
#endif
    
    set_TR3;         //Trigger Timer3  
}

但是,在实测的情况下,发现在超频的状态下,仍然会有误差,会出现接收的字节错误的情况。

标签:115200,u32Baudrate,16.6,MHz,串口,波特率,65536
From: https://www.cnblogs.com/tlazy-12138/p/17624318.html

相关文章

  • Python 读取 Arduino 串口数据
    serial读取串口数据初始化serimportserialser=serial.Serial('com1',9600,timeout=1)初始化的参数ser=serial.Serial(port=None,#numberofdevice,numberingstartsat#zero.ifeverythingfails,theuser#canspecifyadevicestring,......
  • 蓝牙技术在工业物联网 (IIoT)中的应用_串口透传蓝牙模块
     物联网(IoT)正在通过托管和可扩展的数字解决方案帮助全球各行各业提高效率。更具体地说,工业物联网(IIoT)侧重于连接石油和天然气、水电以及制造业等关键行业的机器和设备。在工厂中,连接传感器在机器上的应用被用来收集有价值的数据,用于状态监测和预测性维护。目标是使用这......
  • 关于串口USART使用时相关注意事项
    1、关于串口波特率的计算波特率计算公式如下:TX/RX波特率=FCLK/(16*USARTDIV)USARTDIV=DIV_Mantissa+(DIVFraction/16)以USART1波特率115200为例,FCLK为72M,则USARTDIV值为39.0625,即39.0625=DIV_Mantissa+(DIVFraction/16)其中,DIV_Mantissa表示整数部分,为36,DIVFraction/16表示小......
  • 自制串口助手zcom.1.3.exe
    zcom.1.3.exehttps://www.aliyundrive.com/s/xpnLZvbRhjy提取码:点击链接保存,或者复制本段内容,打开「阿里云盘」APP,无需下载极速在线查看,视频原画倍速播放。......
  • 13. 串口通信
    一、什么是串口  串口通信是一种设备间常用的串行通信方式,串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定......
  • ubuntu 串口使用
    两种方法:第一种:添加串口设备访问规则以root身份执行:vim/etc/udev/rules.d/70-ttyusb.rules内容为:KERNEL=="ttyUSB[0-9]*",MODE="0666"注意:内容里边的双引号不能丢,否则不会生效此方法有两个弊端:1.该方法会让所有的普通用户都具有访问这些串口设备的权限,存在一定的安全隐......
  • 第二代串口屏UI编辑工具素材格式要求
    UI_Editor是乐升半导体公司开发的一款针对TFT串口屏的显示功能开发的软件,使用UI_Editor编辑工具,用户可以快速对TFT串口屏进行显示功能的开发,使得用户从繁杂的UI开发中挣脱出来,把更多的精力放在底层功能的真正实现上来。按照UI_Editor的使用说明(详情查看乐升半导体公司官网),使......
  • c#串口通信讲解(一)(winform、wpf)
    转载:https://blog.csdn.net/weixin_30466421/article/details/99278174串口操作需要注意的几点如下:1、如果是USB转串口;则需要安装USB转串口驱动,附件有此驱动。2、串口打开状态最好不要直接插拔串口,可能会导致中控板或者串口线烧坏。3、使用串口调试工具CEIWEI,下一章节会贴上......
  • stm32用keil5新建C/C++写硬件串口模块的套路
    新建文件:写代码:就在这里开始写initSerial了..........
  • 当没有STLINK的时候,用串口进行下载程序到stm32里操作步骤:
    https://www.bilibili.com/video/BV1th411z7sn?p=30&vd_source=791674f04f7270b40ba9c9d5a7e3281e前5min0、连接电路:1、打开软件:FlyMcu2、keil5导出.hex文件重新编译就出来了hex文件3、FlyMcu配置波特率等参数4、stm32跳冒切换+复位5、烧录6、stm32跳冒切换+复位......