打印
[技术问答]

N76E003 串口0接收数据误码率还是有很多。

[复制链接]
2907|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dhvliyike|  楼主 | 2018-1-20 18:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dhvliyike 于 2018-1-20 18:14 编辑

过程:
最开始用16M频率,误码率很高,一个字符串很多地方都是乱码。程序无**常运作。。

后来按照论坛的帖子把16M微调到16.6M,效果好了很多。但是无法保证开机后第一次就正常运作。。有时候程序内部重新循环十几次才成功执行一整套流程步骤。。。时不时又出现异常情况。。。两个滤波电容0.1uf和100pf距离vdd脚有2-3cm的距离。两个板子分别用了2个波特率,115200和38400,两个板子都不同程度有较高误码率。


用stm8s003 同样的程序同样的板子(区别是dat脚多了一个0.1uf电容)完美运行,波特率115200,误码率很低很低。绝大部分情况都是第一次运行程序就OK。
沙发
zhuomuniao110| | 2018-1-20 19:52 | 只看该作者
瞎扯,用内置的RC就够了,也没见误码率神马的。。我用9600bps

使用特权

评论回复
板凳
座机呀| | 2018-1-20 19:59 | 只看该作者
代码问题

使用特权

评论回复
地板
dongnanxibei| | 2018-1-21 19:43 | 只看该作者
楼主没有研究透这个芯片

使用特权

评论回复
5
xinpian101| | 2018-1-21 21:22 | 只看该作者
自己都说了,修改了频率就改善了,说明还是你没用计算对。

使用特权

评论回复
6
可天下| | 2018-1-21 21:31 | 只看该作者
外接晶振要用有源的。无源的不行。

使用特权

评论回复
7
dhvliyike|  楼主 | 2018-1-22 03:01 | 只看该作者
可天下 发表于 2018-1-21 21:31
外接晶振要用有源的。无源的不行。

没接外部晶振。就是自带的。改到16.6兆以后,38400基本没问题了,但是相同的程序在115200还是有问题

使用特权

评论回复
8
凉白开| | 2018-3-31 18:13 | 只看该作者
楼主最后解决了吗?我用bsp的代码将主频改到16.6m,在38400的波特率下误码率仍然会超过50%。请问楼主的代码是怎么设计的?这是我的代码:
unsigned char xdata hircmap0,hircmap1;
unsigned int xdata trimvalue16bit;
void MODIFY_HIRC_VLAUE(void)
{
                set_IAPEN;
                IAPAL = 0x30;
    IAPAH = 0x00;
    IAPCN = READ_UID;
    set_IAPGO;
                hircmap0 = IAPFD;
                IAPAL = 0x31;
    IAPAH = 0x00;
    set_IAPGO;
                hircmap1 = IAPFD;
                clr_IAPEN;
                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;
}

void uart_init(void)
{
        P06_Quasi_Mode;
        P07_Quasi_Mode;
       
        SCON = 0x50;             //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


        //TH1 = 256 - (1000000/38400+1);               /*16 MHz */
        TH1 = 256 - (1037500/38400);                              /*16.6 MHz */
       
        set_TR1;
        set_TI;                                                //For printf function must setting TI = 1
        set_ES;
}

使用特权

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

本版积分规则

1

主题

8

帖子

0

粉丝