打印
[通用8051核FLASH系列]

HC89S105的波特率是一处败笔

[复制链接]
3805|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qqtfh|  楼主 | 2021-3-29 12:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 芯圣电子官方QQ 于 2023-7-25 13:54 编辑

我这款电路板原来是用STM8S003K3T6的,有用到UART与ESP8266通信。因为功能越加越多,导致RAM和ROM都不够用了。本来想着换STM8S005的,但是STM8005的引脚无法兼容,这样的话又要改PCB。看了一下HC89S105,RAM和ROM都很丰富,PIN也是兼容,看着不错。就买了几个样品回来移植。当移植到UART部分时才发现。这颗芯片的波特率发生器太不灵活了。UART方式1和方式3居然只能从FCPU固定16分频的时钟。波特率最高只到57600。再高到115200就找不到合适的值了。65536-8也不合适,65536-9也不合适。很不错的一颗芯片,就是UART的时钟和分频太不灵活了。

使用特权

评论回复
沙发
lyjian| | 2021-3-29 12:55 | 只看该作者
其他51难道不是这样吗?

使用特权

评论回复
板凳
lyjian| | 2021-3-29 13:00 | 只看该作者
基本所有MCU波特率产生都是这样的计算公式:振荡时钟/16倍分频比

使用特权

评论回复
地板
qqtfh|  楼主 | 2021-3-29 13:10 | 只看该作者
lyjian 发表于 2021-3-29 13:00
基本所有MCU波特率产生都是这样的计算公式:振荡时钟/16倍分频比

是这样没错,但是为什么这16分频不做成可以灵活设置的呢,比如1~16分频。或者2的n次方分频。

使用特权

评论回复
5
qqtfh|  楼主 | 2021-3-29 13:11 | 只看该作者
lyjian 发表于 2021-3-29 12:55
其他51难道不是这样吗?

其他的51我不清楚。我只认识芯圣的51。但PIC和STM都可以灵活地设置分频值。

使用特权

评论回复
6
qqtfh|  楼主 | 2021-3-29 13:12 | 只看该作者
我就提个建议,我觉得芯圣这颗芯片真的很好,便宜量又足。只是UART的分频这里有点纠结。

使用特权

评论回复
7
jcdzxh| | 2021-3-29 13:37 | 只看该作者
新科c51早就支持4分频了,而且还是4t核,没有理由现在1t做不到,归根到底还是人的问题。

使用特权

评论回复
8
lyjian| | 2021-3-29 15:19 | 只看该作者
qqtfh 发表于 2021-3-29 13:11
其他的51我不清楚。我只认识芯圣的51。但PIC和STM都可以灵活地设置分频值。 ...


这是PIC

使用特权

评论回复
9
LcwSwust| | 2021-3-29 15:46 | 只看该作者
现在的STC15、STC8等若选择定时器2作为波特率发生器,是很灵活的。

使用特权

评论回复
10
qqtfh|  楼主 | 2021-3-29 15:51 | 只看该作者

D:\1.png这是STM8的

1.png (223.82 KB )

1.png

1.png (223.82 KB )

1.png

使用特权

评论回复
11
qqtfh|  楼主 | 2021-3-29 16:01 | 只看该作者
本帖最后由 qqtfh 于 2021-3-29 16:07 编辑

我可能没有说清楚,我说的PIC,不是Microchip的PIC。而是台系的那种。就像很多时候大家说51,也不一定说的就是AT89C51,也有可能是说芯圣,或者STC又或者其它51系列的芯片。你看看辉芒微的芯片UART是不是要好用点?我看规格书上还提到有自动波特率检测。具体我也没仔细研究,因为PIC系列的资源通常少一点,不适合我用。

使用特权

评论回复
12
henangongda123| | 2021-3-29 16:09 | 只看该作者
STM8S用起来还是顺手些,51和STM8S比还有很多差距,这些国产封装厂都是在51的基础上往STM8方向改,但又没有完全达到STM8S的水平

使用特权

评论回复
13
wangshujun| | 2021-3-29 16:45 | 只看该作者
关键是时钟,16兆时钟没办法实现115200的bps的,如果是24兆或者32兆的就肯定没问题了,新塘的策略是允许用户调整内部rc的频率调整到16.6m就很完美支持了,相信芯圣也有对应的寄存器,关键就是是否开放

使用特权

评论回复
14
imdx| | 2021-3-29 17:37 | 只看该作者
lyjian 发表于 2021-3-29 12:55
其他51难道不是这样吗?

STC就不是。

使用特权

评论回复
15
lyjian| | 2021-3-29 18:01 | 只看该作者

这是STC

使用特权

评论回复
16
panxiaoyi| | 2021-3-29 22:43 | 只看该作者
波特率很灵活啊

捕获.PNG (44.11 KB )

捕获.PNG

捕获0.PNG (74.85 KB )

捕获0.PNG

使用特权

评论回复
17
panxiaoyi| | 2021-3-29 22:45 | 只看该作者
14.3波特率发生器
UART 自带一个波特率发生器,它实质上是一个 16 位递增计数器。
在方式0中,波特率可编程为系统时钟的1/12或1/2,由UX6位决定。当UX6为0时,串行端口在FCPU
的1/12下运行。当UX6为1时,串行端口在FCPU的1/2下运行。
在方式2中,波特率固定为系统时钟的1/32或1/64,由SMOD位中决定。当SMOD位为0时,UART
以FCPU的1/64运行。当SMOD位为1时,UART以FCPU的1/32运行。
Baud = 2SMOD × (FCPU
64
)
在方式1和方式3中,波特率公式如下:
Baud = FCPU
16 × (65536−SBRT) ,SBRT = [SBRTH : SBRTL]

使用特权

评论回复
18
panxiaoyi| | 2021-3-29 22:50 | 只看该作者
STC有些UART需要占用定时器做波特率,如果程序刚好需要这个定时器,那就容易产生使用冲突

使用特权

评论回复
19
panxiaoyi| | 2021-3-29 22:52 | 只看该作者
HC89F0541也需要占用定时器

使用特权

评论回复
20
qqtfh|  楼主 | 2021-3-30 09:17 | 只看该作者

麻烦您帮忙算个115200波特率的寄存器值。我算不出来。

使用特权

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

本版积分规则

38

主题

174

帖子

2

粉丝