/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}
1. 环境准备与工具安装
在开始搭建HC32F4A0PITB工程模板之前,我们需要准备好必要的开发环境和工具链。这里我使用的是Keil MDK 5.37版本,实测下来与HC32F4A0系列兼容性最好。
必备软件清单:
- Keil MDK 5.37(或更高版本)
- HC32F4A0系列器件支持包(HDSC.HC32F4A0_DFP.1.2.0.pack)
- HC32F4A0 DDL固件库(HC32F4A0_DDL_Rev2.2.0)
首先安装Keil MDK,这个过程比较简单,一路Next即可。重点是要记住你的安装路径,因为后面需要确认器件包是否正确安装。
器件包的安装有两种方式:
我推荐使用离线安装,因为官网下载速度有时不太稳定。安装完成后,检查Keil安装目录下的Packs文件夹,应该能看到HDSC文件夹,里面有HC32F4A0相关的头文件和启动文件。
提示:如果遇到器件包安装失败,可能是权限问题。建议以管理员身份运行Keil再进行安装。
固件库从华大半导体官网下载,找到HC32F4A0产品页面,下载DDL库(Device Driver Library)。这个库包含了所有外设的驱动函数和示例代码,是我们工程模板的基础。
2. 工程目录结构设计
一个好的工程目录结构能让项目维护变得轻松很多。经过多个项目的实践,我总结出了这个六文件夹结构,特别适合中型嵌入式项目。
核心目录结构:
HC32F4A0PITB_ProjectTemplate/
├── app/ # 应用层代码
├── bsp/ # 板级支持包
├── board/ # 板级初始化代码
├── libraries/ # 第三方库文件
├── module/ # 功能模块
└── project/ # 工程文件
每个目录的详细用途:
- app目录:存放main.c和应用程序代码。这里应该是与你具体项目最相关的业务逻辑代码
- board目录:放置板级初始化文件,如时钟配置、引脚配置、延时函数等。这个目录下的代码与具体硬件板卡相关
- libraries目录:存储芯片厂商提供的固件库,如HC32F4A0的DDL库。这部分代码通常不需要修改
- bsp目录:底层驱动支持包,包含一些通用外设的驱动实现
- module目录:功能模块代码,如软件定时器、状态机、算法模块等可重用组件
- project目录:Keil工程文件、编译输出文件等
这种结构的好处是层次清晰,当你要移植到其他硬件平台时,只需要替换board和bsp目录即可,应用层代码基本不需要改动。