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的时钟和分频太不灵活了。
其他51难道不是这样吗? 基本所有MCU波特率产生都是这样的计算公式:振荡时钟/16倍分频比 lyjian 发表于 2021-3-29 13:00
基本所有MCU波特率产生都是这样的计算公式:振荡时钟/16倍分频比
是这样没错,但是为什么这16分频不做成可以灵活设置的呢,比如1~16分频。或者2的n次方分频。 lyjian 发表于 2021-3-29 12:55
其他51难道不是这样吗?
其他的51我不清楚。我只认识芯圣的51。但PIC和STM都可以灵活地设置分频值。 我就提个建议,我觉得芯圣这颗芯片真的很好,便宜量又足。只是UART的分频这里有点纠结。 新科c51早就支持4分频了,而且还是4t核,没有理由现在1t做不到,归根到底还是人的问题。 qqtfh 发表于 2021-3-29 13:11
其他的51我不清楚。我只认识芯圣的51。但PIC和STM都可以灵活地设置分频值。 ...
这是PIC
现在的STC15、STC8等若选择定时器2作为波特率发生器,是很灵活的。 lyjian 发表于 2021-3-29 15:19
这是PIC
D:\1.png这是STM8的 本帖最后由 qqtfh 于 2021-3-29 16:07 编辑
lyjian 发表于 2021-3-29 15:19
这是PIC
我可能没有说清楚,我说的PIC,不是Microchip的PIC。而是台系的那种。就像很多时候大家说51,也不一定说的就是AT89C51,也有可能是说芯圣,或者STC又或者其它51系列的芯片。你看看辉芒微的芯片UART是不是要好用点?我看规格书上还提到有自动波特率检测。具体我也没仔细研究,因为PIC系列的资源通常少一点,不适合我用。 STM8S用起来还是顺手些,51和STM8S比还有很多差距,这些国产封装厂都是在51的基础上往STM8方向改,但又没有完全达到STM8S的水平 关键是时钟,16兆时钟没办法实现115200的bps的,如果是24兆或者32兆的就肯定没问题了,新塘的策略是允许用户调整内部rc的频率调整到16.6m就很完美支持了,相信芯圣也有对应的寄存器,关键就是是否开放 lyjian 发表于 2021-3-29 12:55
其他51难道不是这样吗?
STC就不是。 imdx 发表于 2021-3-29 17:37
STC就不是。
这是STC
波特率很灵活啊
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 = STC有些UART需要占用定时器做波特率,如果程序刚好需要这个定时器,那就容易产生使用冲突 HC89F0541也需要占用定时器 panxiaoyi 发表于 2021-3-29 22:43
波特率很灵活啊
麻烦您帮忙算个115200波特率的寄存器值。我算不出来。
页:
[1]
2