11. 新建工程—库函数版

了解STM32的标准库文件之后,我们就可以使用它来建立工程了,因为用库新建工程的步骤较多,我们一般是使用库建立一个空的工程,作为工程模板。以后直接复制一份工程模板,在它之上进行开发。

本章的“工程模板”范例可在配套资料中找到,自己新建工程模版时可参考该工程。

11.1. 新建工程

本章内容所涉及的软件只供教学使用,不得用于商业用途。个人或公司因商业用途导致的法律责任,后果自负。

版本说明:MDK5.15 (MDK即KEIL软件)

版本号可从MDK软件的“Help–>About uVision”选项中查询到。

11.1.1. 新建本地工程文件夹

为了工程目录更加清晰,我们在本地电脑上新建一个“工程模板”文件夹,在它之下再新建6个文件夹,具体如下:

工程目录文件夹清单 工程文件夹目录

在本地新建好文件夹后,把准备好的库文件添加到相应的文件夹下:

工程目录文件夹内容清单

11.1.2. 新建工程

打开KEIL5,新建一个工程,工程名根据喜好命名,我这里取Template(中文是模版的意思),保存在ProjectRVMDK(uv5)文件夹下。

在KEIL5中新建工程

11.1.2.1. 选择CPU型号

这个根据你开发板使用的CPU具体的型号来选择, M3旗舰版选STM32F103ZE型号。如果这里没有出现你想要的CPU型号,或者一个型号都没有,那么肯定是你的KEIL5没有添加device库, KEIL5不像KEIL4那样自带了很多MCU的型号,KEIL5需要自己添加,关于如何添加请参考《如何安装KEIL5》这一章。

选择具体的CPU型号

11.1.2.2. 在线添加库文件

等下我们手动添加库文件,这里我们点击关掉。

库文件管理

11.1.2.3. 添加组文件夹

在新建的工程中添加5个组文件夹,用来存放各种不同的文件,文件从本地建好的工程文件夹下获取,双击组文件夹就会出现添加文件的路径,然后选择文件即可。

工程内组文件夹内容清单 如何在工程中添加文件夹

11.1.2.4. 添加文件

先把上面提到的文件从ST标准库中复制到工程模版对应文件夹的目录下,然后在新建的工程中添加这些文件,双击组文件夹就会出现添加文件的路径,然后选择文件即可。

如何在工程中添加文件

11.1.2.5. 配置魔术棒选项卡

这一步的配置工作很重要,很多人串口用不了printf函数,编译有问题,下载有问题,都是这个步骤的配置出了错。

  1. Target中选中微库“ Use MicroLib”,为的是在日后编写串口驱动的时候可以使用printf函数。

添加微库
  1. 在Output选项卡中把输出文件夹定位到我们工程目录下的“output”文件夹, 如果想在编译的过程中生成hex文件,那么那Create HEX File选项勾上。

配置 Output 选项卡
  1. 在Listing选项卡中把输出文件夹定位到我们工程目录下的“Listing”文件夹。

配置 Listing 选项卡
  1. 在C/C++选项卡中添加处理宏及编译器编译的时候查找的头文件路径。如果头文件路径添加有误,则编译的时候会报错找不到头文件。

配置 C/C++ 选项卡

在这个选项中添加宏,就相当于我们在文件中使用“#define”语句定义宏一样。在编译器中添加宏的好处就是,只要用了这个模版,就不用源文件中修改代码。

  • STM32F10X_HD宏:为了告诉STM32标准库,我们使用的芯片类型是STM32型号是大容量的,使STM32标准库根据我们选定的芯片型号来配置。

  • USE_STDPERIPH_DRIVER宏:为了让stm32f10x.h包含stm32f10x_conf.h这个头文件。

“Include Paths ”这里添加的是头文件的路径,如果编译的时候提示说找不到头文件, 一般就是这里配置出了问题。你把头文件放到了哪个文件夹,就把该文件夹添加到这里即可。(请使用图中的方法用文件浏览器去添加路径,不要直接手打路径,容易出错)

11.1.2.6. 仿真器配置

本书使用的仿真器是Fire-Debugger,可下载和仿真程序。Fire-Debugger支持XP/WIN7/WIN8/WIN10这几个操作系统, 无需安装驱动,免驱,使用非常方便,具体配置见如下图。

Debug中选择 CMSIS-DAP Debugger

Debug中选择 CMSIS-DAP Debugger

Utilities选择 Use Debug Driver

Utilities选择 Use Debug Driver

Settings选项配置

Settings选项配置

11.1.2.7. 选择CPU型号

这一步的配置也不是配置一次之后完事,常常会因为各种原因需要重新选择,当你下载的时候,提示说找不到Device的时候, 请确保该配置是否正确。有时候下载程序之后,不会自动运行,要手动复位的时候,也回来看看这里的“Reset and Run”配置是否失效。 M4至尊版用的STM32的FLASH大小是1M,所以这里选择1M的容量,如果使用的是其他型号的,要根据实际情况选择。

选择芯片型号

一个新的工程模版新建完毕。

11.2. 补充说明

1.如图在F1标准库工程组织中的CMSIS部分的core_cm3.c实际是不需要的,是否留在工程里面没有任何影响,所有例程中都没有使用到它,此文件为官方库保留,已被其他代替。

supplementary

2.当要使用Keil的AC6编译器时,必须去掉core_cm3.c文件,因为有不兼容的编译器拓展语法,没有去掉时错误如下

supplementary

将core_cm3.c从工程组织去掉即可,其他所有F1标准库例程都可以去掉。

supplementary

切换AC5和AC6的位置如下,最新版本Keil默认会切换到AC6,初学者先简单理解为AC6比AC5编译速度更快,但可能输出比较多因为代码不规范的警告,如果不习惯先按教程例程默认用AC5即可。

supplementary

更多关于编译器方面的说明参考此链接:https://doc.embedfire.com/stm32_products/must_read/zh/latest/faq/questions.html#keilarm-compiler-v5-v6