STM32F103构建固件库模板(PS固件库文件树介绍)

参考:STM32F103ZE新建固件库模板
作者:追兮兮
发布时间:2020-10-14 10:31:45
网址:https://blog.csdn.net/weixin_44234294/article/details/109065495
参考博文:https://blog.csdn.net/visual_eagle/article/details/104126122

目录

  • 固件库的使用
    • 创建固件库文件夹
    • 固件库官方源文件拷贝到相应文件夹
      • Libiraries(FWLIB)
      • CORE
      • USER
    • 新建工程
    • 将固件库文件导入到工程
      • 工程下创建文件夹
      • 文件夹内添加文件
      • 生成.hex文件
      • 添加头文件路径
  • STM32固件库文件树结构简介
    • Libraries 文件夹
    • Project 文件夹
    • 固件库的帮助文档
  • STM32固件库内部结构功能简介
    • 1. 汇编编写的启动文件
    • 2. 时钟配置文件
    • 3. 外设相关的
    • 4. 内核相关的
    • 5. 头文件的配置文件
    • 6. 专门存放中断服务函数的c文件

固件库的使用

固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道, 向上提供用户函数调用的接口(API)。在 51的开发中我们常常的作法是直接操作寄存器,而对于 STM32 这种级别的 MCU,数百个寄存器记起来又是谈何容易。于是 ST(意法 半导体)推出了官方固件库,固件库将这些寄存器底层操作都封装起来,提供一整套接口(API) 供开发者调用,大多数场合下,你不需要去知道操作的是哪个寄存器,你只需要知道调用哪些函数即可

以本博的学习板STM32F103ZET6为例,固件库(库函数的集合)是由官方提供的,这个官方是ST公司,而不是正点原子官方。也就是说不仅仅这一型号单片机,ST系列其他型号的单片机库函数依旧可以适用。所以不必担心更换板子后不知如何去编程。

任何处理器,不管它有多么的高级,归根结底都是要对处理器的寄存器进行操作。但是固件库不是万能的,如果想要把 STM32 学透,光读 STM32 固件库是远远不够的,你还是要了 解一下 STM32 的原理。

创建固件库文件夹

新建一个文件夹Template(自己随意起),该目录下四个文件夹如图(名字也可以自己起)

  • Core:一些核心文件和启动文件(或者分开为:CMSIS和STARTUP)
  • Libiraries(FWLIB):固件库(外设驱动)
  • Project:工程文件,keil创建的工程保存在此
  • User:main函数,应用程序
  • Doc:创建readme.txt工程项目描述文件
  • 将生成的.hex文件存在于OBJ目录下

不同人习惯不同,放置的位置会有一些区别,不过无伤大雅。


在这里插入图片描述

固件库官方源文件拷贝到相应文件夹

Libiraries(FWLIB)

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver目录下有inc(头文件)和src(.c文件)两个文件copy到Template文件夹下的Libiraries内,里面都是外设的一些驱动,如下所示。


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

在这里插入图片描述

CORE

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport目录下两个文件copy到之前新建的文件Template下的CORE文件下。

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

\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm目录下还要copy一个启动文件到CORE。
(>128kFLASH大容量的用hd,中等的用md,<64kFLASH小的用ld)战舰板子就用hd

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

Core目录完成,内部显示如下:

在这里插入图片描述

USER

\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x目录下copy三个文件到USER文件。

在这里插入图片描述

在这里插入图片描述

\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template目录下复制以下四个文件到USER。

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

新建工程

打开MDK5新建工程

在这里插入图片描述

目录选择之前新建的template下的User,文件名字自己取

在这里插入图片描述

选择芯片型号,我这里是STM32F103ZE。

江江视频里此处选的STM32F103C8

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

项目新建后的目录

在这里插入图片描述

此时点击之前新建的文件Template下的USER后:(会出现以下文件,点开前两个都是空文件)

在这里插入图片描述

将固件库文件导入到工程

工程下创建文件夹

此时固件库内容的复制已经完成,现在就要在MDK5中将文件导入到工程。在工程下创建文件夹。

