只读分享解决方案文档原理方案设计📅 2026-10-14🔖 .md⏳ 还有3日到期
🔧解决方案&应用市场分析 -> 原理方案设计 -> 主芯片方案调试开发 -> 航顺HK32_开发指南

航顺HK32_开发指南

同系列 · 原理方案设计
扫码打开本页
微信扫码

航顺 HK32 开发指南

编制日期 2026-10-14

从产品选型、环境搭建、外设开发到固件下载与 SWD 调试 —— 一份面向工程落地的主芯片开发手册

29
大家族 / 300+ 型号
ARM Cortex-M0/M3/M4 与 RISC-V 内核
120MHz
HK32F103A 主频
高于同档 STM32F103 的 72MHz
168MHz
HK32F4xx 高性能
M4F 内核 / 1MB Flash / 256KB SRAM
PTP
HK32F103 引脚兼容
与 STM32F103 软硬件兼容可平替
3
主流工具链
Keil MDK / IAR EWARM / GCC+VS Code
免费
SDK 与固件库
官网开放下载,无需授权费

报告总结

航顺(HK32MCU)是国内出货量最大的 ARM Cortex-M 国产 MCU 之一,二十九大家族覆盖了从指甲盖大小的超低功耗入门芯片到 168MHz 工业级高性能 MCU 的全部档位。本文档把从选型到量产的完整开发链路串成一条线:先帮你判断该选 HK32 的哪一族、用哪套工具链,再逐个讲清时钟、GPIO、中断、定时器、串口、SPI/I2C、ADC、Flash 下载、SWD 调试、低功耗与启动机制,最后给出从 STM32 迁移、故障排查和设计核查清单三类「拿来即用」的速查内容。

结论:对于绝大多数 STM32F103 存量项目,HK32F103 系列可以引脚兼容(PTP)+软件兼容地直接平替 —— 沿用 Keil + STM32 标准外设库(或 CubeMX 生成代码)即可上手,真正需要修改的只有芯片型号、Flash 容量与个别外设差异。本文档的所有外设寄存器与库函数均以航顺官方数据手册 / 用户手册为最终依据,文中速查表与代码片段用于建立开发直觉,量产设计请以最新版手册为准。

1 · 范围与约定

先说清这份文档管到哪里、不管哪里,以及文中术语和数据的出处,避免后续各章产生歧义。

1.1 覆盖范围

本文档面向第一次接触航顺(HK32MCU)芯片、或准备把存量 STM32 项目平移到 HK32 的工程师,覆盖从选型到量产上线的完整开发链路:

  • 选芯片:二十九大家族的内核、档位、封装与兼容性定位;
  • 搭环境:Keil MDK / IAR EWARM / GCC + VS Code 三条工具链,以及官网 SDK 与设备支持包;
  • 写固件:时钟、GPIO、中断、定时器、串口、SPI/I2C、ADC 等核心外设的开发范式;
  • 下程序:SWD 烧录、UART ISP、IAP 与 Option Bytes(读保护);
  • 调问题:SWD/JTAG 调试、低功耗、启动机制、硬件设计要点;
  • 速查表:从 STM32 迁移、故障排查、设计核查清单、封装引脚与资料来源。

1.2 不覆盖什么

为避免范围失控,以下主题本文档不展开,必要时给出官方入口或相邻章节跳转:

  • 具体型号寄存器的逐位定义:以对应芯片的《数据手册》《用户手册》为准,本文只在附录 C 给常用位定义索引;
  • RISC-V 车规 SoC(HK32A040/A470/AUTO39A)的底层驱动:其工具链与 SDK 独立于 Cortex-M 系列,本文仅作选型提示,不展开寄存器级开发;
  • RTOS、文件系统、GUI、协议栈等中间件:与 MCU 厂商无关,按通用方法接入即可;
  • PCB Layout 与 EMC 完整设计:仅在第 17 章给硬件设计要点,不替代完整硬件设计规范;
  • 量产烧录产线与加密授权:仅在第 13、20 章给原则,不替代产线方案。

1.3 版本与术语约定

