一、准备工作

由于本人采用的是正点原子探索版开发板,所以文案都以此开发板为基础书写,读者需自行斟酌。本文内容需提前安装 MDK5 ,并下载STM32官方固件库(F4系列 STM32F4xx_DSP_StdPeriph_Lib_V1.8.0)。

二、文件分类

一个好的程序员一定有着良好的编程习惯,要养成良好的编程习惯,首先就要学会将一个工程项目文件进行合理分类,一个清晰明了的项目分类才能给人耳目一新。

在这里我将献上自己的文件分类方式,以供大家参考学习。
STM32工程模板制作

初始模板文件分为 5 个文件夹:

  1. Core文件夹下存放了与STM32内核相关的驱动文件和启动文件,以及一些官方代码中的系统文件。
  2. Driver文件夹存放的是用户自己编写的用于驱动外设的相关 .c 文件和 .h 文件。
  3. MDK文件夹是工程项目文件夹,存放了跟工程项目相关的生成文件,非工程源码。
  4. StdLib文件夹下存放的是官方固件库源码,src 存放的是固件库的 .c 文件, inc 存放的是对应的 .h 文件。
  5. User文件夹属于用户文件夹,主要存放的是用户自我编写,非官方文件也非外设驱动程序且常用文件,如main.c、以及后续讲到的有关串口和延时的文件。

三、工程模板制作

1、文件准备工作

  • 将官方固件库下 \Libraries\STM32F4xx_StdPeriph_Driver 文件夹中的 src 文件夹和 inc 文件夹复制到工程文件夹 StdLib 下;

  • \Libraries\CMSIS\Device\ST\STM32F4xx\Include 目录下的 stm32f4xx.hsystem_stm32f4xx.h 文件拷贝到 Core 文件夹下;

  • \Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates目录下的system_stm32f4xx.c文件拷贝到Core文件夹下;

  • \Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\armstartup_stm32f40_41xxx.s 启动文件拷贝到 Core 文件夹下;

  • \Libraries\CMSIS\Includecore_cm4.hcore_cmFunc.hcore_cmInstr.hcore_cmSimd.h 4个文件拷贝到 Core 文件夹下。

  • \Project\STM32F4xx_StdPeriph_Templates 文件夹下 stm32f4xx_conf.hstm32f4xx_it.cstm32f4xx_it.hmain.c 4个文件拷贝到 User 文件夹下。

  • Driver 文件夹下新建 src文件夹和 inc 文件夹。

此时 Core 目录下文件情况如下:
STM32工程模板制作
此时 User 目录下文件情况如下:
STM32工程模板制作

2、新建工程

打开 MDK5 软件,选择 新建工程 ,创建工程位置选择 MDKDevice界面选择相应型号芯片,MDK5会弹出 Manage Run-Time Environment 对话框,直接点 取消 即可。
STM32工程模板制作
STM32工程模板制作
STM32工程模板制作

3、添加工程文件

接下来便是添加工程文件了,右键点击 Target1,选择 Manage Project Items,或点击快捷工具栏 Manage Project Items 按钮,进入 Manage Project Items 页面。更改名称,按照文件目录规格添加分组和相应文件。要特别注意不要遗漏 startup_stm32f40_41xxx.s 启动文件。
STM32工程模板制作
STM32工程模板制作STM32工程模板制作

4、添加头文件 .h文件

右键点击 Template,选择 Options for Target ‘Template’,或点击快捷工具栏 Options for Target ‘Template’ 按钮(魔术棒),进入 Options for Target ‘Template’ 页面。选择 C/C++ 选项,点击 Include Paths 右侧 按钮添加相应头文件 .h 路径。
STM32工程模板制作
STM32工程模板制作
STM32工程模板制作

5、编译改错

main.c 文件内容完全删除,只留下 main 函数本身。点击编译按钮进行工程编译(可能需要一定时间)。
STM32工程模板制作
编译之后出现几个错误,定位到第一个错误,双击即可定位到错误在文件中位置。根据错误信息可知没有选择芯片类型。通过观察错误代码以上部分内容也可知其含义。为了不修改官方代码,我们在 Options for Target ‘Template’ 页面 C/C++ 选项中 Define 栏填入 STM32F40_41xxx,再编译。
STM32工程模板制作
再定位到第一个错误,由于我没有使用 main.h 文件,所以直接删除该代码,同理也删除在 stm32f4xx_it.c 中使用的函数 TimingDelay_Decrement() 代码。再编译。
STM32工程模板制作
发现大量警告,且都是说 "assert_param"未声明,官方固件库代码 “assert_param” 是在 stm32f4xx_conf.h 中声明的,我们会发现,工程中并没有添加 stm32f4xx_conf.h 文件,定位到 stm32f4xx.h 文件12027行,我们发现需要额外定义 USE_STDPERIPH_DRIVER ,与前面相同,我们将其定义到 Options for Target ‘Template’ 中,注意两者之间要添加英文 ‘,’ 隔离。再编译。没错误没警告。
STM32工程模板制作
STM32工程模板制作

6、修改参数

修改 system_stm32f4xx.c 文件的只读权限,定位到371行,将 PLL_M 参数设置为 8,同时修改 stm32f4xx.h 文件的只读权限,定位到144行,将 HSE_VALUE 参数设置为 8000000 ,因为我采用了 外部时钟8MHz系统时钟168MHz。然后将文件修改为只读权限,以防止后期不注意修改了官方文件。
STM32工程模板制作
STM32工程模板制作

7、程序测试

至此,工程模板算是基本建立完成,可以编写一个基本代码测试一番。

相关文章: