找回密码
 立即注册
查看: 1209|回复: 44

STC8H8K64U与STC8A8K64D4与STC15W4K48S4的一些区别

[复制链接]
  • TA的每日心情
    慵懒
    10 小时前
  • 签到天数: 134 天

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

    积分
    2459
    发表于 2023-12-15 17:27:11 | 显示全部楼层 |阅读模式
    本帖最后由 cofmilk 于 2023-12-15 20:26 编辑

    开一贴,记录一下标题中的三款单片机的寄存器在手册中的区别。

    由于工作性质需要将三款单片机的驱动整合到一个工程中,所以有了目前的需求。

    持续更新 直到整合完成。由于代码属于公司的,所以这里只归纳手册上的差异。


    以下使用STC8AD4表示STC8A8K64D4,使用STC8H表示STC8H8K64U,使用STC15W表示STC15W4K48S4(PS:个人表述习惯,李姐李姐)
    1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!

    本帖被以下淘专辑推荐:

    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    10 小时前
  • 签到天数: 134 天

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

    积分
    2459
     楼主| 发表于 2023-12-15 17:53:33 | 显示全部楼层
    第一部分,时钟
    由于工作性质,这里讨论时钟的控制。对于主时钟对外输出功能不作讨论
    1.STC15W单片机由于上市的比较早,这里只有一个主时钟分频寄存器,至于选择外部晶振还是内部晶振都是在ISP软件上选择的。
    2.STC8AD4这里就已经多了很多的时钟源,当然寄存器也增加了很多,相比于STC15W最主要的增加了时钟选择寄存器,且各个时钟源的控制寄存器。
    3.STC8H时代由于技术的发展时钟源又多了,且时钟树也更加的复杂。
    截图202312151739595273.jpg 截图202312151740398299.jpg

    stc8h

    stc8h


    这里着重比较一下STC8AD4与STC8H的寄存器,在STC8H的CLKSEL寄存器中多了有关PLL与高速IO相关的位。目前还没有用到,那么对于系统时钟的生成的代码上基本和STC8A的一致,无论是使用内部高速IRC还是使用外部高速晶振。当然在后面准备使用STC8H的可能还需要操作一下外部低速晶振。
    对于主时钟分频这里STC8AD4与STC8H一样都是又256级 ,STC15W这里就如上图所示。


    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    10 小时前
  • 签到天数: 134 天

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

    积分
    2459
     楼主| 发表于 2023-12-15 20:22:02 | 显示全部楼层
    第二部分,EEPROM.

    对于EEPROM STC8AD4与STC8H使用方法和寄存器相关的基本一致,代码可以直接使用. 但是与STC15W相比多了一个必须要配置的寄存器IAP_TPS.
    截图202312152021276627.jpg

    如果STC15W使用这段代码时直接将这个寄存器操作平掉,然后在IAP_CONTR的WT[2:0]中写入与主频相关的数据
    截图202312152021566773.jpg


    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    10 小时前
  • 签到天数: 134 天

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

    积分
    2459
     楼主| 发表于 2023-12-15 20:55:54 | 显示全部楼层
    本帖最后由 cofmilk 于 2023-12-15 21:00 编辑

    第三部分,ADC



    ADC这里STC15W的区别可就太大了,大跨步的大。

    STC15W 是10位精度8个通道加一个内部通道的ADC;而STC8AD4与STC8H均是12位精度15个通道加一个内部通道的ADC

    在对ADC的操作上也有很大区别,所以再写这部分代码的时候,就分开写的两边不再混用。

    STC15W单片机的ADC在配置时还需要配置一个P1口模拟功能控制寄存器,在配置时需要置位对应通道的P1ASF位。不仅如此ADC转换结果调整寄存器位还塞到了CLK_DIV寄存器里,在使用的时候需要注意一下赋值方式.千万别一不小心把这个寄存器的其他位置的数据给改了..
    截图202312152054312272.jpg

    到了STC8AD4与STC8H的时候就没有那么多的事儿了,只需要配置正确的IO工作模式就可以。其次,ADC功能相关的寄存器也没有东塞一个西塞一个了。而且,还可以使用PWM触发ADC的采集。再而且增加了ADC的时序控制和硬件自动求平均的功能。实际体验自动求平均确实再一定程度上抑制了ADC结果的波动。这东西有就用上..
    截图202312152054572205.jpg
    而对于相同功能的寄存器位在不同单片机上的位置不同的问题,直接使用宏定义替换掉就OK了。实际上在代码开发的时候也推荐使用宏定义的方式替换掉魔法数字。


    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    10 小时前
  • 签到天数: 134 天

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

    积分
    2459
     楼主| 发表于 2023-12-15 21:24:36 | 显示全部楼层
    本帖最后由 _奶咖君_ 于 2024-2-18 14:19 编辑

    第四部分,串口通讯。



    对于这三个单片机来说串口有4个。如果从最基本的用法来说(中断接收+轮询发送),这三款单片机的串口驱动基本可以通用。

    实际上STC8单片机比STC15单片机的串口1多了一组端口重映射(STM32手册上的叫法)或者叫功能脚切换。且STC8系列单片机上增加了DMA之后使用串口的方式又多了一种。

    最近拿到了从积分商城里兑换的STC8H8K64U单片机之后,对DMA进行了测试,,也了解了一些机制。从单片机上来说由于没有串口超时中断,所以需要使用串口接收中断和定时器做串口接收超时功能。导致就算使用上了DMA单片机还是要不停地进入串口接收中断,且如果再使用DMA的串口发送,就需要在串口中断中加入对串口发送完成中断标志位的清除(之前使用的是轮询标志位的方式发送数据)。还有就是这个串口DMA在使用的时候一次只能传输256个字节,,emmmm,对于我的工作性质来说,稍微有点不够用。在我使用的过程中一次传输三四百个字节是经常会出现的情况。迫不得已实现了一套,不定长接收+不定长发送的DMA串口驱动。目前来说功能是已经实现了,,就看在之后的使用中又没有什么其他的bug。

    增加一条,在串口2的重映射引脚上STC8AD4 与 STC8H和STC15W单片机的不同
    STC15W和STC8H
    截图202312161507004056.jpg 截图202312161509086409.jpg
    STC8AD4
    截图202312161509287606.jpg

    在串口1上除了 STC15W 上只有3组重映射端口,其余完全一样




    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9248

    回帖

    1万

    积分

    管理员

    积分
    13977
    发表于 2023-12-15 23:36:58 | 显示全部楼层
    STC32G8K64-42I-LQFP48/44/32, 开始都有这个功能
    截图202312152334536357.jpg
    截图202312152335301005.jpg

    截图202312152336205922.jpg

    截图202312152336542967.jpg

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9248

    回帖

    1万

    积分

    管理员

    积分
    13977
    发表于 2023-12-15 23:39:27 | 显示全部楼层
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9248

    回帖

    1万

    积分

    管理员

    积分
    13977
    发表于 2023-12-15 23:44:23 | 显示全部楼层
    STC8H8K64U实验箱中有系统解决方案
    截图202312152343133719.jpg

    截图202312152342312067.jpg

    截图202312152344046752.jpg
    www.stcai.com/syx



    点评

    对的 写程序的时候是参考的这个里面的例程,但是这个并不符合我的使用场景,我需要不定长发送与接收,这个不定长指的是可能会超过单次传输上限  发表于 2023-12-16 09:04
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-25 14:43
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    0

    主题

    1

    回帖

    60

    积分

    注册会员

    积分
    60
    发表于 2023-12-16 09:40:18 | 显示全部楼层
    本帖最后由 巧克力 于 2023-12-16 09:43 编辑

    好好学习,天天向上
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    10 小时前
  • 签到天数: 134 天

    [LV.7]常住居民III

    20

    主题

    1039

    回帖

    2459

    积分

    金牌会员

    积分
    2459
     楼主| 发表于 2023-12-16 13:17:58 | 显示全部楼层
    本帖最后由 cofmilk 于 2023-12-16 13:24 编辑

    第五部分,定时器。

    从STC15W开始到STC8H T0 与 T1定时器使用上完全一样,应该是从8051传下来的传统。

    而到了T2 T3 T4这里出现了区别。最大的区别,在STC8系列单片机上,这里增加了8位预分频,这样就可以用定时器定更长的时间,从而减少单片机进入中断的次数。而之前的STC15W单片机没有这个预分频寄存器,如果想要定更长的时间就需要使用软件变量累加计数的方式来定时需求的时间。
    其次就是定时器中断标志在STC8系列上可以软件读取,清除。但实际使用中这些标志是在中断服务函数中,由硬件自动清除。代码上完全不用处理。
    截图202312161311561428.jpg 截图202312161313059020.jpg
    对于定时器时钟输出部分,目前没有用到,不作讨论。

    (PS:由于定时器1 2 3 4都有可能要作为串口1 2 3 4的波特率发生器,所以自己在写代码的时候为了更好的代码可移植性和易维护性,都是尽量避免使用定时器1 2 3 4来定时。选择其他的可以用来作为定时器功能的外设。例如:STC15W和STC8AD4上的PCA,STC8H上的PWM(还是16位的哦!),当然这个是和我自身工作的需求相关。)




    参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
    技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-30 19:07 , Processed in 0.074348 second(s), 71 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表