源码可以从ST官网获取,在这里我们以V3.5.0来建立我们的工程模版。
启动软件(keil)。如果是第一次使用的话会打开一个自带的工程文件,我们可以通过工具栏 Project->Close Project 选项把它关掉。 在工具栏 Project->New μVision Project…新建我们的工程文件,我们将新建的工程文件保存在桌面的 STM32\USER文件夹下(先在电脑桌面上新建一个STM32文件夹,在 STM32里面新建一个 USER文件夹),文件名取为 STM32,名字可以随便取,点击保存。然后选择我们的芯片,在这里我的是STM32103VET6,为了保持库的完整性,我们就不需要开发环境为我们自带的启动代码了,稍后我们自己手动添加,出现提示时我们点否。
STM32 文件夹下,我们新建四个文件夹,分别为 FWlib、CMSIS、Output、Listing。原先新建的 USER用来存放工程文件和用户代码,包括主函数main.c。 FWlib用来存放 STM32库里面的 inc和 src这两个文件,这两个文件包含了芯片上的所有驱动。CMSIS用来存放库为我们自带的启动文件和一些M3系列通用的文件。CMSIS里面存放的文件适合任何 M3内核的单片机。CMSIS的缩写为: Cortex Microcontroller Software Interface Standard,是 ARM Cortex微控制器软件接口标准,是 ARM公司为芯片厂商提供的一套通用的且独立于芯片厂商的处理器软件接口。Output用来保存软件编译后输出的文件,Listing用来存放一些编译过程中产生的文件。
把ST库 3.5.0 源码\3.5.0\3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 的 inc 跟 src 这两个文件夹拷贝到 STM32\FWlib文件夹中。
把源码\3.5.0\3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下的 main.c、stm32f10x_conf.h、stm32f10x_it.h、 stm32f10x_it.c 、system_stm32f10x.c 拷贝到 STM32\USER 目录下。 stm32f10x_it.h、和stm32f10x_it.c 这两个文件里面是中断函数,里面为空,并没有写任何的中断服务程序。stm32f10x_conf.h 是用户需要配置的头文件,当我们需要用到芯片中的某部分外设的驱动时,我们只需要在该文件下将该驱动的头文件包含进来即可,片上外设的驱动在 src文件夹中,inc文件夹里面是它们的头文件。这三个文件是用户在编程时需要修改的文件,其他库文件一般不需要修改。system_stm32f10x.c是 ARM公司提供的符合 CMSIS标准的库文件,等下我们把这个文件移动到 STM32\CMSIS 这个文件夹中。
(1)把3.5.0 源码\3.5.0\3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 的全部文件拷贝到 STM32\CMSIS\startup(需先在 CMSIS新建好 startup文件夹)文件夹下。这些是用汇编写的启动文件。STM32F103VET6,属于大容量的,所以等下我们把 startup_stm32f10x_hd.s 添加到我们的工程中。根据 ST的官方资料:Flash在 16 ~32 Kbytes为小容量, 64 ~128 Kbytes 为中容量,256 ~512 Kbytes为大容量,不同大小的 Flash对应的启动文件不一样,这点要注意。
(2)把3.5.0 源码\3.5.0\3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 的 core_cm3.c和 core_cm3.h也拷贝到 STM32-Template\CMSIS 文件夹下。
(3)把3.5.0 源码\3.5.0\3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 的 stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h拷贝到 STM32\CMSIS 文件夹下。
在 STM32上右键选中 Add Group…选项,新建四个组,分别命名为STARTCODE、USER、FWlib、CMSIS。STARTCODE从名字就可以看得出我们是用它来放我们的启动代码的,USER用来存放用户自定义的应用程序,FWlib用来存放库文件,CMSIS用来存放 M3系列单片机通用的文件。
接下来我们往我们这些新建的组中添加文件,双击哪个组就可以往哪个组里面添加文件。我们在 STARTCOKE里面添加 startup_stm32f10x_hd.s,在USER组里面添加 main.c 和 stm32f10x_it.c 这两个文件,在 FWlib组里面添加 src里面的全部驱动文件,当然,src里面的驱动文件也可以需要哪个就添加哪个。这里将它们全部添加进去是为了后续开发的方便,况且我
们可以通过配置 stm32f10x_conf.h 这个头文件来选择性添加,只有在stm32f10x_conf.h 文件中配置的文件才会被编译。在 CMSIS里面添加core_cm3.c 和 system_stm32f10x.c 文件。注意,这些组里面添加的都是汇编文件跟 C文件,头文件是不需要添加的,最后结果:
至此,我们的工程已经基本建好,下面来配置一下 MDK 的配置选项,点击工具栏中的魔术棒按钮,在弹出来的窗口中选中output。
点击 Select Folder for Objects... 设置编译后输出文件保存的位置。同时把 Create HEX File 和 Browse information 这两个选项框也选上。同样在 Listing 这个选项卡中,我们也点击 Select Folder listings…定位到模板中的 Listing 文件夹
选中C/C++选项卡,在 Define 里面输入添加 USE_STDPERIPH_DRIVER, STM32F10X_HD。添加 USE_STDPERIPH_DRIVER是为了屏蔽编译器的默认搜索路径,转而使用我们添加到工程中的 ST的库,添加 STM32F10X_HD 是因为我们用的芯片是大容量的,添加了STM32F10X_HD这个宏之后,库文件里面为大容量定义的寄存器我们就可以用了。芯片是小或中容量的时候宏要换成STM32F10X_LD或者 STM32F10X_MD。其实不管是什么容量的,我们只要添加上 STM32F10X_HD 这个宏即可,当你用小或者中容量的芯片时,那些为大容量定义的寄存器我不去访问就是了,反正也访问不了。
在 Include Paths 栏点击,在这里添加库文件的搜索路径,这样就可以屏蔽掉默认的搜索路径。
到这里,我们就可以回去MAIN函数开始我们的编程之路拉,建立工程是比较复杂的事情,但是建立一个模版之后以后就可以一直使用这个模版,也是进行开发(库函数)的第一步也是最基础的,希望对大家有帮助,谢谢大家。