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型号,如自行修改,请再确认。
打开
startup_ht32f5xxxx_01.s启动文件 ,配置对应的HT32型号。 启动文件 中,可以看到 启动文件 支持的HT32型号;
启动文件 - IC型号配置
在 启动文件 中,使能的HT32型号,默认由 KIEL 5 工程配置
ASM -> Define:全局宏定义。如 HT32F52352 KEIL5 工程配置 全局宏定义 设置
USE_HT32_CHIP=4,即 HT32F52342/52 。
KEIL Option -> ASM -> Define
初始化堆栈
栈
stack和 堆heap,位置均在SRAM中。栈
stack:由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈。堆
heap:一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配方式类似于数据结构中的链表。更详细的区别和使用方法,可在网上搜索资料了解。
在 启动文件 中,主要配置 栈 空间大小 Stack_Size 和 堆 空间大小 Heap_Size。可通修改 Stack_Size 和 Heap_Size EQU 定义的值,来修改对应的区域大小,
启动文件 - 堆栈配置(EQU)
初始化堆栈 - KEIL 配置向导
KEIL 工程的 启动文件 配置,可以使用 KEIL 配置向导 进行配置,在对应的选框内修改值,即可修改 栈 Stack_Size 和 堆 Heap_Size 空间大小。
启动文件 - 堆栈配置(KEIL配置向导)
小技巧
KEIL 配置向导需要文档内代码的支持,并非所有的文档都支持 配置向导 。
初始化文件
配置IC型号
警告
使用 固件库 范例工程,工程会默认配置好 初始化文件 IC型号,如自行修改,请再确认。
打开
system_ht32f5xxxx_01.c初始化文件 中,配置对应的HT32型号。 初始化文件 中,可以看到 初始化文件 支持的HT32型号;
初始化文件 - IC型号配置
在 初始化文件 中,使能的HT32型号,默认由 KEIL 工程配置
C/C++ -> Define:全局宏定义来使用HT32型号。如 HT32F52352 KEIL5 工程配置 全局宏定义 设置
USE_HT32F52342_52和USE_MEM_HT32F52352,即 HT32F52342/52 。
KEIL Option -> C/C++ -> Define
初始化基础外设
在 初始化文件 中,主要配置的参数如下,主要为 CKCU 、 FLASH 、 **WDT** 可通过修改 #define 后的值来设定对应的功能。
初始化文件 - 基础外设配置
初始化基础外设 - KEIL 配置向导
KEIL 工程的初始化文件配置,可以使用 KEIL 配置向导 进行配置,在对应的选框内修改值,即可修改 CKCU 、 FLASH 、 **WDT** 的值;
当使用 配置向导 选择对应的选项时, 配置向导 会提示相关的配置信息,供用户参考。
初始化文件 - 基础外设配置 (KEIL配置向导)
小技巧
KEIL 配置向导需要 x.c 文档内容代码的支持,并非所有的文档都支持 配置向导 。
CKCU 初始化
CKCU 时钟源 初始化,需参考对应型号的 HT32Fxxxxx_UserManualvxxx.pdf 的 CKCU 章节。
初始化文件 - 时钟源 配置
HT32F52352 可选择的系统时钟源 CK_SYS 可来自于5个时钟源:
内部高速 RC 振荡器 HSI
外部高速晶体振荡器 HSE
内部低速 RC 振荡器 LSI
外部低速晶体振荡器 LSE
锁相环 PLL
使用 固件库 范例工程,默认使能 HSE ,并且通过 PLL 倍频到最高主频作为 CK_SYS。
HT32 - CKCU 部分框图
小技巧
如果板上没有 外部高速晶振 HSE ,程序在初始化文件会运行停止在等待 HSE 启动,需要手动配置为 HSI 。
LSI 默认开启,不需要独立使能。
FLASH 初始化
FLASH 初始化,需参考对应型号 HT32Fxxxxx_UserManualvxxx.pdf 的 FMC 章节。
使用 固件库 范例工程,工程会将 FLASH 等待状态周期 默认配置为 自动模式,建议使用默认配置即可。
初始化文件 - FLASH 配置
HT32F52352 当 CK_AHB 即 HCLK 超过 24MHz 时,则需要插入 FLASH 等待状态周期。
HT32 - FMC - FLASH 部分说明
WDT 初始化
WDT 初始化,需参考对应型号 HT32Fxxxxx_UserManualvxxx.pdf 的 WDT 章节。
使用 固件库 范例工程,默认不开开启 WDT,方便调试;
初始化文件 - WDT 配置
警告
理论上,WDT 在程序中应最早开启,以避免程序意外跑飞,正式开发项目, 量产前 一定要开启 。
按照 HT32 的启动流程, WDT 应在这里
system_ht32f5xxxx_01.c初始化文件 使能开始使用。部分 HT32 的 WDT 可在
HT32_op.sOption配置文件 中开启。
HT32启动流程 常见问题,请参考 FAQ 。