1 固件库下载和新建工程


这里记录一下怎么从ST官网下载固件包并新建一个属于自己的工程模板,这里以STM32F103系列为例

一、怎么下载官网固件库

1、打开ST官网:https://www.st.com/content/st_com/en.html,选择Tools & Software

在这里插入图片描述

2、点击Embedded Software,选择STM32 Embedded Software

在这里插入图片描述

3、选择STM32 Standard PeripheralLibraries

在这里插入图片描述

4、选择F1系列

在这里插入图片描述

5、下载固件包,这里版本我们选择3.5.0,下载固件包需要先注册一个ST的账号,这里我已经注册好了,直接下载在这里插入图片描述### 6、解压文件如下

在这里插入图片描述
在这里插入图片描述

二、固件库

1.固件库文件分类

在这里插入图片描述

  • Libraries:文件夹下是驱动库的源代码及启动文件,这个非常重要,我们要使用的固件库就在这个文件夹里面

  • Project:文件夹下是用驱动库写的例子和工程模板,其中那些为每个外设写好的例程对我们非常有用,我们在学习的时候就可以参考这里面的例程

  • stm32f10x_stdperiph_lib_um.chm:库帮助文档,这个很有用,不喜欢直接看源码的可以在合理查询每个外设的函数说明,非常详细,这是一个已经编译好的HTML文件,主要讲述如何使用驱动库来编写自己的应用程序

2.文件说明

在这里插入图片描述
图片来源于网络,上图中红色部分是我们新建工程需要用到的文件,下面我们简要说明一下其中的几个文件

2.1启动文件startup_stm32f10x.s

在固件库如图所示的路径下,找到启动文件startup_stm32f10x.s,我们需要选择对应芯片容量的启动文件

在这里插入图片描述

不同芯片对应的FLASH大小是不一样的,选择启动文件的时候,也需要按照相应芯片的FLASH选择对应的启动文件,以STM32F103RCT6芯片为例

在这里插入图片描述

FLASH大小为256KB,对照下表,属于中容量型芯片,所以等会新建工程的时候,我们需要添加startup_stm32f10x_hd.s文件

在这里插入图片描述

单片机上电后,进入startup_stm32f10x_hd.s启动文件,启动文件是用汇编写的,启动文件内定义了中断向量表,中断服务函数等。中断服务函数中有个复位中断。这就是整个程序的入口;当STM32上电复位或者按下复位键之后,程序就会进入复位中断函数执行;复位中断函数主要就做了两件事情。第一个是调用SystemInit函数,第二个是调用main函数

在这里插入图片描述

2.2 stm32f10x.h

这个头文件实现了片上外设的所以寄存器的映射,是一个非常重要的头文件,在内核中与之相对应的头文件是core_cm3.h。

2.3 system_stm32f10x.c

system_stm32f10x.c文件实现了STM32的时钟配置,操作的是片上的RCC这个外设。系统在上电之后,首先会执行由汇编编写的启动文件,启动文件中的复位函数中调用的SystemInit()函数就在这个文件里面定义。调用完之后,系统的时钟就被初始化成72M。如果后面我们需要重新配置系统时钟,我们就可以参考这个函数重写。

Systemlnit()函数就是定义在这个文件里面,上面的brief说明了函数的功能
在这里插入图片描述

2.4 stm32f10x_conf.h

这个stm32f10x_conf.h的文件就是用来配置头文件的包含关系的,stm32f10x_conf.h里面indlude了所有的库函数头文件,同时我们在stm32f10x.h的最后包含了stm32f10x_conf.h,所以在使用这些库函数时,我们只需要包含stm32f10xh这一个头文件,就相当于包含了所有的库函数头文件。这样我们就可以任意地调用库函数了

在这里插入图片描述
在这里插入图片描述

2.5 每个文件之间的联系

每个文件之间的联系如下图,参考了江科大的PPT
在这里插入图片描述

三、 新建工程

下面是新建工程具体操作步骤

1、新建Templete文件夹,如下所示

在这里插入图片描述

2、复制相应文件

2.1STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport目录下的core_cm3.ccore_cm3.h两个文件复制到文件夹Templete\Libraries\CMSIS目录下

在这里插入图片描述

在这里插入图片描述

2.2 STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x路径下的4个文件复制到文件夹Templete\Libraries\CMSIS目录下,对于startup文件夹,只需要startup/arm路径下的文件,把该路径下的文件移动到startup文件夹下面,其余全部删掉

此时,Templete\Libraries\CMSIS文件夹包含文件如下

在这里插入图片描述
Templete\Libraries\CMSIS\startup文件夹包含文件如下
在这里插入图片描述

2.3 把固件库STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver下的inc和src两个文件夹复制到Templete\Libraries\STM32F10x_StdPeriph_Driver

在这里插入图片描述
在这里插入图片描述
2.4 把固件库STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template目录下的4个文件复制到Templete\User
在这里插入图片描述
在这里插入图片描述
到此,我们需要的文件就已经添加好了,总的来说,添加了3次文件

3、在工程中包含文件

3.1 打开Keil,新建工程,工程保存在Project文件夹下面

在这里插入图片描述
3.2 选择芯片,这里我们选择STM32F103RCT6
在这里插入图片描述
3.3 新建如图的4个分组,然后添加文件

startup添加文件如下,三个文件都位于Templete\Libraries\CMSIS目录下

在这里插入图片描述
Driver文件夹里面添加所有外设的源文件,文件路径Templete\Libraries\STM32F10x_StdPeriph_Driver\src,源文件里面是ST写好的各个外设的驱动
在这里插入图片描述

User文件夹里面添加文件如下
在这里插入图片描述

3.4 点击魔术棒,包含文件头路径

在这里插入图片描述
包含头文件路径如图
在这里插入图片描述

3.5 把main.c文件里面的内容删除,填入如下内容

#include "stm32f10x.h"                 

int main(void)
{
	while(1)
	{
	
	}
}

3.6 对魔术棒所做的一些更改

3.6.1 因为 3.5 版本的库函数在配置和选择外设的时候通过宏定义来选择的,所以我们需要配置一个全局的宏定义变量。定位到魔术棒 c/c++界面,然后填写“STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 输入框里面(请注意,两个标识符中间是逗号不是句号),这里解释一下,如果你用的是中容量那么STM32F10X_HD 修改为 STM32F10X_MD,小容量修改为 STM32F10X_LD,然后点击 OK。

  • STM32F10X_HD 宏:为了告诉 STM32 标准库,我们使用的芯片类型是大容量的,使 STM32标准库根据我们选定的芯片型号来配置。
  • USE_STDPERIPH_DRIVER 宏:为了让 stm32f10x.h 包含 stm32f10x_conf.h 这个头文件。

在这里插入图片描述

3.6.2 修改输出文件夹路径
打开魔术棒,把输出文件夹选择为我们创建的Output文件夹,顺便创建HEX文件勾选上,这样工程就能产生HEX文件
在这里插入图片描述
返回Project文件夹,可以看到,在新建了工程以后,里面多了如图的几个文件夹,其中,DebugConfig、Listings 和 Objects 文件夹是 MDK 自动生成的文件夹,Listings 和 Objects 用于存放编译过程产生的中间文件,DebugConfig 文件夹用于存储一些调试配置文件,我们把 Listings 和 Objects 这两个文件夹删除(DebugConfig 文件夹不可以删除),我们用Output文件夹来存放编译产生的中间文件

在这里插入图片描述
到这里,文件就新建好啦,点击编译,如图
在这里插入图片描述

转自:https://blog.csdn.net/qq_46564477/article/details/131452016