一、几个重要文件的介绍
1.system_stm32f10x.c
和system_stm32f10x.h
主要实现的功能是设置系统以及总线时钟,其中SystemInit()
函数在系统启动时都要调用(一般在启动文件中就被执行了)。
2.stm32f10x.h
主要是系统寄存器定义申明和内存操作封装。
3.stratup_stm32f10x_hd.s
启动文件(适用于Flash大于256K的芯片),主要进行初始化堆栈SP=,中断向量表以及中断定义,配置系统时钟,最后由启动文件调用main()
函数。
二、新建工程可能会遇到的几个问题
1.工程建立后,MDK5.1以后的版本会在工程文件所在的目录下生成名为Objects和Listings的两个文件夹,用以存放编译过程中产生的中间文件,这与之前的版本不一致。为了兼容以前版本的MDK,可以在工程根目录下新建名为OBJ的文件夹,然后在MDK->[Option]->[Output]
中把存放位置改到OBJ,在MDK->[Option]->[Listings]
中把位置改到User。
2.官方固件库文件src
和inc
需要放在工程目录下。
3.core_cm3.c、core_cm3.h
和启动文件startup_stm32f10x_hd.s
需放在工程目录下,独立存放。
4.stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h
和stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h
也要放在工程目录User文件夹下。
(以上2.3.4中的文件均来自官方固件包)
5.需要在MDK->[Option]->[C/C++]->Include Paths
中添加工程用到的所有头文件的路径,需要注意的是MDK只会在一级目录中查找,所以Path一定要定位到最后一级子目录。
6.因为 3.5 版本的库函数在配置和选择外设的时候通过宏定义来选择的,所以我们需要配置一个全局的宏定义变量,在MDK->[Option]->[C/C++]->Define
输入框中定义STM32F10X_HD,USE_STDPERIPH_DRIVER
。值得一提的是,如果你用的是中容量那么STM32F10X_HD
修改为STM32F10X_MD
,小容量修改为STM32F10X_LD
。
7.软件仿真配置。[Option]
里确认芯片型号和外接晶振,然后设置Dialog DLL
分别为:DARMSTM.DLL
和TARMSTM.DLL
,Parameter
均为:-pSTM32F103ZE
,用于设置支持 STM32F103ZE 的软硬件仿真。
8.Bin文件生成设置
[Options]->[User]->[After Build/Rebuild]->[Run #1]设置 C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin --output .\Objects\output.bin .\Objects\output.axf
前面路径随安装目录不同而改变,后面参数即生成bin文件及其位置。