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