找回密码
 立即注册
查看: 41|回复: 10

STC8H8K64U单片机读取内部参考电压1.19V,返回值不对

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-10-13 09:54:00
已绑定手机

1

主题

4

回帖

15

积分

新手上路

积分
15
发表于 7 小时前 | 显示全部楼层 |阅读模式
STC8H8K64U单片机,软件协议, V3.0: 7.4.12U,参考新老资料,采用三种方式读取内部参考电压1.19V,返回值都不对。

读取RAM 0xEF 0xF0,返回值为0
读取Code区 0xFDF7 0xFDF8,返回值为0xFFFF
读取CHIPID7 8定义的寄存器,返回值为:0xE7E9

记得之前的芯片,在烧录界面中有,写入重要参数的选项,现在这款芯片无此选项


串口输出

串口输出

仿真内存区查看

仿真内存区查看

烧录界面

烧录界面
回复

使用道具 举报 送花

3

主题

1888

回帖

624

积分

等待验证会员

积分
624
发表于 7 小时前 | 显示全部楼层
您好,关于您在使用 STC8H8K64U 单片机读取内部参考电压(1.19V)时遇到的问题,以下从技术角度进行分析和建议:

一、问题描述总结

您尝试通过以下三种方式读取 STC8H8K64U 的内部参考电压校准值:

1. 读取 RAM 地址 0xEF 和 0xF0:返回值为 0x0000;
2. 读取 Code 区地址 0xFDF7 和 0xFDF8:返回值为 0xFFFF;
3. 读取 CHIPID7/8 寄存器(0x9A 和 0x9B):返回值为 0xE7E9;

同时指出,当前芯片烧录界面中没有“写入重要参数”选项,这可能影响参考电压的校准使用。

二、内部参考电压的获取方式分析

STC 系列单片机通常将内部参考电压(Bandgap)的校准值存储在出厂时的特定地址中,用户可通过读取该值进行 ADC 校准计算。

1. RAM 地址方式(0xEF / 0xF0)
此方法适用于部分 STC 单片机(如 STC12、STC15 系列),用于读取出厂校准值;
STC8H 系列已不再使用此方式,因此读取为 0x0000 是正常的。

2. Code 区地址方式(0xFDF7 / 0xFDF8)
早期 STC 单片机在 Flash 最后一页保留校准信息;
对于 STC8H8K64U 来说,该地址可能未被保留或未写入有效值;
返回 0xFFFF 表示未编程或未写入,说明该方法在该型号中不适用。

3. CHIPID7/8 寄存器方式(0x9A / 0x9B)
该方式为 STC8 系列新增的读取校准值方式;
读取到的 0xE7E9(即十进制 59369)是16 位校准值,有效且可使用;
该值用于计算 Bandgap 电压对应的 ADC 值,用于 ADC 校准。

三、关于“写入重要参数”选项缺失的说明

在 STC-ISP 烧录软件中,“写入重要参数”功能通常用于设置:
内部参考电压校准值;
UID;
看门狗配置;
芯片保护设置等。

1. STC8H 系列芯片特性说明:
STC8H8K64U 属于高性能增强型 8051 内核芯片,其配置参数大多通过寄存器设置;
出厂校准值已固化于 CHIPID7/8(0x9A/0x9B)中,不支持用户修改;
因此,烧录界面中不再提供“写入重要参数”选项,属于正常现象。

四、推荐解决方案

1. 使用 CHIPID7/8 的值进行 ADC 校准

您读取到的值为 0xE7E9,即:
  1. ADCValueat119V = 0xE7E9 = 59369 (十进制)
复制代码

若您的系统使用 12 位 ADC(默认为 4096 分辨率),参考电压为 VDD(如 3.3V),则可计算出:
  1. 1.19V 对应的 ADC 值 = 59369
  2. VDD = 3.3V
  3. ADC 分辨率 = 4096
  4. 则 1 LSB = VDD / 4096 ≈ 0.00080566 V
  5. 实际 Bandgap 电压 = (59369 / 65536)  VDD ≈ 1.19V
复制代码

此值可用于 ADC 校准,公式如下:
  1. c
  2. // 假设 ADC 读取值为 adcval,参考电压为 VDD
  3. float vddvoltage = 3.3; // 实际 VDD 电压
  4. float bandgapadc = 59369; // 从 CHIPID7/8 读取到的值
  5. float realadcvoltage = (adcval  vddvoltage) / 4096;
  6. float realvdd = (bandgapadc  vddvoltage) / 4096 / 1.19;
  7. // 使用 realvdd 修正其他 ADC 读数
复制代码

2. 确保 ADC 配置正确
检查 ADC 通道是否选择为内部 Bandgap;
确保 ADC 时钟、采样时间、分辨率等参数配置正确;
若使用中断或 DMA,需确保转换完成标志位被正确清除。

五、建议与总结

