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

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

一、固件库文件分析

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 标准架构上。

目录
相关文章
|
5月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
428 2
|
4月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
694 0
|
5月前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
503 4
|
5月前
|
传感器
【经典案例】STM32F407使用HAL库配置I2C详解
STM32F407是一个强大的微控制器,广泛应用于嵌入式系统中。在许多应用中,我们需要使用I2C总线来与传感器、EEPROM、显示屏等外设进行通信。本文将详细介绍如何使用STM32 HAL库来配置和使用I2C接口。
674 2
|
5月前
|
存储 数据采集 数据安全/隐私保护
使用STM32F103读取TF卡并模拟U盘:使用标准库实现
通过以上步骤,你可以实现用STM32F103将TF卡内容变成U盘进行读取。这种功能在数据采集、便携式存储设备等应用中非常有用。如果你有更多的需求,可以进一步扩展此项目,例如添加文件管理功能、加密存储等。希望这篇博客能帮到你,如果有任何问题,欢迎在评论区留言讨论!
228 1
|
5月前
|
开发者
【经典案例】使用HAL库配置STM32F407的SPI外设
在嵌入式系统开发中,STM32F407是一款广泛应用的微控制器,而SPI(Serial Peripheral Interface)是一种常用的通信接口。本文将详细介绍如何使用STM32的硬件抽象层(HAL)库配置STM32F407的SPI外设,并提供完整的代码示例。
553 1
|
4月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
156 0
|
6月前
|
传感器 存储 缓存
|
6月前
|
缓存 网络协议 算法
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)