江江视频里的方法:
工程下创建文件夹:右键选择Add Group,挨个添加,鼠标长按进行修改名字。
向文件夹内添加文件:直接在主界面双击文件夹,弹出添加界面进行文件的添加。

右键选择Manage Project items…创建三个文件夹(Keil
主界面魔术棒右边是这个快捷键)。

在这里插入图片描述

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

文件夹内添加文件

FWLIB:Add Files… \LibLIbiiraries\src(全部文件)

在这里插入图片描述
USER:Add Files… \USER(3个.c文件)
在这里插入图片描述
COREc:Add Files… \CORE(.c文件+.s文件)

在这里插入图片描述

生成.hex文件

点击魔术棒将生成的.hex文件存在于Project(大部分人之前这个文件夹都取名为OBJ)

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

添加头文件路径

此时编译会出现找不到头文件的error。

需添加头文件路径,编译时自动就把头文件包含进来。

在这里插入图片描述

发现编译再次出错

在这里插入图片描述

原因:实际上User目录下的这个.h文件是没有被导入进去的

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

上面这句话说明只有定义了USE_STDPERIPH_DRIVER才会包含这个头文件,所以需要添加宏定义到Define,点击ok。

在这里插入图片描述

再次编译就不报错了

在这里插入图片描述

STM32固件库文件树结构简介

STM32固件库文件树及构成详解(库版本:STM32F10x_StdPeriph_Lib_V3.5.0)

库减压后所有文件夹构成如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Libraries 文件夹

有 CMSIS 和 STM32F10x_StdPeriph_Driver 两个目录,这两个目录包含 固 件 库 核 心 的 所 有 子 文 件 夹 和 文 件 。 其 中 CMSIS 目 录 下 面 是 启 动 文 件 ,STM32F10x_StdPeriph_Driver 放的是 STM32 固件库源码文件。源文件目录下面的 inc 目录存放的是 stm32f10x_xxx.h 头文件,无需改动。src 目录下面放的是 stm32f10x_xxx.c 格式的固件库源码文件。每一个.c 文件和一个相应的.h 文件对应。这里的文件也是固件库的核心文件,每个外设对应的一组文件。

Project 文件夹

有两个文件夹,顾名思义, STM32F10x_StdPeriph_Examples 文件夹下面存放的的 ST 官方提供的固件实例源码,在以后的开发过程中,可以参考修改这个官方提供的实例来快速驱动自己的外设,很多开发板的实例都参考了官方提供的例程源码,这些源码对以后的学习非常重STM32F10x_StdPeriph_Template 文件夹下面存放的是工程模板。Utilities 文件下就是官方评估板的一些对应源码。

固件库的帮助文档

根目录中还有一个 stm32f10x_stdperiph_lib_um.chm 文件,直接打开可以知道,这个文档学习过程中非常有用

STM32固件库内部结构功能简介

这里可参照视频学习:【150集-野火F103霸道/指南者视频教程】
P16 初识STM32固件库—我们认为固件库应该是什么样子的

1. 汇编编写的启动文件

startup_ stm32f10x_ hd.s:设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、对用c库函数_ main最终去到c的世界
  • 1

2. 时钟配置文件

system_ stm32f10x.c: 把外部时钟HSE=8M, 经过PLL倍频为72M。
  • 1

3. 外设相关的

stm32f10x.h: 实现了内核之外的外设的寄存器映射
XXX: GPIO、 USRAT、 I2C、 SPI、 FSMC 
stm32f10x_ xx.c: 外设的驱动函数库文件
stm32f10x__xx.h:存放外设的初始化结构体,外设初始化结构体成员的参数列表,外设固件库函数的声明
  • 1
  • 2
  • 3
  • 4

4. 内核相关的

CMSIS - Cortex 微控制器软件接口标准
core_cm3.h:实现了内核里面外设的寄存器映射
core_ _cm3.c .
NVIC(嵌套向量中断控制器)、sysTick(系统滴答定时器)
misc.h
misc.c
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

5. 头文件的配置文件

stm32f10x_ _conf.h: 头文件的头文件
/ /stm32f10x_ _usart.h
/ /stm32f10x_ _i2c.h
/ /stm32f10x_ spi.h
/ /stm32f10x_ adc.h
/ /stm32f10x_ fsmc.h
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