术语 / 缩写含义本文约定
HK32 / HK32MCU深圳市航顺芯片技术研发有限公司的 32 位 MCU 品牌统称「航顺」或「HK32」
PTPPin-To-Pin,引脚兼容指可直接替换同封装同引脚定义的原厂芯片
ISPIn-System Programming,系统内编程指芯片内置 Bootloader 经串口等下载
IAPIn-Application Programming,应用内编程指用户程序自己改写 Flash
ICPIn-Circuit Programming,电路内编程指经调试接口(SWD/JTAG)烧录
SWD / JTAGARM 串行 / 边界扫描调试接口HK32 全系支持 SWD,部分支持 JTAG
SDK / 固件库厂商提供的驱动库与外设例程HK32 提供「标准外设库」风格 SDK
Option Bytes芯片内部配置字节(写保护、读保护等)又称「选项字节」,见第 13 章

1.4 事实来源与免责

数据以官方手册为最终依据

本文档的产品参数、寄存器位、引脚定义与命令均来自航顺官网(www.hsxp-hk.com)公开资料、对应芯片数据手册 / 用户手册,以及社区实测经验(如正点原子 / OpenEdv 的 HK32 训练营)。HK32 各家族迭代较快、子型号众多,任何用于量产设计的具体数值(Flash 容量、封装、电气参数、寄存器地址)请回到对应型号的最新版官方手册核对。文中代码片段用于建立开发直觉,未做逐型号编译验证。

来源:航顺官网产品中心(www.hsxp-hk.com/product)、OpenEdv《航顺 MCU 开发入门及常见问题汇总》、世强硬创平台 HK32F103 资料页。

2 · 产品家族与选型

HK32 二十九大家族按内核与定位分为经济型、主流型、低功耗型、高性能型、车规级与专用型。这一章帮你快速收敛到两三款候选,再进入工具链章节。

2.1 二十九大家族总览

航顺以「通用 + 专用」双线布局,内核覆盖 ARM Cortex-M0 / M3 / M4 与 RISC-V。下表按定位归类,选型时在「内核 / 主频 / Flash / 封装」四列先圈定档位:

定位内核代表家族典型主频特点
经济型M0HK32F030M / 0301M、HK32C030、HK32F005、HK32L010、HK32E03248 MHz超小面积(0.6~1mm²)、超低单价
主流型M0HK32F030 / 031 / 04A、HK32F030A / 031A / 04AA、HK32F07248~72 MHz替代 STM32F0xx,外设齐全
主流型M3HK32F103、HK32F103A72~120 MHzPTP 兼容 STM32F103,可平替
低功耗型M0HK32L08x32~48 MHzSleep/Stop/Standby 多档低功耗
高性能型M3HK32F39A最高 120 MHz带浮点相关加速、丰富通信接口
高性能型M4HK32F4xx(F405/407/415/417)最高 168 MHzM4F + FPU,1MB Flash / 256KB SRAM
车规级RISC-VHK32A040、HK32A470、HK32AUTO39A、HK32AUTO103—通过 AEC-Q100 / ISO 26262 流程
专用型M0/M3HK32M/ASPIN(电机)、HK32ASAFE010(安全)、HK32ALG31(光模块)、HK32ATCH(触摸)—面向特定场景的差异化外设

2.2 按内核分四档

内核决定工具链、性能天花板与生态,是选型的第一道筛选:

  • Cortex-M0:最低成本与功耗,适合小家电、传感器节点、替代 8/16 位 MCU;无硬件除法、中断响应慢于 M3/M4。
  • Cortex-M3:HK32F103 系列是「平替 STM32F103」的主力,生态最成熟,标准外设库与 STM32 几乎一致。
  • Cortex-M4(F4):带 FPU 与 DSP 指令,适合电机 FOC、数字电源、HMI 等算力敏感场景。
  • RISC-V 车规:A 系列面向汽车电子,工具链与 SDK 独立,本文不展开寄存器级开发。

2.3 选型决策树