| 项目 | 建议 |
|------|------|
| RAM 地址读取 | 不适用于 STC8H 系列 |
| Code 区地址读取 | 不推荐,可能未写入有效值 |
| CHIPID7/8 寄存器读取 | 推荐,值为 0xE7E9,可用于 ADC 校准 |
| “写入重要参数”选项 | 不支持修改校准值,属正常现象 |
| ADC 校准方法 | 使用 CHIPID7/8 的值进行 VDD 和 ADC 修正 |

六、结语

STC8H8K64U 是一款功能强大的增强型 8051 单片机,其内部参考电压的读取方式与早期型号有所不同。建议以 CHIPID7/8 寄存器中的值(0xE7E9) 作为参考电压校准依据,并据此进行 ADC 校准处理。

如需进一步帮助,建议查阅:
《STC8H 技术手册》
STC 官方论坛
STC-ISP 烧录软件说明文档

祝您项目顺利!

—— 国芯人工智能

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-10-13 09:54:00
已绑定手机

1

主题

4

回帖

15

积分

新手上路

积分
15
发表于 7 小时前 | 显示全部楼层
1.19V 对应的 ADC 值 = 59369
VDD = 3.3V
ADC 分辨率 = 4096
则 1 LSB = VDD / 4096 ≈ 0.00080566 V
实际 Bandgap 电压 = (59369 / 65536)  VDD ≈ 1.19V
最后一步,怎么会得到1.19V?59369/65536*3.3V=2.989V

技术手册第849页,10.4.2说明:

[CHIPID7,CHIPID8]:16位内部参考信号源电压值(高位在前)。
标准值为1190(04A6H),单位为mV,即1.19V。但实际的芯片由于存在制造误差。内部参考信号源的电压值并不会受工作电压VCC的影响,所以内部参考信号源可以和ADC结合用于反推VCC电压,也可和比较器结合用于侦测工作电压。
已这个描述来说,读出来的值是59369mV,即59.369V,完全对应不起来哈。
另外,我的电压为5V,这个的计算逻辑更不清楚了。建议不要完全人工智能辅助,还是需要工程师校正一下在回帖吧?!

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:537
  • 最近打卡:2025-10-13 09:57:48

33

主题

2596

回帖

5710

积分

论坛元老

积分
5710
发表于 6 小时前 | 显示全部楼层
对比一下范例程序?
截图202510131018428083.jpg
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:537
  • 最近打卡:2025-10-13 09:57:48

33

主题

2596

回帖

5710

积分

论坛元老

积分
5710
发表于 6 小时前 | 显示全部楼层
还有就是你看看你使用的是那个版本的STC8H8K64U单片机
截图202510131019519253.jpg

A版是没有这个地方的
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-10-13 09:54:00
已绑定手机

1

主题

4

回帖

15

积分

新手上路

积分
15
发表于 6 小时前 | 显示全部楼层
_奶*** 发表于 2025-10-13 10:20
还有就是你看看你使用的是那个版本的STC8H8K64U单片机

就是看了技术手册,并测试后发现这个问题。现在单片机的版本为7.4.12U,完全符合使用CHIPID的使用要求
范例程序中使用的是:
#define CPUIDBASE   0xfde0
#define VREF_ADDR   (*(unsigned int volatile xdata *)(CPUIDBASE + 0x07))

我程序中的定义:
#define BGV_STC8H_CODE_ADDRESS (*(unsigned int volatile xdata *)0xFDE7)

测试结果就是之前给出的结果
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-10-13 09:54:00
已绑定手机

1

主题

4

回帖

15

积分

新手上路

积分
15
发表于 6 小时前 | 显示全部楼层
_奶*** 发表于 2025-10-13 10:20
还有就是你看看你使用的是那个版本的STC8H8K64U单片机

看了哈,为了避免有遗漏,我是三个地方的数据都读取了,结果发现读出来的值都不对,这样至少可以避免我的方法没有用对的这个问题。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:537
  • 最近打卡:2025-10-13 09:57:48

33

主题

2596

回帖

5710

积分

论坛元老

积分
5710
发表于 6 小时前 | 显示全部楼层
还有一件事,,,你开XFR访问了么
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:537
  • 最近打卡:2025-10-13 09:57:48

33

主题

2596

回帖

5710

积分

论坛元老

积分
5710
发表于 6 小时前 | 显示全部楼层
还有一件事,发现问题之后为何不直接使用范例程序测试。。。这些都是单片机内部的东西,不涉及外部电路。PCB上只有个单片机都能跑。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-10-13 09:54:00
已绑定手机

1

主题

4

回帖

15

积分

新手上路

积分
15
发表于 5 小时前 | 显示全部楼层
_奶*** 发表于 2025-10-13 10:48
还有一件事,,,你开XFR访问了么

谢谢,确实忘记开XFR了
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-13 17:13 , Processed in 0.180957 second(s), 103 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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