学习笔记7-STM32官方库.c/.h文件功能(汇总)

主要针对一些使用较多、但本人并不十分清楚其作用的stm32官方.c/.h文件进行系统的梳理。贴上官网标准库下载地址(操作如下图),或是直接下载这个附件在这里插入图片描述

简介

首先要搞清楚文件之间的关系。上图。

在这里插入图片描述
打开固件库文件。Libraries 文件夹下面有CMSISSTM32F1xx_StdPeriph_Driver 两个目录,这两个目录包含固件库核心的所有子文件夹和文件。
Libraries
1)CMSIS存放的是符合CMSIS规范的文件。包括STM32F1核内外设访问层代码,DSP 软件库,RTOS API,以及 STM32F1 片上外设访问层代码等。
2)STM32F1xx_StdPeriph_Driver放的是 STM32F1 标准外设固件库源码文件和对应的头文件。inc 目录存放的是 stm32f1xx_ppp.h 头文件,无需改动。src 目录下面放的是 stm32f1xx_ppp.c 格式的固件库源码文件。每一个.c 文件和一个相应的.h 文件对应,每个外设对应一组文件。
***Project ***
1)STM32F1xx_StdPeriph_Examples 文件夹下面存放的的 ST 官方提供的固件实例源码,日后开发可修改这个官方提供的实例来快速驱动自己的外设。
2)STM32F1xx_StdPeriph_Template 文件夹下面存放的是工程模板。
Utilities
存放官方评估板的对应源码。

CMSIS共三层:核内外设访问层Core Peripheral Access Layer(CPAL),中间件访问层Middleware Access Layer(MWAL),设备访问层Device Peripheral Access Layer(DPAL)。
CPAL用于访问内核的寄存器和组件,如NVIC,调试系统等。
MWAL用于对中间件的访问。
DPAL用于定义一些硬件寄存器的地址和一些外设访问函数。由芯片制造商实现。
CPAL层的实现——Core_cm3.c文件,DPAL层的实现——system_stm32f10x.c文件

STM32全部的标准外设名称如下表所示。在这里插入图片描述

工程目录

比较喜欢这样建工程

1、STARTUP----启动文件
			startup_stm32f10x_hd.s
2、CMSIS------CMSIS标准文件
			core_cm3.h			      内核功能定义
			system_stm32f1xx.c		  系统,c文件
			system_stm32f1xx.h		  系统.h文件
			stm32f10x.h			      头文件
3、FWLIB------库文件
			misc.c/.h
			stm32f10x_rcc.c/.h		库函数源文件及对应头文件	
			stm32f10x_gpio.c/.h
			....
4、HARDWARE---外设文件
			oled、key文件...
5、SYSTEM-----系统文件
			位带操作函数sys文件、延时函数delay文件、串口操作函数usart文件...
6、USER-------用户文件
			main.c		              主源文件
			stm32f1xx_it.c		      中断源文件
			stm32f1xx_it.h		      中断.h文件
			XXX		                  工程文件

1、misc.c/h

一些版本的库函数中没有单独对于NVIC的外设驱动,而是放在了misc.c ,以替代原stm32f10x_nvic.c。
定义了中断优先级分组以及 Systick 定时器相关的函数。

.c路径:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src

2、startup_stm32f10x_hd.s

不同Flash容量不同启动文件(见下)。作用:设置堆栈、PC指针、初始化中断向量表、配置系统时钟等。
在这里插入图片描述启动文件要引导进入main 函数。Reset_Handler 中断函数是唯一实现了的中断处理函数,其他的中断函数基本都是死循环。Reset_handler 在系统启动的时候会调用。

; Reset handler
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                IMPORT  SystemInit
                LDR     R0, =SystemInit
                BLX     R0               
                LDR     R0, =__main
                BX      R0
                ENDP

此段代码的作用是在系统复位后引导进入 main 函数,同时在进入 main 函数之前,首先要调用 SystemInit()系统初始化函数。

