一.获取 ST 库源码
进入官网(https://www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html),下载相应的资源,比如DataSheet,编程手册,以及本篇构建项目需要的标准库。
- 下载DataSheet
- 下载编程手册
- 下载标准库
进行下载的官网https://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html,选择对应板子的型号。
邮箱就会收到ST发来的短信,点击进行下载
- 标准库文件介绍
对标准库文件进行解压,会得到如下几个文件,对应相关文件的解释来源于这篇博文,https://blog.csdn.net/cbkdgq/article/details/88076843。
二. 开始新建工程
点击桌面 Keil uVision5图标,启动软件。如果是第一次使用的话会打开一个自带的工程文件,我们可以通过工具栏 Project->Close Project 选项把它关掉。关于Keil uVision5的安装,你可以参照这篇博文,https://blog.csdn.net/dengjin20104042056/article/details/108057907。
- 在工具栏 Project->New μVision Project… 新建我们的工程文件
- 选择保存项目的路径和项目名
- 选择芯片型号
- 创建完毕
- 如果创建的时候出现如下对话框,点击否即可,如果点击是的话就不需要自己手动添加相应的启动文件,后面我们会进行手动添加。
- 在 Demo1 文件夹下(项目工程文件夹下),我们新建四个文件夹,分别为USET、 FWlib、CMSIS、Uotput
USER 用来存放工程文件和用户代码,包括主函数main.c 。 FWlib 用来存放 STM32 库里面的 inc 和 src 这两个文件,这两个文件包含了芯片上的所有驱动。 CMSIS 用来存放库为我们自带的启动文件和一些 M3系列通用的文件。 CMSIS 里面存放的文件适合任何 M3 内核的单片机。 CMSIS 的缩写为: Cortex Microcontroller Software Interface Standard ,是 ARM Cortex 微控制器软件接口标准,是 ARM 公司为芯片厂商提供的一套通用的且独立于芯片厂商的处理器软件接口。 Uotput 用来保存软件编译后输出的文件, Listing 用来存放一些编译过程中产生的文件,具体可不用了解。
- 将下载的标准库文件STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\STM32F10x_StdPeriph_Driver下的inc 跟 src 这两个文件夹拷贝到 STM32-Template\FWlib 文件夹中
拷贝后的projects\Demo1\FWlib的内容如下:
- 将STM32F10x_StdPeriph_Lib_V3.6.0\Project\STM32F10x_StdPeriph_Template 下的 main.c、stm32f10x_conf.h、stm32f10x_it.h、 stm32f10x_it.c 、system_stm32f10x.c 拷贝到 Demo1\USER目录下。
stm32f10x_it.h 、和stm32f10x_it.c 这两个文件里面是中断函数,里面为空,并没有写任何的中断服务程序。 stm32f10x_conf.h 是用户需要配置的头文件,当我们需要用到芯片中的某部分外设的驱动时,我们只需要在该文件下将该驱动的头文件包含进来即可,片上外设的驱动在 src 文件夹中, inc 文件夹里面是它们的头文件。这三个文件是用户在编程时需要修改的文件,其他库文件一般不需要修改。system_stm32f10x.c 是 ARM 公司提供的符合 CMSIS 标准的库文件。
- 并将Demo1目录下的helloWolrd.uvoptx,helloWolrd.uvprojx移到USER目录下
- 点击helloWolrd.uvprojx重新启动项目,并将 Demo1目录下的DebugConfig文件删除
- 将下载资源\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm目录下的所有文件拷贝到Demo1\CMSIS\startup(需先在 CMSIS 新建好 startup 文件夹)文件夹下。
- 将 下载资源\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\CoreSupport目录下的core_cm3.c和core_cm3.h拷贝到Demo1\CMSIS目录下
- 将 下载资源\STM32F10x_StdPeriph_Lib_V3.6.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x目录下的 stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h拷贝到 Demo1\CMSIS目录下
- 此时我们新建的工程目录如下所示
- 回到我们刚刚新建的 MDK 工程中,将 Target 改为 STM32-DEMO (不改也行),鼠标移动到文件夹上按F2进行修改。
- 在 STM32-DEMO 上右键选中 Add Group… 选项,新建四个组,分别命名为STARTCODE、USER、FWlib、CMSIS,并将Source Group 1删除。
STARTCODE 从名字就可以看得出我们是用它来放我们的启动代码的, USER 用来存放用户自定义的应用程序, FWlib 用来存放库文件, CMSIS 用来存放 M3 系列单片机通用的文件。
- 接下来我们往我们这些新建的组中添加文件,双击哪个组就可以往哪个组里面添加文件。我们在 STARTCOKE 里面添加 startup_stm32f10x_ld.s ,在USER 组里面添加 main.c 和 stm32f10x_it.c 这两个文件,在 FWlib 组里面添加 src 里面的全部驱动文件,当然, src 里面的驱动文件也可以需要哪个就添加哪个。这里将它们全部添加进去是为了后续开发的方便,况且我们可以通过配置stm32f10x_conf.h 这个头文件来选择性添加,只有在stm32f10x_conf.h 文件中配置的文件才会被编译。在 CMSIS 里面添加core_cm3.c 和 system_stm32f10x.c 文件。注意,这些组里面添加的都是汇编文件跟 C 文件,头文件是不需要添加的。
- 备注:startup_stm32f10x_ld.s是根据自己的芯片来进行选择的,比如我使用的是STM32F103C8t6所以选择小容量的。
你可以通过这篇博文( https://blog.csdn.net/u013165704/article/details/78328736 )进行了解,下面我接了相关芯片的选择,你可以做参考。
三. MDK 的配置
至此,我们的工程已经基本建好,下面来配置一下 MDK 的配置选项,点击
工具栏中的魔术棒按钮 ,在弹出来的窗口中选中
。
- 点击 Select Folder for Objects… 设置编译后输出文件保存的位置。同时把 Create HEX File 和 Browse information 这两个选项框也选上。
- 同样在 Listing 这个选项卡中,我们也点击 Select Folder listings…定位到模板中的 Listing 文件夹(前面我创建的是Listings文件,选择Listings文件即可)。
- 选中
选项卡,在 Define 里面输入添加 USE_STDPERIPH_DRIVER,STM32F10X_LD 。
在<<零死角玩转stm32>> 这本书中使用的高容量芯片所以选择的是HD,这里我使用的是小容量的芯片所以这里我选择的是LD,如果你不知道你的芯片是高容量还是小容量的就选择HD即可,具体原因看下面的截图。
在 Include Paths 栏点击 ,在这里添加库文件的搜索路径,这样就可以屏蔽掉默认的搜索路径。
- 修改 main.c 文件
由于拷贝过来的main函数太过复杂,这里我们全部删除,只留下如下内容,这样一个干净的工程模板就建成了。
- 添加工具栏的
进行编译,出现如下问题,这是因为导入的startup_stm32f10x_ld格式为 Image file格式,,需要修改为Assembly language file,并且其他C文件也为Image file格式,需要修改为C源文件。
修改完毕后如下:
重新编写后:
四.硬件调试配置
这个工程默认的是软件仿真,如果开发板要用 J-LINK 调试的话,还需要在开发环境中做如下修改。实际上,我们开发程序的时候 80%都是在硬件上调试的。
- 具体配置如下图所示:点击
,在 Debug 选项里
- 在选项卡 Debug\Setting\Flash download 中,由于我使用的是STM32F103C8T6所以设置如下:
五.源码下载
微信公众号,回复
工程模板
既可以获取本篇博文的源代码,如果有什么问题,后台留言我看见会第一时间回复你的喔。