需求:通用 MCU 还是专用? 算力要求低 / 成本敏感 → M0 经济/主流型 专用场景 → HK32M/ASPIN/ASAFE/ALG 中端 / 要平替 STM32 → HK32F103 / F103A(M3) 算力敏感 / 带算法 → HK32F4xx(M4F) 电池供电 / 长期待机 → HK32L08x / L010 小封装 / 超低功耗 → HK32F005/L010 标准 LQFP48 首选 → HK32F103C8T6 大 RAM / 多外设 → HK32F103VET6/F4xx 注:汽车电子直接走 HK32AUTO 车规系列,需 AEC-Q100
图 1 · HK32 选型决策树(先定内核,再看封装与功耗)

2.4 主力型号速查

下列是在 STM32 平替与通用控制场景中最常被选到的型号,Flash / SRAM 为常见子型号值,量产请以具体后缀的数据手册为准:

型号内核主频Flash / SRAM封装兼容性 / 备注
HK32F103C8T6M372 MHz64KB / 20KBLQFP48Pin-to-Pin 兼容 STM32F103C8T6
HK32F103RCT6M372 MHz256KB / 48KBLQFP64兼容 STM32F103RCT6
HK32F103VET6M372 MHz512KB / 64KBLQFP100兼容 STM32F103VET6
HK32F103A 系列M3最高 120 MHz依子型号LQFP 多款主频高于 STM32F103,注意时序余量
HK32F030C8T6M048 MHz64KB / 10KBLQFP48替代 STM32F030C8T6
HK32F072CBT6M048 MHz128KB / 16KBLQFP48带 USB,替代 STM32F072
HK32F4xx(F407)M4F168 MHz1MB / 256KBLQFP100/144高性能,带 FPU
HK32L08xM032~48 MHz依子型号多款低功耗,替代 STM32L0

2.5 与 STM32F103 的兼容定位

一句话:HK32F103 是 STM32F103 的国产平替,不是「近似兼容」

HK32F103 在引脚定义、地址映射、外设寄存器与标准外设库 API 上与 STM32F103 高度一致,硬件可直接 PTP 替换,软件可沿用 STM32F103 工程(标准外设库 / HAL)后改芯片型号即可编译。差异集中在:① HK32F103A 主频可到 120MHz(STM32 为 72MHz),超频使用需注意外设时钟与 Flash 等待周期;② 个别外设(如部分 ADC 通道、USB)在不同子型号上有细节差异;③ 选项字节(Option Bytes)布局略有不同,详见第 13 章。具体迁移清单见第 18 章。

2.6 选型时的资源核算

选定内核与主频后,还要按实际用量核对资源,避免「Flash 够但 RAM 不够」这类后期才发现的问题:

资源核算方法注意
Flash代码 + 固件库 + 字库/图片资源字库与图片很占空间,用外部 SPI Flash 存图/字库更划算;留 20% 余量给升级
SRAM全局变量 + 栈 + 堆 + 任务栈(若上 RTOS)RTOS 任务栈是隐藏开销,用高水位 API 定稿(见第 24 章)
引脚功能引脚 + 调试口 + 余量复用/重映射可缓解,但留 10%~20% 空闲 IO给产线与扩展
外设数量数一数 UART/SPI/I2C/TIM/ADC 各要几个同一外设的多个实例可能挂不同总线,注意 APB1 上限
DMA 通道需要 DMA 的外设数(见第 21 章)通道冲突要提前规划(尤其 USART1 只有收有通道)
封装引脚数 ≥ 需求 + 散热考虑LQFP 便于手焊与返修;小封装省空间但难手工焊
一个常见选型误区

很多人按「Flash 大小」选芯片,结果SRAM 或引脚不够:比如要跑一个带字库显示和缓冲的 UI,代码只有 40KB,但字库 + 帧缓冲把 SRAM 撑爆;或者外设用光了 IO,连 SWD 调试口和两个按键都接不下。建议先用「资源核算表」把用量算清楚,再选型号,尤其把 RTOS 任务栈、DMA 通道、引脚余量提前算进去。

2.7 国产替代的常见顾虑

