[其它应用]

波特率在4800-57600之间和128000都正常,唯独在115200不正常

[复制链接]
1826|19
手机看帖
扫描二维码
随时随地手机跟帖
wenfen|  楼主 | 2018-12-10 18:08 | 显示全部楼层 |阅读模式
波特率在4800-57600之间和128000都正常,唯独在115200不正常
zhuhuis| | 2018-12-10 18:11 | 显示全部楼层
这你怎么知道的

使用特权

评论回复
wenfen|  楼主 | 2018-12-10 18:14 | 显示全部楼层
恰好和SH88F516串口通信的模块的波特率是115200

使用特权

评论回复
tian111| | 2018-12-10 18:19 | 显示全部楼层
换个不行吗

使用特权

评论回复
wenfen|  楼主 | 2018-12-10 18:23 | 显示全部楼层
固定死了,不能改.这几天各种尝试,115200都是不行

使用特权

评论回复
tian111| | 2018-12-10 18:27 | 显示全部楼层
串口初始化程序

使用特权

评论回复
wenfen|  楼主 | 2018-12-10 18:31 | 显示全部楼层

CLKCON = 0x00;                //时钟设置

        RCAP2H=0xFF;                //115200
        RCAP2L=0xFC;
        TH2=0xFF;
        TL2=0xFC;
        T2CON=0x34;                        //定时器2产生接收和发送波特率,开启定时器,工作在定时器方式,自动重装载
        SCON=0x50;                        //SM0 SM1 SM2 REN TB8 RB8 TI RI
                                                //工作在方式1(8位异步方式,可变波特率),允许接收,清0发送接收标志位

使用特权

评论回复
chenho| | 2018-12-10 18:35 | 显示全部楼层
用外接晶振

使用特权

评论回复
chenho| | 2018-12-10 18:41 | 显示全部楼层
如果128000都正常,反而115200不正常,就说明不是速度的问题。

使用特权

评论回复
gongche| | 2018-12-10 18:44 | 显示全部楼层
是很奇怪,建议抓波形看看。

使用特权

评论回复
huwr| | 2018-12-10 18:49 | 显示全部楼层
使用外部22.1184M晶振

使用特权

评论回复
huanghuac| | 2018-12-10 18:51 | 显示全部楼层
88F516手册写了,外部最高支持16.6MHZ晶振,所以22.1184属于超频了,建议用11.0592吧。

使用特权

评论回复
happy_10| | 2018-12-10 18:55 | 显示全部楼层
唯独在115200不正常,这么奇怪啊??

使用特权

评论回复
huanghuac| | 2018-12-10 19:00 | 显示全部楼层
可以试着换一个吗,不用115200不行吗??

使用特权

评论回复
huwr| | 2018-12-10 19:04 | 显示全部楼层

根本不奇怪,因为按照内部16.6MHZ时钟,波特率115200bps,算出来的定时器初值,取整之后丢弃的尾数非常大,大到产生的波特率误差超过串口可以承受的范围,简单吧,换T1做,然后倍速,兴许还有希望。我在88F2051上就是这么整,可以稳定上115200bps,但是如果换成T2就只能上57600bps。不过2051的定时器分频器貌似比88F516更先进哦

使用特权

评论回复
评论
hxqqqqqq 2020-6-18 09:28 回复TA
有道理 
wenfen|  楼主 | 2018-12-10 19:09 | 显示全部楼层
嗯,预料中的结果,先结贴吧,多谢大家啦

使用特权

评论回复
sszxxm| | 2018-12-25 15:30 | 显示全部楼层
这个算一下就知道结果啦,中颖的这个16.6MHz内置时钟,真的不知道是哪个设计工程师想出来的,根本没有考虑过实际应用,加上88F516的架构还比较老爷,比小弟弟的2051还老,不能上115200的,只能换外部晶振。

使用特权

评论回复
gx_huang| | 2019-1-2 14:47 | 显示全部楼层
这些16.6MHz内部RC的,只要内部时钟不分频降频,肯定可以115200工作的,一点误差都没有,谁说不好用?
//初始化2个串口
void set_baut()
{
        //Fsys=16588800
        //SYS_FREQUENCY=16588800

        //uart0=115200,for log
        //Baut rate=Fsys/16/(256-TH1)
        SCON=0x50;
        PCON|=0x80;        //SMOD=1
        TH1=-SYS_FREQUENCY/16/115200/BAUT0;        //-9

        //uart1=115200,for lcd
        //Baut rate=Fsys/16/(32768-SBRT1/SBRT0)
        SCON1=0x50;
        SBRT1=0x7f|0x80;        //d7=使能波特率
        SBRT0=0xf7;        //32768-9=32762=0x7ff7
}
uart0,如果你的是-4(实际应该是-4.5),显然错了,-9才是没有误差的,自己没有搞懂UART原理,不要怪芯片。
UART1,带小数分频的,精度更好控制。

使用特权

评论回复
化骨龙| | 2020-6-5 18:31 | 显示全部楼层
楼主解决了吗?115200比特率,不用外部晶振是不是搞不了?

使用特权

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

本版积分规则

737

主题

8940

帖子

8

粉丝