简介
写这篇教程主要是和大家分享使用STM32的基本方法,也是给自己学习过程的总结、记录和备忘,避免重复学习之前明白但又忘记的知识和操作。我现在也是刚开始接触学习STM32,我是在STM32的固件库V3基础上进行学习。在这里我和大家分享一下使用V3.x库的方法,希望大家喜欢,如有错误请指出。
这篇教程分以下几个方面,一:建立工程,设置工程属性。二:建立条理清晰的GROUP;三:使用JLINK仿真调试。下面就分别逐个说明。
一、新建MDK工程
1、首先,打开MDK软件,再点击Project->New uVision Project…,如下图所示:
![](../img/eep/emb/emb-60686quuz53qk5ay.jpg)
弹出如下对话框:
![](../img/eep/emb/emb-60687r5e001aaztz.jpg)
新建一个文件夹MDK工程,然后把工程名字设为test,点击保存。弹出选择器件的对话框,
我们使用的是stm32单片机,所以选择STMicroelectronics下面的器件,如STM32F107VCT6,如图所示:
![](../img/eep/emb/emb-60688rsdngexhpyi.jpg)
点击OK,MDK会弹出一个对话框,如图所示:问是否加载启动代码到当前工程下面,
![](../img/eep/emb/emb-60689kldrxxcmt4x.jpg)
如果选择是,则这个启动代码是旧版本库的启动代码,新版本的启动代码和这个不同,需要自己添加。在这里我们使用的是新版本的库,所以点击否,自己添加启动代码。
启动代码是一段和硬件相关的汇编代码,是必不可少的!这个代码具体如何工作,感兴趣可以研究一下,现在可以不必关心它。
2、接下来我们需要对工程进行一些设置。
在工程区,右键点击Target1,选择Options for Target‘Target1’ 如图所示:
![](../img/eep/emb/emb-60690epo2zex5r0t.jpg)
弹出如下窗口,选择Output标签,设置目标文件的生成路径及其他相关参数。
![](../img/eep/emb/emb-60691qev2kr5ksxl.jpg)
如图点击Select Folder for Objects 在弹出的窗口中点空白处新建“Obj”文件夹,然后双击“Obj” 文件夹,如图中所示的Path后,点击OK.
点击Listing标签,新建“list”文件夹,设置链接文件的生成路径,及相关参数。如图所示:
![](../img/eep/emb/emb-60692pka05mfc4ij.jpg)
点击Debug标签,选择使用的仿真器,我们使用JLINK V8进行仿真调试,对应的,在此选择Cortex-M/R J-LINK/J-Trace。Cortex-M/R J-LINK/J-Trace前的Use要选中,否则J-LINK调试会出问题。如图所示:
![](../img/eep/emb/emb-606933q50fqisbhn.jpg)
点击右侧的Setting,配置JLINK下载参数,主要是选择目标处理器系列,添加目标芯片对应的烧写算法。
![](../img/eep/emb/emb-60694uihrkvlmdgt.jpg)
图中要勾选Reset and Run 选项,如果Flash Download 算法不对,请点击Add 重新添加Flash算法。
点击Utilities,进行公共参数设置
![](../img/eep/emb/emb-60695jhneu45objn.jpg)
至此,我们已经完成了一个RVMDK工程参数设置。
二、介绍MDK工程的文件管理方面的功能。
我们在使用ST标准的固件库进行代码设计时,一个工程内可能会包含很多的库文件,因此对文件进行管理就非常的必要。
如下图所示,右键点击Target1,选择Manage Components,进入分类文件管理设置。
![](../img/eep/emb/emb-60696qw1uerftu0t.jpg)
在弹出的选择框中,可以设置工程名,增加、删减文件夹。以及在某个文件夹内添加删除文件。
![](../img/eep/emb/emb-60697itstpaeedc5.jpg)
在完成以上操作后,一个MDK工程就设置完成了,只需要依据实际应用要求编写相关代码即可。
我个人觉得标准的库文件“埋”的太深,使用起来有点不方便,所以我一般对这些文件进行一些整理,把相关文件放在一起,并取上一个标准化的名字,这些文件夹的名字一般和原始固件库文件夹的名字相同,只是把需要的文件放在一起。一般在工程目录下面我会建立以下几个文件夹,如图所示。当然还会建立前面已经建立的两个很有用的文件夹(List和Obj)
自己建立的文件夹和库文件的对应关系:
StdPeriph_Driver文件夹内的内容与标准库保持一致。
STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driver
StartUp文件夹内的文件在库中的位置:
STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10xStartUp
CMSIS文件夹内的文件在库中的位置:
STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10x
stm32f10x.h,system_stm32f10x.c, system_stm32f10x.h
STM32F10x_StdPeriph_Lib_V3.5.0ibrariesCMSISCM3CoreSupport
core_cm3.c, core_cm3.h
![](../img/eep/emb/emb-60698erribrnehj0.jpg)
Groups文件夹的名称和工程文件夹的名称尽量保持一致,如上图所示。为每个Group添加同名文件夹下的源文件或者头文件,为了便于查看代码,我把源文件和头文件都添加进Group中(除StdPeriph_Driver),在这里注意过滤文件的类型。StdPeriph_Driver中只添加需要的源文件,例如建立一个LED闪烁的工程,那么这个工程除了进行必要的初始化之外,只需要包含GPIO的操作函数,当然需要使用GPIO就必须要使能GPIO的时钟,RCC是绝对少不了的。所以只需要包含misc.c,stm32f10x_gpio.c和stm32f10x_rcc.c。添加需要的文件之后,工程目录如图所示。
![](../img/eep/emb/emb-60699lyxwqtnuvzc.jpg)
现在重新