STM32F103标准外设库——固件库 (三)

发布时间:2024年01月16日

个人名片:

🦁作者简介:一名喜欢分享和记录学习的在校大学生
🐯个人主页:妄北y

🐧个人QQ:2061314755

🐻个人邮箱:2061314755@qq.com
🦉个人WeChat:Vir2021GKBS
🐼本文由妄北y原创,首发CSDN🎊🎊🎊
🐨座右铭:大多数人想要改造这个世界,但却罕有人想改造自己。

专栏导航:

妄北y系列专栏导航:

C/C++的基础算法:C/C++是一种常用的编程语言,可以用于实现各种算法,这里我们对一些基础算法进行了详细的介绍与分享。🎇🎇🎇

C/C++刷题库:分享一些关于编程的练习基础题,也会后续加入一系列的算法题,分享自己的解题思路和方法。🥰🥰🥰

计算机网络:对计算机网络的基础知识框架有一个简单的学习与认识,对计算机网络中常见的题型进行一个总结与归纳。🍾🍾🍾

QT基础入门学习:对QT的基础图形化页面设计进行了一个简单的学习与认识,利用QT的基础知识进行了翻金币小游戏的制作🤹🤹🤹

Linux基础编程:初步认识什么是Linux,为什么学Linux,安装环境,进行基础命令的学习,入门级的shell编程。🍻🍻🍻

Linux的系统编程+网络编程:IO编程、进程、线程、进程间通讯(包括管道、信号、信号量、共享内存等)网络编程主要就是socket,poll,epoll,以及对TCP/IP的理解,同时要学会高并发式服务器的编写。🙌🙌🙌

Linux应用开发基础开发:分享Linux的基本概念、命令行操作、文件系统、用户和权限管理等,网络编程相关知识,TCP/IP 协议、套接字(Socket)编程等,可以实现网络通信功能。💐💐💐

Linux项目开发:Linux基础知识的实践,做项目是最锻炼能力的一个学习方法,这里我们会学习到一些简单基础的项目开发与应用,而且都是毕业设计级别的哦。🤸🤸🤸


非常期待和您一起在这个小小的互联网世界里共同探索、学习和成长。💝💝💝 ?? 欢迎订阅本专栏 ???

文章介绍:

🎉本篇文章对STM32学习的相关知识进行分享!🥳🥳🥳

如果我们想要亲自完成这个函数库,工作量非常巨大。ST 公司提供的标准软件库,包含了 STM32 芯片所有寄存 器的控制操作,我们直接学习如何使用 ST 标准库,会极大地方便控制 STM32 芯片。

如果您觉得文章不错,期待你的一键三连哦,你的鼓励是我创作动力的源泉,让我们一起加油,一起奔跑,让我们顶峰相见!!!💪💪💪

🎁感谢大家点赞👍收藏?评论??

一、固件库文件分析

1.汇编编写的启动文件

????????startup_stm32f10x_hd.s:设置堆栈指针、设置pc指针、初始化中断向量表、配置系统时钟、对用C库函数_main最终去到C的世界。

2.时钟配置文件

????????system_stm32f10x.c:把外部时钟HSE=8M,经过PLL倍频为72M。

3.外设相关的文件

????????stm32f10x.h:实现了内核之外的外设的寄存器映射。

? ? ? ? xxx:GPIO、USRAT、I2c、SPI、FSMC

????????stm32f10x_xx.c:外设的驱动函数库文件?

????????stm32f10x_xx.h:存放外设的初始化结构体,外设初始化结构体成员的参数列表,外设固件库函数的声明。?

4.内核相关的文件

????????CMSIS?- Cortex微控制器软件接口标准

????????core_cm3.h:实现了内核里面的外设的寄存器映射。

????????core_cm3.c:实现内核外设的驱动固件库

????????NVIC(嵌套向量中断控制器)、SysTick(系统滴答定时器)

????????misc.h

????????misc.d

5.头文件的配置文件

stm32f10x_conf.h:头文件的头文件

stm32f10x_usart.h????????????????stm32f10x_i2c.h????????????????stm32f10x_spi.h

stm32f10x_adc.h??????????????????stm32f10x_fsmc.h? ? ? ? ? ?? stm32f10x_gpio.h
?

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

stm32f10x_it.c

stm32f10x_it.h

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

二、CMSIS 标准及库层次关系

1.库目录、文件简介

STM32F10x_StdPeriph_Lib_V3.5.0\

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

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

Utilities:包含了基于 ST 官方实验板的例程,不需要用到,略过即可。

stm32f10x_stdperiph_lib_um.chm:库帮助文档,这个很有用,不喜欢直接看源码的可以在合理查询每个外设的函数说明,非常详细。这是一个已经编译好的 HTML 文件。