6. 专门存放中断服务函数的c文件

stm32f10x_ it.c
stm32f10x_ it.h
中断服务函数你可以随意放在其他的地方,并不是一定要放在stm32f10x_it.c
  • 1
  • 2
  • 3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java ee 中文乱码的问题

java ee 中文乱码的问题发生中文乱码的三种情况(一) 表单formPost 方法直接在服务器中设置request.setCharacterEncoding("utf-8");get方法 自己转码,下面是方法.public class HuanMa{public static String getUTF8(String str){String s"";try {s new St…

深度相机 物体三维重建_基于深度相机进行室内完整场景三维重建的方法及系统_2017100513665_说明书_专利查询_专利网_钻瓜专利网...

S121&#xff1a;采用Kintinuous框架&#xff0c;进行视觉里程计估计&#xff0c;得到每帧深度图像下的相机位姿信息。S122&#xff1a;根据相机位姿信息&#xff0c;将由每帧深度图像对应的点云数据反投影到初始坐标系下&#xff0c;用投影后得到的深度图像与初始帧的深度图像…

STM32F103实现点灯(固件库方式)

参考&#xff1a;stm32上实现点灯 作者&#xff1a;SKY丶丿平才 发布时间&#xff1a; 2021-03-20 16:51:06 网址&#xff1a;https://blog.csdn.net/weixin_48264057/article/details/115028724 目录前言一、硬件设计二、软件设计1.建立工程2.代码编写三、实际验证1.烧写程序2…

strtus2.3 java.lang.NoSuchFieldException: DEFAULT_PARAM

strtus2.3.15.1 的bug请下载 http://download.csdn.net/detail/livalue/6229373 或加群到群共享中下载.214579879

STM32震动感应控制继电器(使用循环VS使用外部中断EXTI和中断控制器NVIC)

参考&#xff1a;stm32的外部中断 震动感应 控制 继电器 作者&#xff1a;点灯小哥 发布时间&#xff1a; 2021-03-05 22:37:01 网址&#xff1a;https://blog.csdn.net/weixin_46016743/article/details/114417161 参考&#xff1a;STM32震动感应灯 作者&#xff1a;一只小阿大…

mysql 查找课程最高分_mysql 查询 学生id最高分的科目和日期

mysql>select*fromstudent;------------------------------|id|subject|mark|date|------------------------------|24|语文|56|2004-11||32|数学|74|2006-5||24|政治|100|2...mysql> select * from student;------------------------------| id | subject | mark | date…

我的lisp启程

Lisp语言仰慕已久&#xff0c;尤其是其作为人工智能的编程语言&#xff0c;感觉明显比其他语言高端不少&#xff0c;加之同班的同学也要自学lisp&#xff0c;就下定决心趁着在校的时候将lisp掌握。大一的时候接触python&#xff0c;觉得python语言特别难学&#xff0c;因为从来…

结构体与共用体(联合体)

参考&#xff1a;结构体与共用体 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-09 08:29:22 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107889394 参考&#xff1a;联合体&#xff08;union&#xff09;的使用方法及其本质 作者&am…

mysql 5.6.10 32_安装mysql-5.6.10-win32 解压版-略有修改

1.复制mysql-5.6.10-win32.zip到D:\app目录下.2.解压mysql-5.6.10-win32.zip3.在D:\app\mysql-5.6.10-win32下&#xff0c;复制“my-default.ini”文件&#xff0c;生成“复件 my-default.ini”文件。将“复件 my-default.ini”文件重命名成“my.ini” 。(注意&#xff1a;如果…

培养自信,笑赢未来

注&#xff1a;本文是儿子幼儿园小班第一个月中&#xff0c;老师要求每个学生家长都要交的命题作文。要求基于当前典型的421家庭中&#xff0c;如何培养孩子的自信心成文。为此&#xff0c;我作为家长第一次向老师提交了这篇作文。自信心对一个人的健康成长至关重要&#xff0c…

mysql中当前时间九点_MySQL 获得当前日期时间(以及时间的转换)

1.1 获得当前日期时间(date time)函数&#xff1a;now()除了 now() 函数能获得当前的日期时间外&#xff0c;MySQL 中还有下面的函数&#xff1a;current_timestamp() current_timestamplocaltime() localtimelocaltimestamp() localtimestamp这些日期时间函数&#xff0c;都等…

STM32串口原理、结构体、库函数、串口发送字符(串)、重定向printf串口发送、串口中断接收控制灯、接收不定长数据

参考&#xff1a;串口的结构体 重定向printf串口发送stm32等博文 作者&#xff1a;点灯小哥 发布时间&#xff1a; 2021-03-06 21:46:33 网址&#xff1a;https://blog.csdn.net/weixin_46016743/article/details/114458698 目录串口相关知识定义通信概念1.通讯结构2.电平标准3…

mysql kvdb_从MYSQL到KVDB

2016年4月10日 星期日 阴&#xff0c;雾霾惊悉新浪SAE又多收费了&#xff0c;凡是用Mysql的应用&#xff0c;每天至少要交22448颗云豆的租金。新浪为什么经常干这种事呢&#xff1f;用户会不会怀疑哪天又开始另找名目多收云豆&#xff1f;这跟食堂打菜员给人打菜一样&#xff0…

STM32通用定时器(原理、结构体、库函数、定时器中断每秒闪烁一次灯) —— 时钟源、分频值、重装载值

参考&#xff1a;stm32定时器与定时器中断 作者&#xff1a;打酱油的 发布时间&#xff1a; 2021-04-11 01:04:09 网址&#xff1a;https://blog.csdn.net/weixin_46098612/article/details/115493737 参考&#xff1a;stm32通用定时器结构体函数定时器实现led闪烁 作者&#x…

关于错误error C4430 error C2365 error C2078 error C2440 error C2143的处理。

关于错误error C4430 error C2365 error C2078 error C2440 error C2143的处理。 楼主在公司接手了一段代码。编译的时候发现一个很奇怪的问题&#xff0c;就是获取最新代码的时候能编译通过&#xff0c;然后下次就编译不通过了&#xff0c;提示如下错误。 后来发现问题出在std…

返回json数据

拦截器的配置&#xff0c;导致只能返回boolean类型的数据&#xff0c;那么要让前端知道在哪里被拦截了&#xff0c;拦截了什么&#xff0c;这就要用到json数据&#xff0c;返回相应的数据,package com.sysh.web.interceptor;/** * Created by sjy Cotter on 2018/7/24. */impor…

STM32端口复用和端口重映射

参考&#xff1a;stm32 端口复用和重映射 作者&#xff1a;点灯小哥 发布时间&#xff1a; 2021-03-09 13:49:19 网址&#xff1a;https://blog.csdn.net/weixin_46016743/article/details/114581032 目录端口复用1.什么是端口复用2. 如何配置端口复用(以PA9、PA10串口为例)端口…

Scala学习:Curry化的函数

2019独角兽企业重金招聘Python工程师标准>>> 在第1章&#xff0c;我们说过Scala允许你创建新的“感觉像是原生语言支持”的控制抽象。尽管到目前你已经看到的例子都的确是控制抽象&#xff0c;不过任何人都不会 误以为它们是原生语言支持的。为了搞明白如何让控制抽…

js 获取session_Python实战案例:这是你见过的最详细的JS加密登录某博

0x00 抓包分析简单的搜索之后发现&#xff0c;很多参数都是登陆上面这个请求返回的值&#xff0c;这个请求在输入完账号光标到达密码框时就会生成!0x01 加密逻辑分析搜索su可以很快找到加密的位置&#xff0c;上图看到e.su和e.sp都是由sinaSSOEncoder这个函数生成的&#xff0c…

Maven镜像源

Maven仓库镜像 修改Maven setting.xml文件 在 标签内添加以下镜像。 注意&#xff1a;如果构建错误&#xff0c;请根据错误信息&#xff0c;调整镜像位置 <mirror> <id>repo2</id> <mirrorOf>central</mirrorOf> <name>Human Readable …