标签:
学习stm32,第一步就是选择开发工具了,GCC,MDK,IAR每一种都有自己的优劣势,不再赘述。在这里,我选择使用的时MDK5.14。首次使用MDK,如果有开发板,那么例程就提供了了很多的模板供我们学习。但是我发现直接使用这些模板虽然让我快速的实现功能,是很有趣,但是解析代码时却让我感觉迷茫,我甚至不知道程序的运行流程,也不知道为什么如此设计,因此我就有了脱离例程,自己建立工程的想法,初次建立错误一堆,通过百度以及自己查找解决这一个个错误花费了我接近4个小时,我把自己的整个经历记录下来,虽然以后遇到的芯片或者开发软件可能不同,但具体思路却是一致的。这个流程也基本上适用于所有使用MDK生成用于STM32程序(固件函数库方式)。为了以后再次出现相同错误能快速的解决,我尽可能给出详细步骤处理。
准备工作
建立工程文件夹,在其下面添加OUTPUT,SOURCE这两个文件夹(如下):
然后在SOURCE文件夹下添加文件夹APP,用来存放用户文件。
备注:所有文件夹(包括工程的路径上的文件夹)名字一定要是要英文,这是因为中文在某些情况下会出现未知编译错误。
移动标准库文件中的头文件和对应子文件代码到SOURCE文件夹,我使用的是STM32F10x_StdPeriph_Lib_V3.5.0,后续的库可能有其它改动,这就需要你自己按照这个思路去处理,解压STM32F10x_StdPeriph_Lib,找到...\\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries文件夹下的
并复制到...\\工程文件夹(当前工程,英文)\\SOURCE文件夹下,其中CMSIS是Cortex的微控制器软件接口标准,它提供了stm32的启动文件,外设定义,以及器件的定义。而STM32F10x_StdPeriph_Driver提供的就是库函数用来实现对芯片的操作。
SOURCE文件夹内容如下:
到此,整个工程的准备工作就做好了,下面就开始用MDK建立工程。
使用MDK建立工程
1.新建ARM MDK工程,我选择的是芯片STM32F107VS,与开发板芯片保持一致,位置在当前工程文件下。工程建立中,添加对应芯片但不要添加启动代码,手动复制安装目录\\Keil\ARM\Startup\ST文件夹下的STM32F10x.s(启动文件,以后会详解)到当前工程文件夹,并添加到当前工程下的start_up中。
2.新建file,保存在上述的...//APP文件夹里,文件名保存为main.c,然后添加到USER文件夹下。
3.在工程中添加文件夹DRIVE,并把用到的驱动文件,也就是...\SOURCE\STM32F10x_ StdPeriph_Driver\src下需要使用的驱动文件添加到DRIVE文件夹里,如下:
给target添加inc查询支持,用于头文件查找。
备注:重要,不然MDK是无法识别你包含的头文件
具体步骤如下:
1.选中MDK中target文件夹,右键选择OPTION(快捷键ALT+F7),在弹出的对话框上方选中C/C++。
2.在对话框下方的includePathe处添加:当前工程文件夹\SOURCE\STM32F10x_StdPeriph_Driver\inc提供头文件支持(后序还要添加新的支持),也就是将用到的头文件的路径包含到软件中!
编译和更正
上面的都完成后,再main函数里添加代码,头文件为#include"stm32f10x.h",编译。
这时会出现
C:\Keil\ARM\Inc\ST\STM32F10x\stm32f10x.h(8319):error: #5: cannot open source input file "stm32f10x_conf.h": No suchfile or directory
stm32f10x_conf.h里是所用外设的头文件的申明以及程序内部assert处理命令,在3.5的固态库我没有找到这个头文件,于是我下载一个具有所有外设头文件申明的头文件stm32f10x_conf.h,将其放入当前工程文件夹\SOURCE\STM32F10x_StdPeriph_Driver\inc中,继续编译,出现一堆端口未定义,这是因为stm32f10x_conf.h虽然添加进去了,但并没有真正启用,在stm32f10x.h中查找,大概100行的位置
取消掉#defineUSE_STDPERIPH_DRIVER这句话的注释,如上图即可。此外,#include”stm32f10x_conf.h”定义在#include"stm32f10x.h"的末尾,
下面就来讲stm32f10x_conf.h这个头文件。
里面包含了所有你需要用到的外设头文件,你需要用什么外设就取消对应得头文件注释即可。
此外如果出现
C:\Keil\ARM\Inc\ST\STM32F10x\stm32f10x.h(97):error: #35: #error directive:"Please select first the target STM32F10x device used in your application(in stm32f10x.h file)"
表明你没有申明当前选择的STM芯片隶属于的类型,在stm32f10x.h找到如下的代码段,下方会有英文注释告诉你如何选择,取消掉你所用板子型号对应类型的注释即可(重要,板子型号对应的寄存器设置会不同,选择不符合的可能程序跑不起来),如stm32f107为互联型,则取消STM32F10X_CL的注释。
解决以上问题,那么一个无错误的基础ARM工程架构就建立起来了,当然要实现想需要的功能,还需要自己添加相关的代码,以后逐步介绍外设的时候我会说明!
标签:
原文地址:http://www.cnblogs.com/zc110747/p/4653411.html