打印
[其它应用]

115200不正常

[复制链接]
1258|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wenfen|  楼主 | 2020-5-21 22:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
波特率在4800-57600之间和128000都正常,唯独在115200不正常

使用特权

评论回复
沙发
zhuhuis| | 2020-5-21 22:28 | 只看该作者
这你怎么知道的

使用特权

评论回复
板凳
wenfen|  楼主 | 2020-5-21 22:31 | 只看该作者
恰好和SH88F516串口通信的模块的波特率是115200

使用特权

评论回复
地板
tian111| | 2020-5-21 22:35 | 只看该作者
换个不行吗

使用特权

评论回复
5
wenfen|  楼主 | 2020-5-21 22:38 | 只看该作者
固定死了,不能改.这几天各种尝试,115200都是不行

使用特权

评论回复
6
tian111| | 2020-5-21 22:41 | 只看该作者

串口初始化程序

使用特权

评论回复
7
wenfen|  楼主 | 2020-5-21 22:45 | 只看该作者

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发送接收标志位

使用特权

评论回复
8
chenho| | 2020-5-21 22:47 | 只看该作者
用外接晶振

使用特权

评论回复
9
chenho| | 2020-5-21 22:52 | 只看该作者
如果128000都正常,反而115200不正常,就说明不是速度的问题。

使用特权

评论回复
10
gongche| | 2020-5-21 22:54 | 只看该作者
是很奇怪,建议抓波形看看。

使用特权

评论回复
11
huwr| | 2020-5-21 22:59 | 只看该作者
使用外部22.1184M晶振

使用特权

评论回复
12
huanghuac| | 2020-5-21 23:02 | 只看该作者
88F516手册写了,外部最高支持16.6MHZ晶振,所以22.1184属于超频了,建议用11.0592吧。

使用特权

评论回复
13
happy_10| | 2020-5-21 23:05 | 只看该作者
唯独在115200不正常,这么奇怪啊??

使用特权

评论回复
14
huanghuac| | 2020-5-21 23:08 | 只看该作者
可以试着换一个吗,不用115200不行吗??

使用特权

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

使用特权

评论回复
16
wangpe| | 2020-5-21 23:16 | 只看该作者
这些16.6MHz内部RC的,只要内部时钟不分频降频,肯定可以115200工作的,一点误差都没有,谁说不好用?

使用特权

评论回复
17
zhanglli| | 2020-5-21 23:19 | 只看该作者
//初始化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,带小数分频的,精度更好控制。

使用特权

评论回复
18
wenfen|  楼主 | 2020-5-21 23:23 | 只看该作者

嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

评论回复
19
Sunriver_Yao| | 2020-6-19 16:35 | 只看该作者
huanghuac 发表于 2020-5-21 23:02
88F516手册写了,外部最高支持16.6MHZ晶振,所以22.1184属于超频了,建议用11.0592吧。
...

选16.9344MHz!

使用特权

评论回复
20
lhl51311| | 2020-8-6 16:09 | 只看该作者
zhanglli 发表于 2020-5-21 23:19
//初始化2个串口
void set_baut()
{

1612A芯片也是两个串口,串口0我用了这个代码验证,TH1赋值为247。波特率还是不对

使用特权

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

本版积分规则

737

主题

8940

帖子

8

粉丝