在使用库开发时,我们需要把 libraries 目录下的库函数文件添加到工程中,并查阅库帮助文档来 了解 ST 提供的库函数,这个文档说明了每一个库函数的使用方法。

(1)CMSIS 文件夹

????????STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\文件夹展开内容见图 CMSIS 文件夹内容 。目 录:Libraries\CMSIS\

core_cm3?

????????在 CoreSupport 文件夹中有 core_cm3.c 和 core_cm3.h 两个文件。Core_cm3.h 头文件里面实现了内核的寄存器映射,对应外设头文件 stm32f10x.h,区别就是一个针对内核的外设,一个针对片上 (内核之外)的外设。core_cm3.c 文件实现了一下操作内核外设寄存器的函数,用的比较少。

????????我们还需要了解的是 core_cm3.h 头文件中包含了“stdint.h”这个头文件,这是一个 ANSI C 文件, 是独立于处理器之外的,就像我们熟知的 C 语言头文件“stdio.h”文件一样。位于 RVMDK 这个软件的安装目录下,主要作用是提供一些类型定义。

启动文件

????????启动文件放在 startup/arm 这个文件夹下面,这里面启动文件有很多个,不同型号的单片机用的启动文件不一样。

????????我们开发板中用的 STM32F103VET6 或者 STM32F103ZET6 的 FLASH 都是 512K,属于基本型的大容量产品,启动文件统一选择 startup_stm32f10x_hd.s。?

Stm32f10x.h

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

system_stm32f10x.c

????????system_stm32f10x.c 文件实现了 STM32 的时钟配置,操作的是片上的 RCC 这个外设。系统在上电之后,首选会执行由汇编编写的启动文件,启动文件中的复位函数中调用的 SystemInit 函数就在这个文件里面定义。调用完之后,系统的时钟就被初始化成 72M。

(2)STM32F10x_StdPeriph_Driver 文件夹

????????文件目录:Libraries\STM32F10x_StdPeriph_Driver

?????????STM32F10x_StdPeriph_Driver 文件夹下有 inc(include 的缩写)跟 src(source 的简写)这两个文件夹,这里的文件属于 CMSIS 之外的的、芯片片上外设部分src 里面是每个设备外设的驱动源程序inc 则是相对应的外设头文件。src 及 inc 文件夹是 ST 标准库的主要内容,甚至不少人直接认为 ST 标准库就是指这些文件,可见其重要性。

????????这两个文件夹中,还有一个很特别的 misc.c 文件,这个文件提供了外设对内核中的 NVIC(中断向量控制器) 的访问函数,在配置中断时,我们必须把这个文件添加到工程中。?

(3)stm32f10x_it.c、stm32f10x_conf.h 和 system_stm32f10x.c 文件

?文件目录:STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template

????????在这个文件目录下,存放了官方的一个库工程模板,我们在用库建立一个完整的工程时,还需要 添加这个目录下的 stm32f10x_it.c、stm32f10x_it.h、stm32f10x_conf.h system_stm32f10x.c 这四个文件。

stm32f10x_it.c:这个文件是专门用来编写中断服务函数的。

system_stm32f10x.c:这个文件包含了 STM32 芯片上电后初始化系统时钟、扩展外部存储器用的函数。

stm32f10x_conf.h:这个文件被包含进 stm32f10x.h 文件。

stm32f10x_conf.h 文件配置软件库

#include "stm32f10x_adc.h"
#include "stm32f10x_bkp.h"
#include "stm32f10x_can.h"
#include "stm32f10x_cec.h"
#include "stm32f10x_crc.h"
#include "stm32f10x_dac.h"
#include "stm32f10x_dbgmcu.h"
#include "stm32f10x_dma.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_flash.h"
#include "stm32f10x_fsmc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_i2c.h"
#include "stm32f10x_iwdg.h"
#include "stm32f10x_pwr.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_rtc.h"
#include "stm32f10x_sdio.h"
#include "stm32f10x_spi.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_usart.h"
#include "stm32f10x_wwdg.h"
#include "misc.h"

2.库各文件间的关系?

????????库文件是直接包含进工程即可,丝毫不用修改,而有 的文件就要我们在使用的时候根据具体的需要进行配置。接下来从整体上把握一下各个文件在 库工程中的层次或关系,这些文件对应到 CMSIS 标准架构上。

大佬觉得有用的话点个赞 👍🏻 呗。
??????本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥任务在无形中完成,价值在无形中升华,让我们一起加油吧!🌙🌙🌙

文章来源:https://blog.csdn.net/m0_63168877/article/details/135624566
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。