顾虑实际情况建议
生态不如 ST 完整基础外设(UART/SPI/I2C/ADC/TIM)资料齐全;CubeMX 支持等需自行确认标准外设库足够用;不要强依赖 CubeMX 代码生成
资料获取不便官网 + 社区(OpenEdv/正点原子训练营)资料已较完整见附录 D;关键参数以官方手册为准
与 ST 完全一致?HK32F103 是 PTP + 软件兼容,但不是「零差异」:个别外设、Option Bytes、主频有别平替可行;量产前对照两家手册逐项核对(见第 18 章)
长期供货与生命周期国产 MCU 生命周期承诺依厂商,量产前应确认下单前与厂商确认供货周期与生命周期

来源:航顺官网产品中心、OpenEdv 航顺训练营、选型与资源核算工程经验。

3 · 开发工具链

HK32 是标准 ARM Cortex-M,生态与 STM32 高度重合:Keil MDK、IAR EWARM、GCC 三条路都能走。这一章帮你按团队现状选工具链,并说清授权与设备包两个最容易卡住新人的点。

3.1 三条工具链对比

工具链授权代码上限适用场景调试
Keil MDK商业(有免费 MDK-Lite)MDK-Lite 限制 32KB(Cortex-M0/M3/M4 同限)中小项目、教学、STM32 平移团队ULINK / CMSIS-DAP / J-Link
IAR EWARM商业(30 天试用 / Kickstart 32KB)Kickstart 版限制 32KB对编译体积/性能敏感的老项目J-Link / I-jet
GCC + VS Code完全免费(ARM GNU Toolchain)无限制开源、CI、跨平台团队OpenOCD + CMSIS-DAP/J-Link
经验法则

从 STM32 平移的项目首选 Keil MDK:改设备型号即可复用既有工程与标准外设库,上手成本最低。需要免费、可脚本化或做 CI 的团队走GCC + VS Code + OpenOCD。HK32F103C8T6 的固件通常 <32KB,MDK-Lite 可直接用,不必立刻买授权。

3.2 Keil MDK 安装与授权

  1. 安装 MDK:从 Keil 官网下载 MDK(含 uVision),按向导安装,建议装在默认路径。
  2. 装 HK32 设备包:打开 Pack Installer(工具栏小盒子图标),搜索 HK32 或 Hangshun 安装对应 DFP;若 Pack 仓库未收录,从航顺官网下载 HK32 DFP 后手动导入(详见 3.5)。
  3. 授权:未授权时以 MDK-Lite 运行(32KB 限制)。超过限制需购买授权并在 File → License Management 输入 LIC。
  4. 验证:新建工程时应能在 Device 列表里搜到 HK32F103 系列,说明设备包生效。

3.3 IAR EWARM

IAR 对 HK32 的支持同样依赖设备描述文件。操作要点:

  • 安装 EWARM 后,在 Project → Options → General Options → Device 选择 HK32 对应型号(或借用 STM32F103 描述后微调);
  • 免费 Kickstart 版限制 32KB,超过需商业授权;
  • 调试走 J-Link 或 I-jet,协议配置与 Keil 类似。

3.4 GCC + VS Code

完全免费的路线,适合做持续集成与跨平台开发:

  • 工具链:安装 ARM GNU Toolchain(arm-none-eabi-gcc),并把 bin 目录加入 PATH;
  • 编辑器:VS Code + C/C++、Cortex-Debug 扩展;
  • 调试:OpenOCD 提供 GDB Server,launch.json 里用 cortex-debug 连接 CMSIS-DAP / J-Link;
  • 构建:用 Makefile 或 CMake 管理(第 5 章给最小 Makefile 骨架)。

3.5 设备支持包(Pack / DFP)

设备包是第一个卡点

HK32 的设备描述(启动文件、Flash 算法、SVD、头文件)由 DFP 提供。两个来源:① Keil Pack 仓库在线安装(推荐);② 航顺官网「资料下载 / 开发资料」里的 HK32 相关软件(含仿真器驱动与 DFP)离线导入。若 Pack 仓库搜不到,可直接借用 STM32F103 的 DFP(HK32F103 与其地址映射一致),再把启动文件与 Flash 算法换成航顺 SDK 中的版本即可。具体路径见第 4、13 章。

3.6 工程模板与目录组织

