Stm32 标准固件库结构组成 | 学习笔记

简介: 快速学习 Stm32 标准固件库结构组成

开发者学堂课程【嵌入式之 RFID 开发与应用2020版:Stm32 标准固件库结构组成】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/665/detail/11146


Stm32 标准固件库结构组成

使用固件库,主要是用 library 里面,看第一个 /cmsic 。/cmsic 是叫做硬件抽象层,这一层,里面包含系统启动,或者说要做开发,所依赖的基本的配置,尤其是在做操作系统的移植的时候,一定要看清几个文件,跟操作系统对接。

除了 /cmsic 还有 /driver 里面开发过程当中用到的,如果要跑例子,库里面至少添加三个文件。即:

CMSIS:

Cortex Microcontroller Software Interface Standard,主要是 Cortex-M 系列处理器与供应商无关的硬件抽象层, oS 建立在 CMSIS 之上

降低了在 Cortex-M 系列处理器上操作系统的移植难度,简化了软件重复,标准化了软件接口

CMSIS 主要包含:

stm32f10x.h

core_cm3.c

system_stm32f10x.c

startup_stm32f10X_xx.S

三个文件来自于 libraries/CMSIC/CM3/CoreSupport 里面第一个文件是的 core.CM3.c 针对寄存器的配置,包括终端优先挤压启动模式,内嵌汇编的操作接口,里面主要是有内嵌汇编,因为c不是汇编,但内嵌汇编很重要。

另外一个文件 libraries/CMSIC/CM3/DeviceSupport/ST/STM32F10X/ 里面system- STM32F10X,这个文件主要是系统启动的时候的初始化工作,尤其是的时钟的配置,要用到这个文件,整个系统任何一个模块要运行的第一步就是要对时钟进行配置。

第三个文件是汇编的文件,最后一个文件没有明确的名儿,因为得根据的芯片的型号,比如一般是选择 startup_stm32f10x_md.s。这个是启动文件,是纯汇编,

启动文件后面又专门讲,针对于不同的处理器,选 MD 第一个是因为用的是STM32f1103,并且是中容量,只有 64k, 选 MD 因为容量包括型号共同的决定,针对中容量进行初始化。

image.png

把这三个必须的文件添加到的工程当中,剩下的就是 Driver 里面的东西根据实际情况添加,里面的文件,每个都有作用。

image.png

比如第一个文件 misc.c,这个文件主要是跟终端的配置,包括终端的管理,相关的接口在这里,如果不用终端,当然就可以不用什么加载库。stm32f10x_bkp.c 是的计算机备份相关的,stm32f10x_can.c 是看总线,stm32f10x_bkp.c 是芯片调试的支持, stm32f10x_dma.c 直接内存访问,stm32f10x_exti.c 外部终端,stm32f10x_flash.c 是 flash,需要有东西, flash 不仅可以存放 code,写的代码,有需要长永久保存,如断电了还希望存在,不需要单独添加 eeprom,直接存 flash 就可以了。但是 eeprom 的存储时间会比 flash 存储时间更久,更可靠。如果没有严格,就比如做了个闹钟设的值肯定存在里面,万一放电了之后闹钟没了。

比较灵活的静态存储控制器,不仅可以接存储器,接 eeprom 接 RAM 等等,还可以接 LCD 就是支持 fmac 的屏幕。

stm32f10x_gpio.c 的使用比较多,i2c 独立看门狗,如果说在创建一个工程,三个文件是必须添加的,第四个必须添加的文件就是 stm32f10x_rcc.c。涉及到复位、时钟配置相关的,只要用任何一个模块,哪怕用 gpio 点个灯,也要用到始终,因为 gpio 也要开始终。

stm32f10x_sdio.c,现在比较少,是一种 mmc 的一种接口,有的 WiFi 用的 sdio 接口,WiFi 模块、sd 卡用的这种接口,spi、应试器。串口看门狗,这就是所有的库,用到哪些就添加哪些。

固件库,使用的时候都会看到官方会给如下图:

image.png

application 就是自己写的应用程序,比如写的 application,写了一个文件叫main.c 在里面完成一个主事件循环。

文件要跑起来,还得建立在前面三个文件的基础之上。三个文件,还有 Rcc 必须要包含,除非不用硬件,这就是第四个,main.c 应该是作为的第五个文件。

还有很多的库怎么使用的,建议包含 stm32f10x.h 头文件,并不是 Driver 里面的,放到了是硬件抽象层里面,库里面没有,官方建议包含这个文件。因为文件里面包含了很多文件,把这些寄存器结构体看宏定义列了一堆的宏,计算器地址,把这个地址全部定义成宏。用芯片,必须要用计算器,必须要有这些宏定义,必须要有这些结构体。

所以 stm32f10x.h 头文件是除刚才那几个重要的点 c 以外,必须要包含的这么一个条文件。这个头文件里面不仅提供了刚才讲的众多宏定义结构体寄存器的内存的映射,还提供 stm32f10x_conf.h 文件,

文件里面又间接的包含了其他十几二十个驱动,所以就不需要在的应用程序里面包含那一堆的驱动,包含这一个文件就好了,叫做 stm32f10x_conf.h,搜索到要想被包含进来,要把这个宏给定义了。

下图是 stm32F407xx 标准库结构图:

image.png

407 的标准构建结构图跟 103 是一样的,因为现在用 stm32 就是用 f1 系列的 F4 系列的,因为 1 是基本型,4 是增强。

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