STC 单片机开发指南
编制日期 2026-10-14 | 版本号 Rev 1.0
从经典 8051 内核、单时钟 1T 引擎,一路到 80251 架构的 32 位 STC32 —— 一份覆盖 STC89 / STC12 / STC15 / STC8 / STC32 全家族、把「第一次上手会踩的坑」全部前置的工程手册
结论:STC 是国内出货量最大的 8051 兼容 MCU 家族,它把「不用外部晶振、不用外部复位、串口/USB 直连就能下载、IAP 自升级」这四件事做到了极致,因此非常适合量产型和成本敏感型产品。 真正让人卡住的从来不是代码,而是三件小事:IRC 频率档位没选对导致串口波特率飘、用户选择字误配把 P3.0/P3.1 关掉导致再也下不进程序、STC32 必须用 C251 工具链而误用 C51 工程。 本文按「装环境 → 建工程 → 编译 → 下载 → 调试 → 量产」的真实顺序组织,每一段都给出可复制的命令、可对照的表格、以及该段最常踩的坑。
报告总结
STC 的官方资料分散在多个站点:数据手册(DS)讲电气与引脚、技术手册/应用手册(RM)讲寄存器、 Keil 用 C51/C251 工具链、STC-ISP / AiCube-ISP 负责下载与烧录,而 STC-IDE 又提供另一套编辑体验。网上的中文教程绝大多数停留在「STC-ISP 点下载 → 选 hex → 上电」这一步,一旦遇到 IRC 不准、下载失败、读保护、USB 枚举不上就无解。本文档做了三件官方分散文档没有做的事:
- 把接力棒画清楚:明确指出「装 IDE」到「能断点调试」之间实际要经过哪几步,以及每一步做完了用什么现象验收。
- 把坑写在坑发生的地方:不单独罗列「常见问题」,而是在讲每个环节时就把该环节的失效现象、原因、处置一起给出。
- 标注来源与版本:所有数值型信息(引脚、电压、容量、寄存器地址、IRC 精度)都追溯到官方 DS/RM 的版本号。
读者路径
本文档共 20 章 + 4 个附录,按「先跑通、再理解」的顺序组织:
- 只想尽快跑通第一个程序:第 4 章(装环境)→ 第 5 章(建工程点灯)→ 第 7 章(下载)→ 第 20 章(核查清单),四章足够。
- 要做产品开发:第 2 章选型 → 第 3 章内核差异 → 第 6 章工程结构 → 第 11 章时钟电源 → 第 16 章 IAP。
- 调不通、报错:直接翻第 19 章故障排查速查表,按现象分层定位。
- 要写驱动:第 9 章 GPIO → 第 10 章中断 → 第 11 章时钟 → 第 12~15 章外设。
- 做 USB 或自升级产品:第 18 章 USB + 第 16 章 IAP 组合使用。
- 做电池产品:第 17 章低功耗,重点看「掉电模式唤醒等于复位」这件事。
1 · 文档导读与阅读路径
这一章说明本文档的边界:覆盖什么、不覆盖什么,以及为什么把内容按「流水线」而不是按「功能模块」组织。
1.1 覆盖范围
本文档覆盖从拿到一颗 STC 最小系统芯片,到固件跑起来、能下载、能调试、并能量产烧录的完整链路:
- 家族与选型:STC89 / STC12 / STC15 / STC8 / STC32 五大分支的规格对照,以及按「成本 / 主频 / 外设 / 封装」的选型号思路。
- 内核:经典 8051、单时钟 1T 引擎、80251 的 32 位扩展,以及 SFR 位寻址、选项字节的原理。
- 开发环境:Keil C51 / C251 的安装、型号数据库、工程模板、STC-ISP / AiCube-ISP / STC-IDE。
- 工程与构建:目录结构、启动文件、向量表、内存模型(small/compact/large)、编译选项。
- 下载与量产:硬件 USB ISP、串口 ISP、SWD 仿真、用户选择字、读保护。
- 外设:GPIO / 中断 / 时钟 / 复位 / 定时器 / PCA / PWM / UART / SPI / I2C / ADC / 比较器 / EEPROM / IAP / 看门狗 / 低功耗 / USB。
- 硬件与排障:最小系统电路设计要点、批量排障速查。
1.2 不覆盖什么
以下内容超出本文档范围,需要时请查阅对应官方资料:
- RTOS 内核源码剖析:FreeRTOS / μC-OS 在 STC 上的移植属于独立主题,本文只说明 STC32 的堆栈与 MDU 资源足以承载。
- 每一款封装的完整管脚定义:本文只给最常用封装(LQFP44/48/64、SOP28、QFN)的关键引脚,完整管脚表请查对应 DS。
- 寄存器位域全集:RM 有数百页寄存器描述,本文只给关键模块的常用位域,写代码时仍需对照 RM。
- 射频与协议栈细节:部分 STC8/STC32 型号集成的无线功能属于独立文档。
1.3 版本与命名约定
STC 的命名高度规律,看懂名字基本就知道它属于哪一档。型号由「前缀 + 系列号 + 子系列 + 容量 + 封装 + 温度」构成,以 STC8H8K64U 为例:
| 字段 | 取值 | 含义 |
|---|---|---|
| 前缀 | STC | 宏晶科技(STCMicro)8051 兼容 MCU 商标 |
| 系列号 | 89 / 12 / 15 / 8 / 32 | 89=经典 12T 8051;12=1T 增强型;15=1T 低引脚;8=1T 全功能增强;32=80251 架构 32 位 |
| 子系列 | H / G / A / F / W / C / L / K | 同系列内按外设与模拟资源细分,例如 STC8H 偏重 ADC 与 PWM,STC8G 偏重性价比 |
| 容量码 | 8K / 64K / 128K 等 | Flash 容量,如 8K64 表示 64 KB Flash |
| 封装 / 温度 | U / S / Q 与 -I / -A | U=QFN、S=SOP、Q=LQFP 等;-I 工业级 -40~85℃、-A 汽车级 -40~125℃ |
STC8H8K64U 与 STC8G1K08 同为 1T 内核,但外设资源与封装定位完全不同:H 系列通常带 12 位 ADC、多路 PCA 与硬件 USB,G 系列是精简性价比版。 下载工具是一样的 STC-ISP,但寄存器地址与可用外设要分别查各自 RM。
1.4 事实来源与免责
本文档所有数值型信息来自 STC 官方资料,章节正文中会标注出处。主要来源如下:
| 资料 | 内容 |
|---|---|
STC32G 系列技术手册(2026-07 版) | STC32G12K128/8K64 的 80251 内核、存储器映射、全外设寄存器 |
STC8H 系列技术手册 | STC8H 的 1T 内核、ADC、PWM、USB、比较器、IAP 寄存器 |
STC8G / STC8A 系列技术手册 | 精简版 8 系列的资源与寄存器 |
STC15 系列技术手册 | STC15W4K32S4 等低引脚 1T MCU |
STC12 / STC89 数据手册 | 经典 1T / 12T 型号的电气与引脚 |
STC-ISP / AiCube-ISP 帮助文档 | 下载流程、用户选择字、IRC 频率表、波特率发生器参数 |
STC 的 RM / DS 修订频繁,料号也会按 PCN 变更。文中引用某型号时一定标了系列;
正式立项前请到 stcmicro.com / stc.woa.com 复核目标料号的最新 DS 与 PCN 状态。特别提醒:STC32 必须用 Keil C251 建立工程,
用 C51 工程打开会直接报「不支持的指令集」类错误,这一点在任何地方都不会被自动纠正。
2 · STC 家族全景与选型
STC 不是一个系列,而是宏晶科技基于 8051 指令集不断迭代出来的整个 MCU 货架。这一章先把货架摆在桌上,讲清每个分支的存在理由,再给选型路径。
2.1 一句话认识 STC
STC(宏晶科技,STCMicro)长期占据国产 8051 兼容 MCU 出货量第一的位置。它的核心打法是把 8051 内核不断提速、加外设,同时把「下载/自举」做到极简:
- 免外部晶振:内置高精度 IRC(STC8/STC32 典型 ±0.3%),多数应用一颗芯片即可工作。
- 免外部复位:内部集成上电/掉电复位与 LVD,最小系统只需 VCC + GND + 下载脚。
- 串口/USB 直连下载:出厂固化 BootLoader,P3.0/P3.1 或 USB 引脚直接进 ISP,无需专用烧录器。
- IAP 自升级:Flash 可划分为程序区与 DataFlash 区,固件能自己改写自己,做 OTA/ BootLoader 非常方便。
2.2 五大系列按内核分类
选型第一刀永远是内核与架构,因为它决定了指令集、工具链与性能天花板:
| 分支 | 内核/架构 | 机器周期 | 典型主频 | 定位 |
|---|---|---|---|---|
| STC89 | 经典 8051 | 12T | 0~35 MHz(外部晶振) | 教学、存量 89C52 替换 |
| STC12 | 增强 8051(1T) | 1T | ≤ 35 MHz | 性价比 1T 入门,5V 兼容 |
| STC15 | 增强 8051(1T) | 1T | ≤ 35 MHz | 低引脚、低成本、内置 IRC |
| STC8 | 增强 8051(1T) | 1T | ≤ 45 MHz(IRC) | 全功能增强,ADC/PWM/USB |
| STC32 | Intel 80251(32 位) | 1T | ≤ 48 MHz | 32 位性能、硬件 USB、MDU32 |
经典 8051 每机器周期 12 个时钟;STC 的 1T 引擎每机器周期 1 个时钟,同主频下指令吞吐约提升 12 倍。
但这要求软件延时循环要按 1T 重新标定——很多从 89C52 搬来的 delay_ms() 在 STC12/15/8 上会快 12 倍,这是「换芯片后延时不对」的头号原因。
2.3 全家族规格速查
下表把 STC 主流型号的核心资源拉平对比。所有数字取自各系列官方技术手册:
| 型号 | 内核 | 主频 | SRAM | Flash | 关键外设 | 供电 | 封装 |
|---|---|---|---|---|---|---|---|
| STC89C52RC | 8051(12T) | 0~35 MHz | 512 B | 8 KB | 3 定时器、UART、6 中断源 | 3.3/5 V | DIP40 / SOP40 / PLCC44 |
| STC12C5A60S2 | 1T 8051 | ≤35 MHz | 1280 B | 60 KB | 2×UART、SPI、ADC、PWM、PCA | 3.3/5 V | LQFP48 / DIP40 |
| STC15W4K32S4 | 1T 8051 | ≤35 MHz | 4 KB | 32 KB | 4×UART、SPI×2、I2C、15 路 ADC、PWM、PCA、比较器 | 2.5~5.5 V | LQFP44/64、SOP28 |
| STC8H8K64U | 1T 8051 | ≤45 MHz | 8 KB | 64 KB | 12 位 ADC×16、8 路 PCA/PWM、USB、4×UART、I2C/SPI | 1.9~5.5 V | LQFP48/64、QFN |
| STC8G1K08 | 1T 8051 | ≤45 MHz | 1.25 KB | 8 KB | 10 位 ADC、PWM、UART/SPI/I2C | 2.0~5.5 V | SOP16/20、QFN20 |
| STC32G12K128 | 80251(32 位) | ≤48 MHz | 12 KB | 128 KB | USB 2.0 FS、4×UART、SPI×2、I2C、12 位 ADC、MDU32 | 1.9~5.5 V | LQFP48/64、QFN |
2.4 STC89 系列
整个 STC 货架的「入门砖」,与经典 89C52RC/89C58RD+ 引脚与指令完全兼容,是高校教学与存量替换的首选。
STC89C52RC:8 KB Flash / 512 B RAM / 3 个 16 位定时器 / 1 个 UART,支持 6 个中断源。STC89C58RD+:Flash 扩大到 32 KB,RAM 1280 B,适合略大的裸机程序。- 供电范围 3.3~5.5 V,GPIO 可直接接 5 V 逻辑,做实验和老系统替换最省心。
- 局限:仍是 12T,性能有限;无内置 ADC/PWM(部分型号除外);无硬件 USB;下载依赖串口 ISP。
教学实验、存量 89C52 板卡替换、或对性能毫无要求只求「能跑、好买、引脚熟」的场景。新设计不建议再选 89 系列,STC8/STC15 的性价比与集成度已经完全覆盖它。
2.5 STC12 系列
STC 把 8051 拉进 1T 时代的起点。相比 89 系列,STC12 多了SPI、增强型 PCA/PWM、片内 ADC、更灵活的时钟分频,且保留 5 V 兼容。
STC12C5A60S2:60 KB Flash / 1280 B RAM,2×UART、SPI、8 路 10 位 ADC、2 路 PCA/PWM、看门狗。- 支持6 时钟/机器周期可调(早期兼容 12T,后期可切 1T),过渡期好用。
- 仍用 C51 工具链,工程与 STC89 几乎一致,迁移成本极低。
2.6 STC15 系列
把「小引脚 + 低成本 + 高集成」做到极致的 1T 系列,典型的如 STC15W4K32S4:
| 指标 | STC15W4K32S4 | 说明 |
|---|---|---|
| 主频 | ≤ 35 MHz(IRC 或外部晶振) | 内置 IRC 出厂校准,可免外部晶振 |
| Flash / RAM | 32 KB / 4 KB | 另有可当作 EEPROM 的 DataFlash 区 |
| 串口 | 4× UART | UART1 固定 P3.0/P3.1,UART2~4 可切换引脚 |
| 模拟 | 15 路 10 位 ADC + 比较器 | 支持 ADC 外部参考与内部 1.19 V 基准 |
| 定时器 | T0/T1/T2 + T3/T4 扩展 | T2 常用作波特率发生器 |
| 特色 | PCA、PWM、SPI×2、I2C、触摸按键 | 引脚少但外设全 |
2.7 STC8 系列
STC 当前最主流的 1T 全功能系列,分 STC8A / STC8F / STC8G / STC8H 四个子系。以 STC8H8K64U 为标杆:
- 1T 内核,IRC 最高 45 MHz,典型精度 ±0.3%(出厂校准,温漂小)。
- 12 位 ADC × 16 通道,带内部 1.19 V 参考与 ADC 专用运放,采样噪声低。
- PCA 可扩展出 8 路 16 位 PWM,另含独立高级 PWM 定时器(部分子系)。
- 硬件 USB 2.0 全速(STC8H8K64U 等),可免晶振做 USB 下载/CDC 虚拟串口。
- 供电 1.9~5.5 V,GPIO 准双向/推挽/高阻/开漏四种模式,部分引脚带施密特与 20 mA 驱动。
① 引脚切换资源很丰富但容易配错:UART/SPI/I2C/PCA 的引脚可切换,配错外设通道位(如 P_SW1/P_SW2)会导致「代码对但物理脚没动」。
② ADC 是 12 位但早期 STC8G 部分型号为 10 位,采样精度需求高的场景要查具体子系 DS。
③ IRC 频率档位必须和软件一致:选了 24 MHz 档却在代码里当 11.0592 MHz 用,串口波特率会整体飘掉。
2.8 STC32 系列
STC32 采用 Intel 80251 架构的 32 位扩展,是 STC 的旗舰。以 STC32G12K128 为标杆:
- 32 位数据通路,单指令支持 32/16/8 位加减与乘除(MDU32 硬件乘除法单元)。
- 128 KB Flash / 12 KB SRAM(edata 8 KB + xdata 4 KB),4 KB 引导区,1 KB DataFlash。
- 所有 SFR(80H~FFH)与 ebdata(20H~7FH)均支持位寻址,堆栈理论深度可达 64 KB。
- 内置 USB 2.0 全速(免晶振)、4×UART、2×SPI、I2C、12 位 ADC、多路 PWM。
- 编译器为 Keil C251,FreeRTOS / μC-OS 均有 STC32 移植版本。
2.9 料号怎么读
以 STC8H8K64U 为例,拆解规则如下:
| 字段 | 示例值 | 含义 |
|---|---|---|
| 前缀 | STC | 宏晶 8051 兼容 MCU |
| 系列号 | 8 | 8=1T 全功能;3=早期;12/15 见上 |
| 子系列 | H | H=高性能(ADC/USB/PWM);G=精简性价比;A/F=通用 |
| 容量码 | 8K64 | 8K=前缀标识,64=64 KB Flash |
| 封装码 | U | U=QFN;S=SOP;Q=LQFP;P=TSSOP |
不同子系列的引脚数与外设映射不完全一致,例如 STC8H8K64U 的 USB 脚是 P3.0/P3.1,而 STC8G1K08 根本没有 USB。 下单与画原理图前,一定对照该型号的 DS 引脚图与 RM 外设章节,不要跨子系套用表格。
2.10 选型决策路径
把上面这些收敛成六个问题的决策树,从上往下问,命中即停:
来源:stcmicro.com 产品页 + STC 系列技术手册
补充三条不成文经验:
- 第一次接触就买官方评估板(如 STC8H8K64U 核心板、STC32G12K128 实验箱),板载 USB 下载电路与排针,能省掉一半接线类故障。
- 同一产品线内优先选大 Flash 那一档。STC 各档差价极小,后期发现 Flash 不够的成本远高于差价。
- 需要自升级/OTA 就先用 IAP 跑通 BootLoader,别等到产线上才发现 DataFlash 分区没留。
3 · 内核架构:8051 / 1T / 80251
STC 的全部型号都兼容 8051 指令集,但内部引擎差异巨大。理解内核,才能理解为什么 STC12 比 STC89 快 12 倍、为什么 STC32 必须用 C251 工程。
3.1 经典 8051 与 STC 的渊源
8051 是 1980 年 Intel 推出的 8 位 MCU 架构,其指令集与寄存器模型(ACC、B、PSW、SP、DPTR、4 组 R0~R7 工作寄存器)已成为事实标准。STC 全系列都二进制兼容 8051 指令,因此:
- 经典 8051 的 C 代码(如
reg52.h头文件)在 STC 上基本可直接复用。 sbit/sfr/bit等 8051 特有语法继续有效。- 经典 8051 的 12 时钟机器周期、6 时钟取指、4 总线时序在 STC89 上完全保留。
STC89 系列就是「现代工艺重制的 8051」:引脚兼容、外设略有增强,但性能天花板就是 89C52 的水平。要突破它,必须换引擎。
3.2 1T 单时钟引擎
STC12 起引入单时钟(1T)引擎:每个机器周期只消耗 1 个时钟,而非经典 8051 的 12 个。带来的变化:
| 对比项 | 经典 8051(STC89, 12T) | STC 1T 引擎(12/15/8) |
|---|---|---|
| 机器周期 | 12 时钟 | 1 时钟 |
| 同主频指令吞吐 | 基准 1× | 约 12× |
| 12 MHz 下一机器周期 | 1 μs | ≈ 83 ns(12 MHz 下) |
| 软件延时标定 | 原延时循环直接可用 | 必须按 1T 重新计算(或调用官方延时函数) |
| 外部总线时序 | 保留(可接并口) | 多数型号取消外部总线,强化片上外设 |
搬来的 delay_ms(1000) 在 1T 上大约只延时 80 ms;串口的波特率发生器分频值也按 1T 的时钟来算。STC-ISP 的「波特率计算器」会自动按所选芯片的 1T/12T 与 IRC 频率给出正确重载值——永远用工具算,别手填 89C52 老值。
3.3 80251 与 STC32 的 32 位扩展
STC32 采用 Intel 80251 架构的 32 位扩展(C251 工具链),在 8051 基础上做了质的飞跃:
- 32 位数据通路:单条指令支持 32/16/8 位加减,32 位乘除由 MDU32 硬件单元完成。
- 10 个 32 位累加器 + 16 个 16 位累加器 + 16 个 8 位累加器,运算吞吐远高于 8 位 8051。
- 堆栈深度理论 64 KB(取决于 edata 容量),函数调用与局部变量不再被 256 B 限制卡死。
- FreeRTOS / μC-OS for STC32 官方提供移植,可跑多任务 RTOS。
代价:必须用 Keil C251 建立工程,源文件按 251 模式编译。用 C51 工程打开 STC32 会报指令集不支持。
3.4 存储器映射与 SFR 位寻址
STC 的存储器模型如图 4 所示。关键机制是位寻址:
来源:STC 系列技术手册 存储器章节
- SFR 区(80H~FFH):所有特殊功能寄存器,凡是位寻址型(地址能被 8 整除)的位都可用
sbit单独置 0/置 1。 - 片内 RAM 位寻址区(20H~2FH):16 字节共 128 个可位寻址位,适合做布尔标志。
- STC32 的 edata:8 KB 单时钟高速 RAM,含位寻址区;xdata 为 4 KB 扩展 RAM / 外设映射区。
翻转一个 GPIO 引脚在 STC 上可以是一条 SETB P10 / CLR P10 单指令(前提是引脚用 sbit 声明到某位寻址 SFR)。
位操作原子、不可被中断打断地割裂,写驱动时既省代码又避免竞争。这是 STC 相对很多 M0/M3 MCU 在「位翻转」上的老优势。
3.5 选项字节与用户选择字
STC 把「出厂固化配置」称为用户选择字(User Option Bytes),由 STC-ISP 在下载时写入,决定:
- 是否使能掉电复位、低压复位,以及低压门槛档位。
- 上电复位是否等待 IRC 频率稳定、是否输出系统时钟到某引脚。
- 是否禁止 P3.0/P3.1 用作 I/O(误配会导致再也无法串口下载——第 7 章详述)。
- 是否允许读保护(使能后读出 Flash 全 00,需整片擦除才能解除)。
两个最常见的误操作:① 把 P3.0/P3.1 设成普通 I/O 后,串口 ISP 通道消失,只能改走 USB 或 SWD 才能救回; ② 误勾「读保护」又忘了密码,整片需要擦除。下载前一定要在 STC-ISP 的「用户选项」页逐项确认,不要照抄网上的勾选截图。
4 · 开发环境:Keil / STC-ISP / AiCube
STC 的工具链极轻:一个 Keil + 一个 STC-ISP(或 AiCube-ISP)就能搞定编译与下载。这一章把「装什么、怎么装、装完怎么验证」讲清楚。
4.1 编译器矩阵
| 目标芯片 | Keil 版本 | 工具链 | 工程类型 | 备注 |
|---|---|---|---|---|
| STC89 / STC12 / STC15 / STC8 | Keil C51 | C51 编译器 | C51 工程 | 最通用,资料最多 |
| STC32(80251) | Keil C251 | C251 编译器 | C251 工程 | 与 C51 工程不互通 |
| 所有型号 | STC-IDE(可选) | 内置编译器 | STC 工程 | 宏晶自研,体积轻 |
STC-ISP / AiCube-ISP 是下载与烧录工具,同时附带强大的辅助功能:波特率计算器、延时计算器、头文件生成、用户选项配置、范例程序。它不编译代码,只负责把 .hex/.bin 写进芯片。
4.2 安装 Keil C51 / C251
标准流程:
- 到 Keil 官网下载 C51 与 C251 安装包(两者可装在同一目录,互不冲突)。
- 安装时记住安装路径(默认
C:\Keil_v5),STC 型号数据库要复制到这里。 - 首次启动 Keil,新建工程时若找不到 STC 型号,说明还没添加 STC 数据库(见 4.3)。
Keil 评估版对 C51 限制 2 KB、对 C251 限制 32 KB 代码量,超了会链接失败。STC 官方提供「免费不限量」的 C51/C251 注册机/授权(在 STC-ISP 的「Keil 仿真设置」页有指引),按官方说明激活即可突破限制。
4.3 添加 STC 型号数据库
STC 不在 Keil 原厂数据库里,需要把宏晶提供的 STC.CDB / STC.M51 复制到 Keil 目录并合并:
| 步骤 | 操作 |
|---|---|
| 1 | 从 STC-ISP「Keil 仿真设置 → 添加型号与头文件到 Keil 中」导出数据库文件 |
| 2 | 将导出的 STC.CDB 复制到 Keil\C51\UV4\(C51)与 Keil\C251\UV4\(C251) |
| 3 | 在 Keil 新建工程时,厂商列表选 STC,即可看到 STC89/12/15/8/32 全系型号 |
4.4 AiCube-ISP 与 STC-IDE
- STC-ISP:老牌下载工具,界面经典,功能最全,强烈建议新手先用它。
- AiCube-ISP:宏晶新一代工具,取代 STC-ISP,集成图形化外设配置(AiCube),可自动生成初始化代码框架。
- STC-IDE:宏晶自研编辑器,内置编译与下载,适合不想装 Keil 的场景。
新手:Keil C51/C251(写代码编译)+ STC-ISP(下载);想少写初始化:加 AiCube 生成 GPIO/定时器/UART 配置。STC32 必须用 C251 分支。
4.5 工程模板与头文件
STC 每个型号都有配套 头文件(如 STC8H.H、STC32G.H),定义了全部 SFR 与位定义。正确做法是:
- 在 Keil 工程里 Include 对应头文件,不要手写 sfr 定义。
- 用 STC-ISP 的「头文件生成」按钮,按所选芯片自动产出可用的
.h。 - 主频、IRC 频率档位用宏定义统一管理,避免波特率与延时计算时取值不一致。
5 · 第一个工程:点亮 LED
用最小代价跑通「编译 → 下载 → 看到现象」的闭环。以 STC8H8K64U 核心板(板载 USB 下载)为例,其它型号步骤完全一致,只是下载口不同。
5.1 AiCube / Keil 新建工程
- 打开 Keil,
Project → New μVision Project,选择芯片 STC → STC8H8K64U(C51 工程)。 - 在工程选项里设置:Target → Xtal 填实际主频(如 24 MHz),Output 勾选 Create HEX File。
- 新建
main.c,包含#include "STC8H.H"并定义主频宏。
5.2 编译与产物
点击 Build,控制台出现 0 Error(s) 即编译通过,在工程目录下生成 xxx.hex。常见编译错误:
| 报错 | 原因 | 处置 |
|---|---|---|
undefined identifier | 头文件没 include 或路径错 | 确认已加 STC 头文件到工程 |
target not created 代码超限 | Keil 评估版 2 KB 限制 | 按 4.2 激活不限量授权 |
invalid instruction | 用 C51 工程编 STC32 | 改用 C251 工程 |
5.3 下载与点灯代码
STC8H 的 P3.0/P3.1 兼作 USB 下载脚。一个典型的点灯例程(1 秒翻转一次):
#include "STC8H.H"
#include "intrins.h"
#define MAIN_FOSC 24000000UL // 主频 24 MHz
void delay_ms(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < MAIN_FOSC / 10000; j++) // 1T 下约 1ms
_nop_();
}
void main() {
P3M0 = 0x00; P3M1 = 0x00; // P3 设为准双向
P3 &= ~(1 << 0); // 备用:避免误关下载脚
while (1) {
P1 |= (1 << 0); // P1.0 高 → LED 亮
delay_ms(500);
P1 &= ~(1 << 0); // P1.0 低 → LED 灭
delay_ms(500);
}
}
下载步骤:打开 STC-ISP → 选芯片 STC8H8K64U → 打开刚生成的 .hex → 点「下载/编程」→ 给板子重新上电(冷启动)。看到「下载成功」即闭环完成。
STC8H/STC32G 支持硬件 USB + 免断电下载:在 STC-ISP 勾选「下次下载时自动复位」并接好 USB,此后点下载即可自动进 ISP,不必手动断电。串口 ISP 仍需冷启动(断电再上电那一刻进 BootLoader)。
5.4 常见问题
| 现象 | 原因 | 处置 |
|---|---|---|
| 一直「正在检测目标单片机」 | 冷启动没触发 / 下载脚接错 | 确认上电瞬间 P3.0/P3.1 没被拉死;USB 下载确认 D+/D- 接对 |
| 下载成功但 LED 不闪 | 引脚或电平逻辑反了 | 用万用表量 P1.0 是否翻转;确认 LED 共阳/共阴接法 |
| 下载一次后连不上了 | 用户选择字关了下载脚 | 改走 USB/ SWD 救回,或按住 P3.2 强制进 ISP(部分型号) |