STM32F103学习-新建工程模板(基于固件库)
新建工程模板(基于固件库)
参考:https://www.bilibili.com/video/av8938442?p=12
所需文件:https://www.lanzous.com/i7bcdyh
1.在建立工程之前,建立一个文件夹为Template。
2)点击MDK的菜单:Project->New Uvision Project,然后将目录定位到刚才建立的文件夹Template之下,在这个目录下面建立子文件夹USER,然后定位到USER目录下面,我们的工程文件就都保存到USER文件夹下面。工程命名为Template,点击保存。然后在弹出界面选择自己的芯片,然后确定。再次关闭弹出的界面。
(我们的代码工程文件都是放在USER日录,很多人喜欢新建“Project”目录放在下面,这也是可以的,这个就看个人喜好了),
3)现在我们看看USER日录下面包含2个文件夹和2个文件,
Template.uvprojx是工程文件,非常关键,不能轻易删除。
Listings和Objects文件夹是MDK自动生成的文件夹,用于存放编译过程产生的中间文件。
4)在Tamplate文件夹下建立 CORE,OBJ,STM32F10x_FWLIB这4个文件夹
5)将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。
①
STM32F10x_StdPeriph_Lib_Mh5.0\Libraries\STM32F10xStdPeriph_Driver 下面,将日录下面的 snc,inc文件夹copy到我们刚才建立的STM32F10xFWLib文件夹下面。
sre存放的是固件库的.c文件,inc存放的是对应的h文件,您不妨打开这两个文件目录过目一下里面的文件,每个外设对应一个c文件和一个.h头文件。
②
要将固件库包里面相关的启动文件复制到我们的工程目录CORE之下。
打开官方固件库包,定位到目录
STM32F10x_StdPeriph Lib V3.5.0/Libraries/CMSISCM3/CoreSupport 下面,将文件 core_cm3.c和文件corecm3.h复制到CORE下面去。然后定位到目录
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm,将文件startup_stm32f10x_hd.s(F103RC选择这个驱动文件,其他板子另说)
③
STM32F10x StdPeriph Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32Fl0x下面将里面的三个文件stm32fl0x.h,systemy_stm32fl0x.c,system_stm32fl0xh,复制到我们的USER目录之下。然后将
STM32F10x StdPeriph Lib V3.5.0ProjecNSTM32F10x StdPeriph Template下面的4个文件main.c,stm32fl0x_conth,stm32fl0x_it.c,stm32fl0x_ith复制到USER目录下面。
④
然后将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下面的4个文件main.c,stm32fl0x_conf.h,stm32fl0x_it.c,stm32fl0x_it.h复制到USER目录下面。
6)
经过前面步骤,我们将需要的固件库相关文件复制到了我们的工程目录下面,下面我们将这些文件加入我们的工程中去。
右键点击Targetl,选择Manage Components
Project Targets一栏,我们将Target名字修改为Template,然后在Groups一栏删掉一个Source Groupl,建立三个Groups:USER,CORE,FWLIB.然后点击OK,可以看到我们的Target名字以及Groups情况。
8)下面我们往Group里面添加我们需要的文件。我们按照步骤7的方法,右键点击点击Tempate,选择选择Manage Components.然后选择需要添加文件的Group,这里第一步我们选择FWLIB,然后点击右边的Add Files.定位到我们刚才建立的目录STM32F10x_FWLib/src下面,将里面所有的文件选中(Ctrl+A),然后点击Add,然后Close.
可以看到Files列表下面包含我们添加的文件,这里需要说明一下,对于我们写代码,如果我们只用到了其中的某个外设,我们就可以不用添加没有用到的外设的库文件。例如我只用GPIO,我可以只用添加stm32f10x_gpio.c而其他的可以不用添加。这里我们全部添加进来是为了后面方便,不用每次添加,当然这样的坏处是工程太大,编译起来速度慢,用户可以自行选择。
9)用同样的方法,将Groups 定位到CORE和USER下面,添加需要的文件。这里我们的CORE下面需要添加的文件为core cm3.c,startup_stm32l0x_hd.s(注意,默认添加的时候文件类型为.c,也就是添加 startup_stm32fl0xhd.s启动文件的时候,你需要选择文件类型为All files才能看得到这个文件)
USER日录下面需要添加的文件为main.c,stm32fl0x it.c,system_stm32f10x.c.
这样我们需要添加的文件已经添加到我们的工程中了,最后点击OK,回到工程主界面。
10)接下来我们要编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。
方法是点击魔术棒,然后选择“Output”选项下面的“Select folder for objects…”,然后选择目录为我们上面新建的OBJ日录。这里大家注意,如果我们不设置Output路径,那么默认的编译中间文件存放目录就是MDK自动生成的Objects目录和Listings目录。
11)此时点击“编译”会报错,因为头文件路径找不到,这里我们需要告诉MDK,在哪些路径之下搜索需要的头文件,也就是头文件目录。
回到工程主菜单,点击魔术棒,出来一个菜单,然后点击cc++选项然后点击Include Paths右边的按钮。弹出一个添加path的对话框,然后我们将图上面的3个日录添加进去。
记住,keil只会在一级日录查找,所以如果你的日录下面还有子日录,记得path一定要定位到最后一级子目录。然后点击OK.
12)接下来,我们再来编译工程,可以看到又报了很多同样的错误。为什么呢?这是因为3.5版本的库函数在配置和选择外设的时候通过宏定义来选择的,所以我们需要配置一个全局的宏定义变量。按照步骤11,定位到c/c++界面,然后填写
“STM32F10X HD,USE_STDPERIPH DRIVER"到Define 输入框里面。
这里解释一下,如果你用的是中容量那么STM32F10X_HD修改为STM32F10X_MD,小容量修改为STM32F10X_LD.然后点击OK。
13)之后便可以在main.c中编写