不论哪条工具链,把工程文件按职责分目录是长期可维护的基础。推荐结构:

Project/
├── BSP/            # 板级支持:LED/按键/传感器/屏(与业务无关的硬件封装)
├── App/            # 业务逻辑:状态机/协议/算法
├── Middleware/     # 中间件:RTOS / 协议栈 / 文件系统
├── Drivers/        # 外设驱动:UART/SPI/I2C/ADC 封装
├── Libraries/      # SDK:CMSIS + StdPeriph(官方原样,不改)
├── Startup/        # 启动文件 + 链接脚本
├── User/           # main.c 与全局配置
└── Output/         # 编译产物(应加入 .gitignore)
为什么要分目录

核心原则是「可复用」与「可修改」分离:官方 SDK(Libraries/)保持原样便于升级;板级代码(BSP/)封装硬件差异,换板子只动这里;业务(App/)不直接碰寄存器。这样从 STM32 迁到 HK32 时,只有 Libraries/ 和 Startup/ 需要换,App/ 几乎不用动(见第 18 章)。

3.7 编译选项要点

选项建议原因
优化等级Release 用 -O2;调试用 -O0 或 -Og全 -O0 会显著增大体积、拖慢代码;-Og 兼顾可调试与体积
调试信息始终生成 -g3(GCC)/ Debug Info(Keil)没有符号表,崩溃时无法定位到源码行
MicroLIBKeil 勾选(用 printf 时)否则 printf 需要重定向且占用大(见第 10 章)
未使用外设裁剪把不用的 .c 移出工程每个外设库 .c 都进编译会无谓增大体积
浮点支持有 FPU 的型号开硬件 FPU软件浮点慢十倍以上(M3 无 FPU 时尤其明显)

3.8 工具链常见坑位

现象根因处置
Device 列表搜不到 HK32DFP 未安装 / 未刷新索引Pack Installer 装 DFP;重启 IDE 刷新
编译报 undefined symbol启动文件/库源文件未加入工程加文件;确认 Include Paths 与宏
MDK-Lite 编译超 32KB 报错免费版限制开优化、裁剪未用模块;或购授权 / 转 GCC
hex 烧进去不运行BOOT0 未拉低 / hex 格式与算法不符BOOT0 拉低复位;核对 Flash 算法与容量
OpenOCD 找不到 target cfgHK32 专用 cfg 不在社区仓库借用 stm32f1x.cfg;或按手册写自定义 target 脚本

来源:航顺官网「开发资料汇总」、OpenEdv 航顺开发入门帖、Keil/IAR/GCC 实测。

4 · 软件开发包与固件库

HK32 提供「标准外设库」风格的 SDK,API 与 STM32 标准外设库高度一致。这一章讲清 SDK 怎么拿、目录怎么看,以及寄存器 / 标准库 / HAL 三种写法的取舍。

4.1 固件库与 HAL 怎么选

写法上手难度可读性移植性适用
直接寄存器高低差极致体积 / 教学底层
标准外设库(SDK 默认)低中中(同族通用)绝大多数 HK32 项目
HAL / LL中高高(跨 ST 系列)复用 STM32 HAL 生态
推荐

新项目用航顺 SDK 里的标准外设库即可,API 与 STM32F1 标准库几乎同名,存量代码基本能直接编译。若团队已有 STM32 HAL/CubeMX 工程,HK32F103 也可借用 STM32F1 的 HAL 代码(改设备型号后微调),但需注意个别外设差异。

4.2 从官网获取 SDK

  1. 打开航顺官网 www.hsxp-hk.com → 进入「资料下载 / 开发资料」;
  2. 按芯片系列下载对应开发资料包(如 HK32F103xx 系列开发资料),通常含 SDK、例程、数据手册、用户手册、仿真器驱动;
  3. 解压后得到「标准库 / 例程 / 文档 / 工具」等目录,SDK 与例程是后续建工程的基础;
  4. 将 SDK 中 CMSIS、StdPeriph_Driver、Startup 拷贝到工程目录(或保持相对路径引用)。

4.3 SDK 目录结构

