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

目录

  • 简介
  • 工程目录
  • 1、misc.c/h
  • 2、startup_stm32f10x_hd.s
  • 3、system_stm32f10x.c/h
  • 5、stm32f10x_conf.h
  • 6、stm32f10x_it.c/h
  • 7、core_cm3.c/h
  • 8、stm32f10x.h
  • 9、stm32f10x_xx.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/.hstm32f10x_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   PROCEXPORT  Reset_Handler             [WEAK]IMPORT  __mainIMPORT  SystemInitLDR     R0, =SystemInitBLX     R0               LDR     R0, =__mainBX      R0ENDP

此段代码的作用是在系统复位后引导进入 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:存放外设的初始化结构体,外设初始化结构体成员的参数列表、外设固件库函数的声明

参考文章:1、2、3、4


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

  1. STM32 HAL库 .c/.h 文件介绍

    HAL库中各个文件的介绍: startup_stm32l475xx.s 启动文件的主要作用是进行RAM中堆.栈内存的分配和初始化,中断向量表及中断函数的定义等,进行完这一系列工作后执行系统复位从而跳转 ...

  2. Git学习笔记一--创建版本库、添加文件、提交文件等

    Git,是Linus花了两周时间用C写的一个分布式版本控制系统.牛该怎么定义? 其实,很多人都不care谁写了Git,只在乎它是免费而且好用的!So do I! 下面开始我们的学习: 1.Git安装( ...

  3. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  4. python3第三方库手册_python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑...

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件? 当我们点开下载页时, 一 ...

  5. Makefile学习笔记07|编译静态库并通过ifeq语句

    Makefile学习笔记07|编译静态库并通过ifeq语句   希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢.   这里是目录   本篇与上一篇有较多联系,有兴趣的可以先看上一 ...

  6. STM32CUBEMX入门学习笔记3:HAL库以及STM32CUBE相关资料

    STM32CUBEMX入门学习笔记3:HAL库以及STM32CUBE相关资料 微雪课堂:http://www.waveshare.net/study/article-629-1.html 之前的正点原 ...

  7. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  8. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  9. 梓益C语言学习笔记之链表&动态内存&文件

    梓益C语言学习笔记之链表&动态内存&文件 一.定义: 链表是一种物理存储上非连续,通过指针链接次序,实现的一种线性存储结构. 二.特点: 链表由一系列节点(链表中每一个元素称为节点)组 ...

最新文章

  1. Java内存模型(Java Memory Model,JMM)
  2. 如何发布Node模块到NPM社区
  3. ssh linux免密登录。。。。生产共钥到另一台主机
  4. 黑马程序员pink老师前端入门教程,零基础必看的JavaScript基础语法视频教程(jQuery1)
  5. 阿里1682亿背后的协同研发云——云效正式商业化
  6. 认证鉴权与API权限控制在微服务架构中的设计与实现(一)
  7. 前端学习(4):chome浏览器
  8. 糖尿病监测中国际通用的“金标准”
  9. uboot在s3c2440上的移植(1)
  10. 接口测试基础与工具(一)
  11. C++ vs ini GetPrivateProfileInt的使用和说明;带一个实例
  12. C#局域网桌面共享软件制作(二)
  13. 西电网络攻防大赛--渗透测试第一题
  14. 用Java输出正方形,长方形
  15. 清华大学计算机刘旭鑫,助学服务 | 走近广东狮子会客家希望班高考“学霸”刘旭鑫、程春花同学...
  16. IN和AdaIN原理与代码实现
  17. 英伟达 Magic3D:一句话生成3D模型,分辨率清晰8倍,速度快2倍,编辑文本还可直接修改...
  18. c++之STl容器-string
  19. Android P系统设置之默认打开定位开关(默认使用位置服务)
  20. java des解密乱码_des解密不完整,前面几位是乱码的解决办法

热门文章

  1. “Mac应用”已损坏,无法打开解决办法
  2. 华米科技直面未来:用技术和战略抓住真正大机会
  3. Ubuntu通过docker部署分布式版本控制GitLab(一)
  4. Python turtle库图形绘制——毛笔简笔画和平鸽
  5. ISP_反马赛克_色彩差值_通过RGB生成RAW类图
  6. 收藏:上海常用投诉电话
  7. 机器学习中标称型数据和数值型数据的区别
  8. SVN错误:local unversioned, incoming file add upon update
  9. 华为孟晚舟:预计2030年人工智能算力将增长10倍|北京青年报
  10. 五、redis原理之sort set底层数据结构