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,一经查实,立即删除!

相关文章

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…

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;一只小阿大…

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

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

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…

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…

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…

STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值

参考&#xff1a;stm32 定时器输出PWM原理及工作原理控制舵机 作者&#xff1a;点灯小哥 发布时间&#xff1a; 2021-03-09 23:17:52 网址&#xff1a;https://blog.csdn.net/weixin_46016743/article/details/114606662 参考&#xff1a;stm32之pwm输出 作者&#xff1a;打酱油…

STM32系统定时器SysTick(只能向下递减)延时闪烁灯

参考&#xff1a;stm32 系统定时器 SysTick 作者&#xff1a;点灯小哥 发布时间&#xff1a; 2021-03-10 13:46:00 网址&#xff1a;https://blog.csdn.net/weixin_46016743/article/details/114633245 参考&#xff1a;stm32之系统定时器 作者&#xff1a;打酱油的&#xff1b…

WMS学习笔记:1.尝试加载WMS

1.首先找一个可用的WMS栅格地图服务&#xff1a;http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi 获取GetCapabilities&#xff1a; http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi?serviceWMS&requestGetCapabilities 2.在ArcGIS中添加GIS空间服务 2.在ArcC…

mysqli 扩展_MySQLi的优势

1. 功能增加了2&#xff0c;效率大大增加(以后的PHP项目改成mysqli)3&#xff0c;更稳定mysqli使用面向对象技术&#xff0c;但也支持过程化的使用方式mysqli扩展中给我提供了三个类&#xff1a;1. mysqli和连接有关的类2. mysqli_result表达了对数据库的查询所返回的结果集。 …

STM32F4开发板硬件简介

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

演示:EIGRP非等价负载均衡(故障分析与解决篇)

演示&#xff1a;EIGRP非等价负载均衡的故障分析与排除故障背景&#xff1a;在如下图14.20所示的网络环境&#xff0c;工程师完成了环境中所有路由器的接口地址配置有EIGRP动态路由协议的启动&#xff0c;目前每台EIGRP路由器邻居关系正常&#xff0c;路由学习正常&#xff0c;…

STM32超声波模块测距串口输出/通用定时器中断并输出PWM控制舵机/系统定时器延时

参考&#xff1a;stm32 超声波模块 原理 实现测距 舵机使用 作者&#xff1a;点灯小哥 发布时间&#xff1a; 2021-03-10 19:37:16 网址&#xff1a;https://blog.csdn.net/weixin_46016743/article/details/114643703 目录效果展示超声波传感器原理超声波测距编程步骤代码编写…

STM32F103五分钟入门系列(二)GPIO的七大寄存器+GPIOx_LCKR作用和配置

摘自&#xff1a;STM32F103五分钟入门系列&#xff08;二&#xff09;GPIO的七大寄存器GPIOx_LCKR作用和配置 作者&#xff1a;自信且爱笑‘ 发布时间&#xff1a; 2021-05-01 12:08:32 网址&#xff1a;https://blog.csdn.net/Curnane0_0/article/details/116276876?spm1001.…

STM32使用IIC总线通讯协议在OLED屏幕上显示字符串、汉字、图像(硬件IIC)

参考&#xff1a;基于STM32-Oled&#xff08;IIC&#xff09;的使用 作者&#xff1a;奋斗的小殷 发布时间&#xff1a; 2021-05-07 13:09:26 网址&#xff1a;https://blog.csdn.net/boybs/article/details/116465668 目录IIC总线简介IIC协议简介IIC总线系统结构IIC总线物理层…

推送公司今日菜单内容到手机

此文已由作者张耕源授权网易云社区发布。欢迎访问网易云社区&#xff0c;了解更多网易技术产品运营经验。自从公司的易信公众服务号有了查询今日菜单的功能&#xff0c;自己慢慢养成了每次去吃饭前查一 下各个窗口的菜谱&#xff0c;再决定去哪吃饭的习惯。不过这个功能使用的越…

Android开发中如何创建自定义对话框

背景&#xff1a; 无论是Android&#xff0c;还是其他什么平台&#xff0c;对话框的主要形式都是弹出&#xff0c;或者我们可以说是一个在当前活动中打开的提示&#xff0c;来执行一些操作或实现一些功能。 你可以用一个对话框来问用户以确认一个行动&#xff0c;向用户通告一个…