qqtfh 发表于 2021-3-29 12:13

HC89S105的波特率是一处败笔

本帖最后由 芯圣电子官方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次方分频。

qqtfh 发表于 2021-3-29 13:11

lyjian 发表于 2021-3-29 12:55
其他51难道不是这样吗?

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

qqtfh 发表于 2021-3-29 13:12

我就提个建议,我觉得芯圣这颗芯片真的很好,便宜量又足。只是UART的分频这里有点纠结。

jcdzxh 发表于 2021-3-29 13:37

新科c51早就支持4分频了,而且还是4t核,没有理由现在1t做不到,归根到底还是人的问题。

lyjian 发表于 2021-3-29 15:19

qqtfh 发表于 2021-3-29 13:11
其他的51我不清楚。我只认识芯圣的51。但PIC和STM都可以灵活地设置分频值。 ...


这是PIC

LcwSwust 发表于 2021-3-29 15:46

现在的STC15、STC8等若选择定时器2作为波特率发生器,是很灵活的。

qqtfh 发表于 2021-3-29 15:51

lyjian 发表于 2021-3-29 15:19
这是PIC

D:\1.png这是STM8的

qqtfh 发表于 2021-3-29 16:01

本帖最后由 qqtfh 于 2021-3-29 16:07 编辑

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

henangongda123 发表于 2021-3-29 16:09

STM8S用起来还是顺手些,51和STM8S比还有很多差距,这些国产封装厂都是在51的基础上往STM8方向改,但又没有完全达到STM8S的水平

wangshujun 发表于 2021-3-29 16:45

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

imdx 发表于 2021-3-29 17:37

lyjian 发表于 2021-3-29 12:55
其他51难道不是这样吗?

STC就不是。

lyjian 发表于 2021-3-29 18:01

imdx 发表于 2021-3-29 17:37
STC就不是。

这是STC

panxiaoyi 发表于 2021-3-29 22:43

波特率很灵活啊

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 =

panxiaoyi 发表于 2021-3-29 22:50

STC有些UART需要占用定时器做波特率,如果程序刚好需要这个定时器,那就容易产生使用冲突

panxiaoyi 发表于 2021-3-29 22:52

HC89F0541也需要占用定时器

qqtfh 发表于 2021-3-30 09:17

panxiaoyi 发表于 2021-3-29 22:43
波特率很灵活啊

麻烦您帮忙算个115200波特率的寄存器值。我算不出来。
页: [1] 2
查看完整版本: HC89S105的波特率是一处败笔