建立STM32工程模板(STM32F103ZET6为例)

时间:2024-03-21 12:59:13

1 获取ST库文件

从ST的官方网站获取的STM32最新固件库v3.5里包含的内容如下:

建立STM32工程模板(STM32F103ZET6为例)

解压的文件夹名为:STM32F10x_StdPeriph_Lib_V3.5.0,里面包含了4个文件夹,一个网络链接,和一个ST库开发助手。详细结构如下:

1. Project 文件夹

1.1 Example:标准外设库驱动的完整例程

1.2 Template

2. Libraries 文件夹

2.1 CMSIS

2.1.1Documentation:CMSIS文档

2.1.2 CM3

CoreSupport

core_cm3.c:  CMSIS的Cortex-M3内核设备访问层源文件

DeviceSupport/ST/STM32F10x/startup

arm: ARM编译器启动文件

startup_stm32f10x_ld.s:大容量产品启动文件

startup_stm32f10x_md.s中容量产品启动文件

startup_stm32f10x_hd.s小容量产品启动文件

iar: IAR编译器启动文件

同arm

gcc:GCC编译器启动文件

2.2 STM32F10x_StdPeriph_Driver

2.2.1 Inc: 标准外设库驱动头文件

2.2.2 Src: 标准外设库驱动源文件

3. _htmresc 文件夹: 本文件夹包含了所有的html页面资源

4. Utilities  文件夹

4.1 STM32_EVAL: 本文件夹包含了用于STM3210B-EVAL和STM3210E-EVAL评估板的专用驱动

 

一些重要固件库文件:

main.c 主示例函数体

stm32f10x_conf.h 参数配置文件,它要求用户在运行应用程序之前对它进行修改,定义需要与库进行交互的参数。用户可以使用模板使能或者禁能外围模块,并且可以改变外部石英振荡器的数值

stm32f10x_it.h 头文件,包括所有中断处理函数原型

stm32f10x_it.c 外围模块中断处理函数文件,用户可以引入在应用程序中需要使用的中断处理函数。如果有多个中断请求映射到同一个中断向量,该函数采用轮循环围中断标志的方式来确认中断源。这些函数的名字在固件库中提供。

 

2 建立工程模板

1) 新建工程文件夹&向建立的工程文件夹中添加库文件,在相应位置创建一个项目文件夹。并新建如下图的文件夹分析存放不同类别的文件:

建立STM32工程模板(STM32F103ZET6为例) 建立STM32工程模板(STM32F103ZET6为例)

Doc用于存放各种说明文档;Libraries用于存放各种库文件;Listing用于存放编译时产生的中间文件;Output用于存放生成的下载所需的文件;Project用于存放工程文件;User用于存放用户文件,即用户自己编写的各种源文件。

将STM32固件库Libraries下的所有文件拷贝到上述Libraries下;将库文件中Project\STM32F10x_StdPeriph_Template下stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h、main.c复制到工程模板文件夹下的User文件夹中。stm32f10x_it.h、和stm32f10x_it.c这两个文件是中断函数,里面并没有写任何的中断服务程。stm32f10x_conf.h是用户需要配置的头文件,当需要用到芯片中的某部分外设的驱动时,在该文件下将该驱动的头文件包含进来即可。

建立STM32工程模板(STM32F103ZET6为例)

2) 使用MDK(Keil)新建工程模板

1启动软件, 在工具栏Project->New uVision4 Project新建工程文件,将新建的工程文件保存在上述Project文件夹下,根据需求取名,点击保存

建立STM32工程模板(STM32F103ZET6为例)

建立STM32工程模板(STM32F103ZET6为例)

2选择CPU

建立STM32工程模板(STM32F103ZET6为例)

3询问是否需要拷贝STM32的启动代码到工程文件中,这里用的是ST的库,库文件里面自带了一份启动代码,为了保持库的完整性,不需要开发环境添加自带的启动代码,点击否。

4为工程添加组(选中工程,按F2键还可以选择是否修改工程名)

建立STM32工程模板(STM32F103ZET6为例)

User用来存放用户自定义的程序文件,StdPeriph_Driver用来存放库文件,CMSIS用来存放M3系列单片机通用的文件,Startup放程序启动代码,Doc用来存放工程说明文件

5分别向各个组中添加对应文件(选中对应组双击即可添加文件)

向User组添加项目文件夹\User下的main .c文件和stm32f10x_it.c这2个文件。

建立STM32工程模板(STM32F103ZET6为例)

向CMSIS组添加项目文件夹\Libraries\CMSIS\CM3\CoreSupport\core_cm3.c文件和项目文件夹\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c文件。 system_stm32f10x.c是ARM公司提供的符合CMSIS标准的库文件

向StdPeriph_Driver组添加项目文件夹\Libraries\ STM32F10x_StdPeriph_Driver\src下用户需要的库文件

向Startup组添加项目文件夹\Libraries\ CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm下对应的startup_stm32f10x_xx.s文件

建立STM32工程模板(STM32F103ZET6为例)

建立STM32工程模板(STM32F103ZET6为例)

  启动文件根据芯片Flash的容量选择。对应关系如下表:

启动文件名称

对应的容量

容量的范围                

startup_stm32f10x_ld              

小容量                     

16-32K

startup_stm32f10x_md

中容量

64-128K

startup_stm32f10x_hd

大容量

256-512K

startup_stm32f10x_xl

超大容量

512-1024K

startup_stm32f10x_cl

互联型产品

 3) 工程配置:点击工具栏即Target Option… 选项

1选项卡Target中,把Use MicroLIB 勾上。这是为后面串口可以使用Printf函数打印数据;

配置Output选项卡: 点击Select Folder for Objects...  设置编译后输出文件保存的位置,这里选择Output文件夹,勾选 Create HEX File表示编译输出HEX文件

配置Listing选项卡:选择输出文件夹,这里设置为Listing文件夹

建立STM32工程模板(STM32F103ZET6为例)建立STM32工程模板(STM32F103ZET6为例)

2配置选项卡 C/C++

在Define 写入两个宏命令USE_STDPERIV PH_DRIV VER, STM32F10X_HD; 添加USE_STDPERIPH_DRIVER是为了屏蔽编译器的默认搜索路径,转而使用用户添加到工程中的ST的库。添加STM32F10X_HD表明使用的芯片是大容量的,如此库文件里面为芯片定义的寄存器就可以被用户使用。芯片是小或大容量的时候宏可以换成STM32F10X_LD或者STM32F10X_HD。

勾选One ELF Section per Function选项,软件编译代码时会对代码进行优化

在Include Paths栏中,添加库文件的搜索路径(注意:当编译器在我们指定的路径下搜索不到的话还是会回到标准目录去搜索)。添加的内容如下图:

建立STM32工程模板(STM32F103ZET6为例)

建立STM32工程模板(STM32F103ZET6为例)

3 工程测试

将原来的main.c函数中的代码删除,输入如下代码,并保存,然后编译代码 ,编译结果如下

建立STM32工程模板(STM32F103ZET6为例)建立STM32工程模板(STM32F103ZET6为例)

建立STM32工程模板(STM32F103ZET6为例)建立STM32工程模板(STM32F103ZET6为例)

使用Jlink仿真器硬件调试配置 (略)