打印
[技术问答]

N76E003 UART发送1Byte数据用时比接收用时长带来的误码问题

[复制链接]
483|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
duo点|  楼主 | 2022-2-26 16:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TE, ar
N76E003 UART发送1Byte数据用时比接收用时长带来的误码问题
问题描述:使用单片机型号为N76E003AT20;
main函数
{
    1、修改晶振为16.6MHz
    2、uart0 初始化波特率115200
        InitialUART0_Timer1(115200);
        set_ES;
                set_EA;

}
//中断服务函数
void SerialPort0_ISR(void) interrupt 4
{
        u8 res;
        if (RI)
        {
                SBUF_1 = SBUF;
                clr_RI;
        }
        if(TI)
        {
                clr_TI;
        }
}

程序如上,让单片机直接回传发送过去的数据,用CP2102串口模块连接到单片机的uart0两个管脚,并插到电脑上用串口调试助手XCOM进行调试。设置波特率115200,数据位8位,停止位1位,无校验,16进制发送和接收。

现象:XCOM每次发送一个字节(16进制发送),回传正常,例如发送0xaa,回传回来也是0xaa;XCOM一个发送两个字节,就出现误码了,例如发送0xaa 0xbb,回传回来就是0xaa 0xf7了。
分析:经多次试验,发现原因很可能是N76E003芯片uart发送一个字节用的时间比接收一个字节还要长,导致连续接收两个字节时,第二个字节接收到时前一个字节还没回传完导致误码。将XCOM上发送的停止位改为2位或1.5位,就回传正常了。停止位改长意味着相临两个字节的间隔变大,N76E003有足够的时间来完成前一个字节的回传。但是我们的应用要求停止位必须为1位,请问这个问题有其它解决方案吗?







  • 问题补充 : 2018/06/11 20:52

    uart0初始化函数为官方函数,模式1

    void InitialUART0_Timer1(UINT32 u32Baudrate)

    {

            P06_Quasi_Mode;                //tx pin

            P07_Quasi_Mode;                //rx pin

            SCON = 0x50;             //UART0 Mode1,REN=1,TI=0, Full Duplex, Enable Receive, Clear Transmit Interrupt Flag

            TMOD |= 0x20;            //Timer1 Mode1

            set_SMOD;                //UART0 Double Rate Enable

            set_T1M;                        //tim1 clock as sys clock

            clr_BRCK;                //Serial port 0 baud rate clock source = Timer1

    #ifdef FOSC_160000

            TH1 = 256 - (1000000/u32Baudrate+1);               /*16 MHz */

    #endif           

    #ifdef FOSC_166000

            TH1 = 256 - (1037500/u32Baudrate);                            /*16.6 MHz */

    #endif

            set_TR1;

            set_TI;

    }


  • 问题补充 : 2018/06/11 20:57

    中断服务函数里的 SBUF_1 = SBUF; 应为SBUF = SBUF; 测试时有试过将数据转发到uart1,是一样的问题。




使用特权

评论回复
沙发
pigluffy| | 2022-2-26 23:43 | 只看该作者
UART中断优先权改成最高试试看

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

434

主题

1627

帖子

1

粉丝