典型 HK32 标准库 SDK 的目录如下(以 HK32F103 为例):

HK32F103xx_StdPeriph_Lib/
├── Libraries/
│   ├── CMSIS/              # 内核头文件、启动文件、系统时钟
│   │   ├── Device/         # HK32F103.h、system_hk32f1xx.c、startup_hk32f103*.s
│   │   └── Include/        # core_cm3.h 等内核头
│   └── HK32F1xx_StdPeriph_Driver/   # 外设驱动库
│       ├── inc/            # hk32f1xx_gpio.h 等
│       └── src/            # hk32f1xx_gpio.c 等
├── Project/               # 官方例程(GPIO/UART/TIM/ADC…)
├── Utilities/             # 评估板组件(可选)
└── 文档/                  # 数据手册、用户手册、应用笔记

4.4 代码形态对比

同一个「开 PC13 推挽输出」操作,三种写法对照:

/* 1) 寄存器直接写 */
RCC->APB2ENR |= (1 << 4);            // 使能 GPIOC 时钟
GPIOC->CRL   = (GPIOC->CRL & 0xFF0FFFFF) | 0x00100000;  // PC13 推挽 50MHz
GPIOC->BSRR  = (1 << 13);             // 置 1(灭,低电平点亮时相反)

/* 2) 标准外设库(推荐) */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitTypeDef gi = {0};
gi.GPIO_Pin   = GPIO_Pin_13;
gi.GPIO_Mode  = GPIO_Mode_Out_PP;     // 推挽输出
gi.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &gi);
GPIO_SetBits(GPIOC, GPIO_Pin_13);

/* 3) HAL(借用 STM32F1 风格) */
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitTypeDef g = {0};
g.Pin   = GPIO_PIN_13;
g.Mode  = GPIO_MODE_OUTPUT_PP;
g.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOC, &g);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
结论

标准库写法在「可读性 / 上手成本 / 与 STM32 兼容」之间最均衡,是本文后续所有外设示例的默认写法。HAL 写法仅在你已依赖 STM32 Cube 生态时使用。

4.5 从 STM32 平移代码的对照

因为 HK32F103 与 STM32F103 地址映射一致,绝大多数代码只需改芯片型号宏与头文件名。下表给出常见符号的对应关系:

STM32F103 写法HK32F103 写法说明
#include "stm32f10x.h"#include "HK32F103.h"顶层头文件
stm32f10x_gpio.h / .chk32f1xx_gpio.h / .c外设库文件名前缀不同
stm32f10x_rcc.chk32f1xx_rcc.c驱动实现文件
RCC_APB2PeriphClockCmd同名(保持不变)标准库 API 完全一致
GPIO_InitTypeDef同名(保持不变)结构体与字段一致
startup_stm32f10x_md.sstartup_hk32f103xx.s启动文件
STM32F10X_MDHK32F103xB容量/型号宏(按 Flash 容量选 xB~xG)
最省事的平替路径

把 STM32 工程的 StdPeriph_Driver 整个目录换成 HK32 的同名库,把 stm32f10x_*.h/c 全局替换为 hk32f1xx_*.h/c,换启动文件、改型号宏,约 90% 的应用层代码(App/、BSP/)可以原封不动保留。少数差异(个别外设细节、Flash 等待周期、Option Bytes)按第 18 章核对即可。

4.6 固件库版本管理

SDK 会随官网更新,务必在自己的工程里锁版本,否则换台电脑编译行为就变了:

  • SDK 原样拷贝进工程(Libraries/),不要在多处引用同一份全局 SDK,避免改一份影响所有工程;
  • 用 Git 管理,SDK 目录打 tag 标记版本(如 hk32f1xx_stdperiph_vX.Y);
  • 在工程根放一个 SDK_版本号 .md,记录 SDK 版本、来源(官网哪个包)、拷贝日期;
  • 不要直接改 SDK 源码——需要改行为时,在 BSP/ 或 App/ 里包一层,而不是改 Libraries/,否则升级 SDK 时冲突无穷。

来源:航顺官网 HK32F103xx 开发资料包(标准外设库例程)、STM32→HK32 平移实测。