HT32 启动流程

启动流程

H/W Reset -> Run -> startup_ht32f5xxxx_xx.s -> system_ht32f5xxxx_xx.c -> main.c

H/W Reset

上电复位 ,复位时序如图

上电复位 时序

上电复位 时序

startup_ht32f5xxxx_xx.s

启动文件 ,主要是对 Stack/Heap…初始化。

system_ht32f5xxxx_xx.c

初始化文件 ,主要对 CKCU/FMC/WDT… 初始化。

main.c

主要为用户编写的应用代码入口;

小技巧

不同的HT32型号对应不同的 启动文件初始化文件 ,如 HT32F52352 对应 startup_ht32f5xxxx_01.s 启动文件system_ht32f5xxxx_01.c 初始化文件

以下使用 固件库HT32F52352 KEIL5 范例工程对 HT32的 启动文件初始化文件 进行说明。

启动文件

配置IC型号

警告

使用 固件库 范例工程,工程会默认配置好 启动文件 IC型号,如自行修改,请再确认。

  1. 打开 startup_ht32f5xxxx_01.s 启动文件 ,配置对应的HT32型号。 启动文件 中,可以看到 启动文件 支持的HT32型号;

启动文件 - IC型号配置

启动文件 - IC型号配置

  1. 启动文件 中,使能的HT32型号,默认由 KIEL 5 工程配置 ASM -> Define: 全局宏定义。

    HT32F52352 KEIL5 工程配置 全局宏定义 设置 USE_HT32_CHIP=4,即 HT32F52342/52

KEIL Option -> ASM -> Define

KEIL Option -> ASM -> Define

初始化堆栈

  • stack heap,位置均在 SRAM 中。

  • stack :由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈。

  • heap :一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配方式类似于数据结构中的链表。

  • 更详细的区别和使用方法,可在网上搜索资料了解。

启动文件 中,主要配置 空间大小 Stack_Size 空间大小 Heap_Size。可通修改 Stack_SizeHeap_Size EQU 定义的值,来修改对应的区域大小,

启动文件 - 堆栈配置(EQU)

启动文件 - 堆栈配置(EQU)

初始化堆栈 - KEIL 配置向导

KEIL 工程的 启动文件 配置,可以使用 KEIL 配置向导 进行配置,在对应的选框内修改值,即可修改 Stack_Size Heap_Size 空间大小。

启动文件 - 堆栈配置(KEIL配置向导)

启动文件 - 堆栈配置(KEIL配置向导)

小技巧

KEIL 配置向导需要文档内代码的支持,并非所有的文档都支持 配置向导

初始化文件

配置IC型号

警告

使用 固件库 范例工程,工程会默认配置好 初始化文件 IC型号,如自行修改,请再确认。

  1. 打开 system_ht32f5xxxx_01.c 初始化文件 中,配置对应的HT32型号。 初始化文件 中,可以看到 初始化文件 支持的HT32型号;

初始化文件 - IC型号配置

初始化文件 - IC型号配置

  1. 初始化文件 中,使能的HT32型号,默认由 KEIL 工程配置 C/C++ -> Define: 全局宏定义来使用HT32型号。

    HT32F52352 KEIL5 工程配置 全局宏定义 设置 USE_HT32F52342_52USE_MEM_HT32F52352 ,即 HT32F52342/52

KEIL Option -> C/C++ -> Define

KEIL Option -> C/C++ -> Define

初始化基础外设

初始化文件 中,主要配置的参数如下,主要为 CKCUFLASH**WDT** 可通过修改 #define 后的值来设定对应的功能。

初始化文件 - 基础外设配置 (#define)

初始化文件 - 基础外设配置

初始化基础外设 - KEIL 配置向导

KEIL 工程的初始化文件配置,可以使用 KEIL 配置向导 进行配置,在对应的选框内修改值,即可修改 CKCUFLASH**WDT** 的值;

当使用 配置向导 选择对应的选项时, 配置向导 会提示相关的配置信息,供用户参考。

初始化文件 - 基础外设配置 (KEIL配置向导)

初始化文件 - 基础外设配置 (KEIL配置向导)

小技巧

KEIL 配置向导需要 x.c 文档内容代码的支持,并非所有的文档都支持 配置向导

CKCU 初始化

CKCU 时钟源 初始化,需参考对应型号的 HT32Fxxxxx_UserManualvxxx.pdfCKCU 章节。

初始化文件 - 时钟源 配置

初始化文件 - 时钟源 配置

HT32F52352 可选择的系统时钟源 CK_SYS 可来自于5个时钟源:

  • 内部高速 RC 振荡器 HSI

  • 外部高速晶体振荡器 HSE

  • 内部低速 RC 振荡器 LSI

  • 外部低速晶体振荡器 LSE

  • 锁相环 PLL

使用 固件库 范例工程,默认使能 HSE ,并且通过 PLL 倍频到最高主频作为 CK_SYS

HT32 - CKCU 部分框图

HT32 - CKCU 部分框图

小技巧

  • 如果板上没有 外部高速晶振 HSE ,程序在初始化文件会运行停止在等待 HSE 启动,需要手动配置为 HSI

  • LSI 默认开启,不需要独立使能。

FLASH 初始化

FLASH 初始化,需参考对应型号 HT32Fxxxxx_UserManualvxxx.pdfFMC 章节。

使用 固件库 范例工程,工程会将 FLASH 等待状态周期 默认配置为 自动模式,建议使用默认配置即可。

初始化文件 - **FLASH** 配置

初始化文件 - FLASH 配置

HT32F52352CK_AHBHCLK 超过 24MHz 时,则需要插入 FLASH 等待状态周期。

HT32 - FMC - FLASH 部分说明

HT32 - FMC - FLASH 部分说明

WDT 初始化

WDT 初始化,需参考对应型号 HT32Fxxxxx_UserManualvxxx.pdfWDT 章节。

使用 固件库 范例工程,默认不开开启 WDT,方便调试;

初始化文件 - **WDT** 配置

初始化文件 - WDT 配置

警告

  • 理论上,WDT 在程序中应最早开启,以避免程序意外跑飞,正式开发项目, 量产前 一定要开启

    • 按照 HT32 的启动流程, WDT 应在这里 system_ht32f5xxxx_01.c 初始化文件 使能开始使用。

    • 部分 HT32WDT 可在 HT32_op.s Option配置文件 中开启。

HT32启动流程 常见问题,请参考 FAQ