搜索

[其他] HC89S105的波特率是一处败笔

[复制链接]
810|30
 楼主 | 2021-3-29 12:13 | 显示全部楼层 |阅读模式
我这款电路板原来是用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的时钟和分频太不灵活了。

使用特权

评论回复
| 2021-3-29 12:55 | 显示全部楼层
其他51难道不是这样吗?

使用特权

评论回复
| 2021-3-29 13:00 | 显示全部楼层
基本所有MCU波特率产生都是这样的计算公式:振荡时钟/16倍分频比

使用特权

评论回复
 楼主 | 2021-3-29 13:10 | 显示全部楼层
lyjian 发表于 2021-3-29 13:00
基本所有MCU波特率产生都是这样的计算公式:振荡时钟/16倍分频比

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

使用特权

评论回复
 楼主 | 2021-3-29 13:11 | 显示全部楼层
lyjian 发表于 2021-3-29 12:55
其他51难道不是这样吗?

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

使用特权

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

使用特权

评论回复
| 2021-3-29 13:37 | 显示全部楼层
新科c51早就支持4分频了,而且还是4t核,没有理由现在1t做不到,归根到底还是人的问题。

使用特权

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

mmexport1617002276714.png
这是PIC

使用特权

评论回复
| 2021-3-29 15:46 | 显示全部楼层
现在的STC15、STC8等若选择定时器2作为波特率发生器,是很灵活的。

使用特权

评论回复
 楼主 | 2021-3-29 15:51 | 显示全部楼层

D:\1.png这是STM8的
1.png
1.png

使用特权

评论回复
 楼主 | 2021-3-29 16:01 | 显示全部楼层
本帖最后由 qqtfh 于 2021-3-29 16:07 编辑

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

使用特权

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

使用特权

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

使用特权

评论回复
| 2021-3-29 17:37 | 显示全部楼层
lyjian 发表于 2021-3-29 12:55
其他51难道不是这样吗?

STC就不是。

使用特权

评论回复
| 2021-3-29 18:01 | 显示全部楼层

这是STC mmexport1617011970250.png mmexport1617011972716.png

使用特权

评论回复
| 2021-3-29 22:43 | 显示全部楼层
波特率很灵活啊
捕获.PNG
捕获0.PNG

使用特权

评论回复
| 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]

使用特权

评论回复
| 2021-3-29 22:50 | 显示全部楼层
STC有些UART需要占用定时器做波特率,如果程序刚好需要这个定时器,那就容易产生使用冲突

使用特权

评论回复
| 2021-3-29 22:52 | 显示全部楼层
HC89F0541也需要占用定时器

使用特权

评论回复
 楼主 | 2021-3-30 09:17 | 显示全部楼层

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

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表