stm32f103c8t6新建固件库模板(可自取)

准备资料

  1. V3.5 固件库包: STM32F10x_StdPeriph_Lib_V3.5.0 这是 ST 官网下载的固件库完整版,
  2. MDK5开发环境
    不想自己新建项目的,可以到本文末的百度网盘自取使用即可

步骤

  1. 在建立工程之前,我们建议用户在电脑的某个目录下面建立一个文件夹,后面所建立的工
    程都可以放在这个文件夹下面,这里我们建立一个文件夹为 Template。
  2. 点击 MDK 的菜单: Project –>New Uvision Project ,然后将目录定位到刚才建立的文件夹
    Template 之下,在这个目录下面建立子文件夹 USER(我们的代码工程文件都是放在 USER
    目录,很多人喜欢新建“Project”目录放在下面,这也是可以的,这个就看个人喜好了),然后定位到 USER 目录下面,我们的工程文件就都保存到 USER 文件夹下面。工程命名为Template,点击保存
    在这里插入图片描述
    定义工程名称
    接下来会出现一个选择 CPU 的界面,就是选择我们的芯片型号。 如图 所示, 因为STM32F103C8T6 最小系统板所使用的 STM32 型号为STM32F103C8,所以在这里我们选择 STMicroelectronics-》STM32F1 Series-》STM32F103-》STM32F103C8(如果使用的是其他系列的芯片,选择相应的型号就可以了,特别注意: 一定要安装对应的器件 pack 才会显示这些内容哦!!,如果没得选择,请关闭 MDK,然后安装
    链接:百度网盘
    提取码:0000

在这里插入图片描述

  1. 点击 OK, MDK 会弹出 Manage Run-Time Environment 对话框, 如图所示:
    在这里插入图片描述
    这是 MDK5 新增的一个功能,在这个界面,我们可以添加自己需要的组件,从而方便构建开发环境,不过这里我们不做介绍。所以在图 3.3.4 所示界面,我们直接点击 Cancel,即可,得
    到如图所示界面:
    在这里插入图片描述
    到这里,我们还只是建了一个框架,还需要添加启动代码,以及.c 文件等。
  2. 现在我们看看 USER 目录下面包含 2 个文件夹和 2 个文件,如下图所示:
    在这里插入图片描述

这里我们说明一下, Template.uvprojx 是工程文件,非常关键,不能轻易删除。 Listings 和 Objects
文件夹是 MDK 自动生成的文件夹,用于存放编译过程产生的中间文件。这里, 为了跟 MDK5.1
之前版本工程兼容, 我们把两个文件夹删除,我们会在下一步骤中新建一个 OBJ 文件夹,用来
存放编译中间文件。 当然,我们不删除这两个文件夹也是没有关系的,只是我们不用它而已。

  1. 接下来,我们在 Template 工程目录下面,新建 3 个文件夹 CORE, OBJ 以及STM32F10x_FWLib。 CORE 用来存放核心文件和启动文件, OBJ 是用来存放编译过程文件以及hex 文件, STM32F10x_FWLib 文件夹顾名思义用来存放 ST 官方提供的库函数源码文件。已有的 USER 目录除了用来放工程文件外,还用来存放主函数文件 main.c,以及其他包括system_stm32f10x.c 等等。
    在这里插入图片描述
  1. 下面我们要将官方的固件库包里的源码文件复制到我们的工程目录文件夹下面。
    打开官方固件库包,定位到我们之前准备好的固件库包的目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver 下面,将目录下面的 src,inc 文件夹 copy 到我们刚才建立的 STM32F10x_FWLib 文件夹下面。
    src 存放的是固件库的.c 文件, inc 存放的是对应的.h 文件,您不妨打开这两个文件目录过目一下里面的文件,每个外设对应一个.c 文件和一个.h 头文件

  2. 下面我们要将固件库包里面相关的启动文件复制到我们的工程目录 CORE 之下。
    打开官方固件库包,定位到目录STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 下面,将文件 core_cm3.c
    和 文 件 core_cm3.h 复 制 到CORE 下 面 去 。 然 后 定 位 到 目 录
    STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm 下面,将里面 startup_stm32f10x_md.s 文件复制到 CORE 下面。
    不同容量的芯片使用不同的启动文件,我们的芯片 STM32F103C8 是中容量芯片,所以选择这个启动文件。
    现在看看我们的 CORE 文件夹下面的文件
    在这里插入图片描述

  3. 定位到目录:
    STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 下面将里面的三个文件 stm32f10x.h, system_stm32f10x.c, system_stm32f10x.h,复制到我们的 USER目录之下。然后将STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下 面 的 4 个 文 件main.c, stm32f10x_conf.h, stm32f10x_it.c, stm32f10x_it.h 复制到 USER 目录下面。

在这里插入图片描述

  1. 前面 8 个步骤,我们将需要的固件库相关文件复制到了我们的工程目录下面,下面我们将
    这些文件加入我们的工程中去。右键点击 Target1,选择 Manage Project Items。

在这里插入图片描述

  1. Project Targets 一栏,我们将 Target 名字修改为 Template,然后在 Groups 一栏删掉一个 SourceGroup1,建立三个 Groups: USER,CORE,FWLIB。然后点击 OK,可以看到我们的 Target 名字以及 Groups 情况。
    在这里插入图片描述
    在这里插入图片描述
  1. 下面我们往 Group 里面添加我们需要的文件。我们按照步骤 10 的方法, 右键点击点击
    Tempate,选择选择 Manage Project Itmes, 然后选择需要添加文件的 Group,这里第一步我
    们 选 择 FWLIB , 然 后 点 击 右 边 的 Add Files, 定 位 到 我 们 刚 才 建 立 的 目 录
    STM32F10x_FWLib/src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close.
    可以看到 Files 列表下面包含我们添加的文件。
    这里需要说明一下,对于我们写代码,如果我们只用到了其中的某个外设,我们就可以不
    用添加没有用到的外设的库文件
    ,例如我只用 GPIO,我可以只用添加 stm32f10x_gpio.c 而
    其他的可以不用添加。这里我们全部添加进来是为了后面方便,不用每次添加,当然这样
    的坏处是工程太大,编译起来速度慢,用户可以自行选择。

在这里插入图片描述

  1. 用同样的方法,将 Groups 定位到 CORE 和 USER 下面,添加需要的文件。这里
    我们的 CORE 下面需要添加的文件为 core_cm3.c, startup_stm32f10x_md.s (注意,默认添加的
    时候文件类型为.c,也就是添加 startup_stm32f10x_md.s 启动文件的时候,你需要选择文件类型
    为 All files 才能看得到这个文件), USER 目录下面需要添加的文件为 main.c, stm32f10x_it.c,
    system_stm32f10x.c.
    这样我们需要添加的文件已经添加到我们的工程中了,最后点击 OK,回到工程主界面
    在这里插入图片描述
  1. 接下来我们要编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。
    方法是点击魔术棒,然后选择“Output”选项下面的“Select folder for objects…” ,然后选择
    目录为我们上面新建的 OBJ 目录。 这里大家注意,如果我们不设置 Output 路径,那么默认
    的编译中间文件存放目录就是 MDK 自动生成的 Objects 目录和 Listings 目录。
    在这里插入图片描述

  2. 下面我们点击编译按钮 在这里插入图片描述 编译工程,可以看到很多报错,因为找不到头文件。

  3. 下面我们要告诉 MDK,在哪些路径之下搜索需要的头文件,也就是头文件目录。 这里大家
    要注意,对于任何一个工程,我们都需要把工程中引用到的所有头文件的路径都包含到进
    来。 回到工程主菜单,点击魔术棒 ,出来一个菜单,然后点击 c/c++选项.然后点击 Include
    Paths 右边的按钮。弹出一个添加 path 的对话框,然后我们将图上面的 3 个目录添加进去。
    记住, keil 只会在一级目录查找,所以如果你的目录下面还有子目录,记得 path 一定要定
    位到最后一级子目录
    。然后点击 OK
    在这里插入图片描述
    在这里插入图片描述

  4. 接下来,我们再来编译工程,可以看到又报了很多同样的错误。为什么呢?这是因为 3.5 版
    本的库函数在配置和选择外设的时候通过宏定义来选择的,所以我们需要配置一个全局的
    宏定义变量。按照步骤 16,定位到 c/c++界面,然后填写
    “STM32F10X_MD,USE_STDPERIPH_DRIVER”到 Define 输入框里面(请注意,两个标识符
    中间是逗号不是句号)。这里解释一下,如果你用的是大容量那么
    STM32F10X_MD 修改为 STM32F10X_HD,小容量修改为 STM32F10X_LD. 然后点击 OK。
    在这里插入图片描述

  5. 这次在编译之前,我们记得打开工程 USER 下面的 main.c 文件, 复制下面代码到 main.c 覆
    盖已有代码,然后进行编译。(记得在代码的最后面加上一个回车,否则会有警告) ,可以看
    到,这次编译已经成功了。

#include "stm32f10x.h"
void Delay(u32 count)
{
	u32 i=0;
	for(;i<count;i++);
}
int main(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|
	RCC_APB2Periph_GPIOE, ENABLE); //使能 PB,PE 端口时钟
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO 口速度为 50MHz
	GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化 GPIOB.5
	GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5 推挽输出
	GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化 GPIO
	GPIO_SetBits(GPIOE,GPIO_Pin_5); //PE.5 输出高
	while(1)
	{
		GPIO_ResetBits(GPIOB,GPIO_Pin_5);
		GPIO_SetBits(GPIOE,GPIO_Pin_5)
		Delay(3000000);
		GPIO_SetBits(GPIOB,GPIO_Pin_5);
		GPIO_ResetBits(GPIOE,GPIO_Pin_5);
		Delay(3000000);
	}
}
  1. 这样一个工程模版建立完毕。下面还需要配置,让编译之后能够生成 hex 文件。同样点击
    魔术棒,进入配置菜单,选择 Output。然后勾上下三个选项。 其中 Create HEX file 是编译
    生成 hex 文件, Browser Information 是可以查看变量和函数定义。
    在这里插入图片描述
  2. 重新编译代码,可以看到生成了 hex 文件在 OBJ 目录下面,这个文件我们用 ST_Link 下载
    到 mcu 即可。 到这里,一个基于固件库 V3.5 的工程模板就建立了。
  3. 实际上经过前面 19 个步骤,我们的工程模板已经建立完成。但是在我提供了一个 SYSTEM 文件夹,下面有 3 个子目录分别为 sys,usart,delay,
    存放的是我们每个实验都要使用到的共用代码,该代码是由正点原子 ALIENTEK 编写。已经在本章末尾工程里写好直接引用即可。

百度网盘链接

链接: https://pan.baidu.com/s/1GJixU-EYT3ajZIbHQc0kDw
提取码: 0000

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛尘~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值