.c路径:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm

3、system_stm32f10x.c/h

初始化时钟的频率、系统时钟,设置中断向量表的基地址和偏移地址。(这里有一个非常重要的SystemInit( )函数申明,在系统启动时都会调用,以设置系统的整个系统和总线时钟)
HSE=8M,经过PLL倍频为72M。

.c路径:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

5、stm32f10x_conf.h

相当于包含了所有的ST的3.5库的头文件,用户在上层调用时只需要打开这个文件的注释即可。实际使用中,会根据不同项目做改动(可注释掉不需用到的文件)。
在这里插入图片描述
stm32f10x.h头文件中包含了stm32f10x_conf.h 。

.c路径:STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template

6、stm32f10x_it.c/h

相当于所有中断函数入口,stm32f103的中断入口名称都固定,方便移植。事实上,用户也可以把各自的中断函数放在各自的模块中而不使用该文件,效果相同。实际使用会根据不同项目做改动。
.c路径:STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template

7、core_cm3.c/h

由ARM 公司提供。是CMSIS的核心文件,提供进入 M3 内核接口,实现了内核里面外设的寄存器映射。不需要修改这个文件。

1、NVIC相关的变量和函数。
中断向量的使能 中断向量的禁止 中断向量的挂起 清除挂起的中断 设置中断的优先级 读取中断的优先级
2、systick定时器的配置,static __INLINE uint32_t SysTick_Config(uint32_t ticks);用来使能中断、开启systick定时器。

.c路径:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport

8、stm32f10x.h

十分重要的文件!主要功能:

  1. 定义各种中断向量表的顺序
  2. 定义数据类型
  3. 定义MCU外设相关的结构体
  4. 定义外设在FLASH中的地址
  5. 进行外设寄存器的位定义

实现了内核以外的外设的寄存器映射(映射到存储区),相当于51单片机中的<reg51.h>。

typedef struct
{
  __IO uint32_t CRL;
  __IO uint32_t CRH;
  __IO uint32_t IDR;
  __IO uint32_t ODR;
  __IO uint32_t BSRR;
   __IO uint32_t BRR;
  __IO uint32_t LCKR;
} GPIO_TypeDef;

//外设别名区的基地址
#define PERIPH_BASE         ((uint32_t)0x40000000) 
//APB2外设总线上寄存器的基地址,GPIO挂在APB2总线上
#define APB2PERIPH_BASE     (PERIPH_BASE + 0x10000) 
// GPIO外设的地址
#define GPIOA_BASE          (APB2PERIPH_BASE + 0x0800)
// 将外设地址强制转化为结构体的指针,然后就可以通过指针GPIOx区访问某个端口中的寄存器
#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)

.c路径:STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x

9、stm32f10x_xx.c/.h

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

参考文章:1234


  • 13
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
文件包含调用=../../hackable/uploads/phpinfo.png时出现乱码,可能是因为服务器没有正确解析该文件文件包含调用功能通常用于在代码中引用其他文件的内容,但如果服务器没有正确解析文件类型,就会出现乱码的情况。 根据引用中的描述,可以尝试将文件后缀名改为png,以绕过后台的文件类型检测。但是,即使文件上传成功,也可能无法执行其中的代码。这是因为服务器通常只会解析被认为是图像文件的内容,而不会将其作为可执行的php代码来执行。 引用中提到,后台代码对文件扩展名进行了控制,只允许上传以.jpg、.jpeg和.png结尾的文件。如果文件的扩展名不符合这些要求,服务器可能会拒绝解析文件,导致无法正常执行其中的代码。 因此,在调用=../../hackable/uploads/phpinfo.png时出现乱码的情况下,很可能是由于服务器没有正确解析该文件的原因。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【笔记】网易微专业-Web安全工程师-04.WEB安全实战-6.文件上传](https://blog.csdn.net/weixin_30649641/article/details/98816761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChristianLuu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值