菜鸟初识STM32固件库文件夹

发布者:ShimmeringMoon最新更新时间:2018-09-13 来源: eefocus关键字:STM32  固件库文件夹 手机看文章 扫描二维码
随时随地手机看文章

ARM、TI、ST等公司在嵌入式学习者眼中的区别

ARM 是一个做芯片标准的公司,它负责的是芯片内核的架构设计,而 TI,ST 这样的公司,他们并不做标准,他们是芯片公司,他们是根据 ARM 公司提供的芯片内核标准设计自己的芯片。所以,任何一个做 芯片 (例如Cortex-M3),他们的内核结构都是一样的,不同的是他们的存储器容量,片上外设,IO 以及其他模块的区别。所以你会发现,不同公司设计的 芯片(例如Cortex-M3)他们的端口数量,串口数量,控制方法这些都是有区别的,这些资源他们可以根据自己的需求理念来设计。同一家公司设计的多种内核芯片(例如Cortex-M3)的片上外设也会有很大的区别.通过ARM公司的《Cortex-M3 权威指南》中的一个图来了解一下:


CMSIS 标准

ARM 公司为了能让不同的芯片公司生产的 Cortex-M3 芯片能在软件上基本兼容,和芯片生产商共同提出了一套标准 CMSIS 标准(Cortex  Microcontroller  Software  Interface  Standard )  ,翻译过来是“ARM Cortex™  微控制器软件接口标准”。 ST 官方库就是根据这套标准设计的。基于 CMSIS 应用程序基本结构:



CMSIS 分为 3 个基本功能层:

1)  核内外设访问层:ARM 公司提供的访问,定义处理器内部寄存器地址以及功能函数。
2)  中间件访问层:定义访问中间件的通用 API,也是 ARM 公司提供。
3)  外设访问层:定义硬件寄存器的地址以及外设的访问函数。
从图中可以看出, CMSIS 层在整个系统中是处于中间层,向下负责与内核和各个外设直接打交道,向上提供实时操作系统用户程序调用的函数接口。如果没有 CMSIS 标准,那么各个芯片公司就会设计自己喜欢的风格的库函数,而 CMSIS 标准就是要强制规定,芯片生产公司设计的库函数必须按照 CMSIS 这套规范来设计。


一个简单通俗的例子

我们在使用 STM32 芯片的时候首先要进行系统初始化, CMSIS 规范就规定,系统初始化函数名字必须为 SystemInit,所以各个芯片公
司写自己的库函数的时候就必须用 SystemInit 对系统进行初始化。CMSIS 还对各个外设驱动文件的文件名字规范化,以及函数名字规范化等等一系列规定。上一节讲的函数GPIO_ResetBits 这个函数名字也是不能随便定义的,是要遵循 CMSIS 规范的。至于 CMSIS 的具体内容就不必多讲了,需要了解详细的朋友可以到网上搜索资料

STM32官方固件库包的结构

官方 V3.5 版本的固件库包的目录结构:



Libraries 文件夹

有 CMSIS 和 STM32F10x_StdPeriph_Driver 两个目录,这两个目录包含 固 件 库 核 心 的 所 有 子 文 件 夹 和 文 件 。 其 中 CMSIS 目 录 下 面 是 启 动 文 件 ,STM32F10x_StdPeriph_Driver 放的是 STM32 固件库源码文件。源文件目录下面的 inc 目录存放的是 stm32f10x_xxx.h 头文件,无需改动。src 目录下面放的是 stm32f10x_xxx.c 格式的固件库源码文件。每一个.c 文件和一个相应的.h 文件对应。这里的文件也是固件库的核心文件,每个外设对应的一组文件。

Project 文件夹

有两个文件夹,顾名思义, STM32F10x_StdPeriph_Examples 文件夹下面存放的的 ST 官方提供的固件实例源码,在以后的开发过程中,可以参考修改这个官方提供的实例来快速驱动自己的外设,很多开发板的实例都参考了官方提供的例程源码,这些源码对以后的学习非常重STM32F10x_StdPeriph_Template 文件夹下面存放的是工程模板。Utilities 文件下就是官方评估板的一些对应源码。

固件库的帮助文档


根目录中还有一个 stm32f10x_stdperiph_lib_um.chm 文件,直接打开可以知道,这个文档学习过程中非常有用

关键文件介绍

提供进入 M3 内核接口文件

位于\Libraries\CMSIS\CM3\CoreSupport 目录下面的core_cm3.c 和 core_cm3.h 文件。这是 ARM 公司提供,对所有 CM3 内核的芯片都一样,你永远都不需要修改这个文件!

启动文件以及比较基础的寄存器定义以及中断向量定义的文件

位于\Libraries\CMSIS\CM3\DeviceSupport目录下有三个文件:system_stm32f10x.c,  system_stm32f10x.h 以及 stm32f10x.h 文件。

system_stm32f10x.c,  system_stm32f10x.h文件

在这对文件里面有一个非常重要的 SystemInit()函数,这个函数在我们系统启动的时候都会调用,用来设置系统的整个时钟系统。

stm32f10x.h 文件

这个文件相当重要,只要你做 STM32 开发,你几乎时刻都要查看这个文件相关的定义。这个文件打开可以看到,里面非常多的结构体以及宏定义。这个文件里面主要是系统寄存器定义申明以及包装内存操作········

启动文件

位于DeviceSupport\ST\STM32F10x \startup文件夹下,在\startup\arm 目录下,我们可以看到 8 个 startup 开头的.s 文件。这里之所以有 8 个启动文件,是因为对于不同容量的芯片启动文件不一样。对于 103 系列,主要是用其中 3 个启动文件:
startup_stm32f10x_ld.s     :  适用于小容量  产品
startup_stm32f10x_md.s  :  适用于中等容量产品
startup_stm32f10x_hd.s   :  适用于大容量产品
这里的容量是指 FLASH 的大小.判断方法如下:
小容量:FLASH≤32K
中容量:64K≤FLASH≤128K
大容量:256K≤FLASH

对于本人使用的STM32-F103-ZET06属于大容量产品,所以做工程的时候选择startup_stm32f10x_hd.s文件

启动文件作用:打开启动文件看看:启动文件主要是进行堆栈之类的初始化, 中断向量表以及中断函数定义。启动文件要引导进入 main 函数。 Reset_Handler中断函数是唯一实现了的中断处理函数,其他的中断函数基本都是死循环。   跟踪工程,会发现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

据IMPORT   __main知道,这里导入 main 函数,同时在进入 main 函数之前,且调用 SystemInit 系统初始化函数。注释:引导程序进入__main(此__main是C_Library中的函数,非main()),这里启动文件只讲到这:详细可去搜索相应型号的芯片启动文件的解析

其他几个文件 stm32f10x_it.c,stm32f10x_it.h 以及 stm32f10x_conf.h 文件

 stm32f10x_it.c、stm32f10x_it.h顾名思义这对文件是用来中断服务函数,stm32f10x_conf.h(confer:参看)文件打开可以看到一堆的#include,这里你建立工程的时候,可以注释掉一些你不用的外设头文件.


关键字:STM32  固件库文件夹 引用地址:菜鸟初识STM32固件库文件夹

上一篇:STM32固件库文件树及构成详解
下一篇:STM32固件库文件编程结构思想的理解

推荐阅读最新更新时间:2024-03-16 16:13

STM32-仿真调试时的SystemInit陷阱
我在开始STM32的仿真调试时,遇到一个问题,就是调试时程序一直停在SystemInit()中的等待晶振中,怎么也出不来。 SystemInit()前面部分的代码,都能走过,就是在执行到最后一个函数时出问题了。 最后一个函数是:SetSysClock(); 执行到下面这个循环之后,出不来了: /* Wait till HSE is ready and if Time out is reached exit */ do { HSEStatus = RCC- CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCou
[单片机]
STM32-仿真调试时的SystemInit陷阱
STM32 HAL的超全知识总结
ST 为开发者提供了非常方便的开发库:有标准外设库(SPL库)、HAL 库(Hardware Abstraction Layer,硬件抽象层库)、LL 库(Low-Layer,底层库)三种。前者是ST的老库已经停更了,后两者是ST现在主推的开发库。 相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL库是ST未来主推的库,ST新出的芯片已经没有STD库了,比如F7系列。目前,HAL库已经支持STM32全线产品。 通过文字描述可以知道HAL库的几
[单片机]
STM32单片机在KIEL4配置开发中的设置
开发环境:KIEL4,芯片STM32F103VCT6。函数库VC3.5 1.配置开发环境。 2.Option for Target,主要是C/C++和debug两个部分设置。 3.变量和函数名自动补全以及中文乱码设置。 4.逻辑分析仪。信号不存在或者不能出图形。
[单片机]
<font color='red'>STM32</font>单片机在KIEL4配置开发中的设置
STM32 模拟IIC读写24C02程序代码
引脚定义和配置: #define SCL GPIO_Pin_6 //24C02 SCL #define SDA GPIO_Pin_7 //24C02 SDA void GPIO_Configuration(void) { RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 |RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);
[单片机]
stm32主从模式定时器产生精确脉冲个数
STM32的每个定时器都可以由另一个定时器触发启动定时器一般是通过软件设置而启动,STM32的每个定时器也可以通过外部信号触发而启动,还可以通过另外一个定时器的某一个条件被触发而启动.这里所谓某一个条件可以是定时到时、定时器超时、比较成功等许多条件.这种通过一个定时器触发另一个定时器的工作方式称为定时器的同步,发出触发信号的定时器工作于主模式,接受触发信号而启动的定时器工作于从模式。 STM32 的Timer之间可以用Timer Internal Trigger联系起来。  各个Timer之间的联系可以用下表表示 实例: #include "stm32f10x.h"//定时器4主模式//PWM输出void TIM4_config
[单片机]
STM32的IIC应用详解3
这两天将STM32的IIC按照原子哥的程序,大致走了一遍,多少对IIC不是那么地陌生了,也多少有了自己的一些感悟,在这里,将这两天的学习的一个大致步骤总结下,一来可以让自己形成一个清晰地思路,二来,希望能给一些新手一点启发。 首先IIC是一种通信协议,通信方式相对比较简单,主要有两条线,SDA,SCL。SDA是串行数据线,上面走命令和数据,而SCL只是一条时钟线,其保证数据是按照时钟节拍来进行传输。IIC上面可以外挂很多的IIC芯片,每一个芯片对应着不同的地址,通过地址来将不同的芯片进行分开,保证不同芯片之间的数据传输,由于每一个芯片都是可以独立地收发,故,每一个芯片都是主机/从机。接下来,就是数据的传输过程了, 大致的一个数
[单片机]
<font color='red'>STM32</font>的IIC应用详解3
STM32电源管理—实现低功耗
一、电源管理—实现低功耗 电源对电子设备的重要性不言而喻,它是保证系统稳定运行的基础,而保证系统能稳定运行后,又有低功耗的要求。 在很多应用场合中都对电子设备的功耗要求非常苛刻,如某些传感器信息采集设备,仅靠小型的电池提供电源,要求工作长达数年之久,且期间不需要任何维护;由于智慧穿戴设备的小型化要求,电池体积不能太大导致容量也比较小,所以也很有必要从控制功耗入手,提高设备的续行时间。 因此, STM32 有专门的电源管理外设监控电源并管理设备的运行模式, 确保系统正常运行,并尽量降低器件的功耗。 默认情况下,系统复位或上电复位后,微控制器进入运行模式。在运行模式下, CPU 通过HCLK 提供时钟,并执行程序代码。系统提供了多
[单片机]
<font color='red'>STM32</font>电源管理—实现低功耗
低于一美金!32位MCU抢占8位市场
自2007年发布第一个ARM Cortex-M3架构的STM32基本型之后,意法半导体在单片机领域找到了市场大幅扩张的途径。根据iSuppli的统计资料显示,2008年意法半导体MCU收入年增长率达到38%,从2007年的第10位跃升至第五位。而今,意法半导体似乎已不满足于现有的32位产品市场份额,正逐步将STM32架构打入16位甚至8位市场应用中。 超值型STM32问世 随着客户对于计算的需求越来越高,比如家用电器,消费电子及工业控制中,8位MCU已经无法满足了,因此我们会推出在一美金以下的32位产品。 我们先来看看,这款批量售价低于1美金的STM32中,究竟有哪些特性: 整合24MH
[单片机]
低于一美金!32位MCU抢占8位市场
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • Linux内核移植
    实验步骤:(1)准备工作(2)修改顶层Makefile(3)修改falsh 分区(4)配置编译内核下面以Linux2 6 30 4内核移植到gec2440为例:一、准备 ...
  • S5PV210 PWM定时器
    第一节 S5PV210的PWM定时器S5PV210共有5个32bit的PWM定时器,其中定时器0、1、2、3有PWM功能,定时器4没有输出引脚。PWM定时器使用PCLK_PS ...
  • S5PV210 NAND Flash
    NAND Flash关于NAND FlashS5PV210的NAND Flash控制器有如下特点:1) 支持512byte,2k,4k,8k的页大小2) 通过各种软件模式来进行NAND Fl ...
  • S5PV210串口
    串口设置之输入输出字符S5PV210 UART相关说明 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来 ...
  • S5PV210按键控制LED
    原理图如图所示:查询用户手册得到:程序例子:(完整代码见“代码下载链接”)1、轮询的方式查询按键事件 *main c* 核心代码如下:while(1 ...
  • S5PV210控制蜂鸣器
  • S5PV210的启动过程
  • S5PV210点亮LED
  • S5PV210启动过程详解
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved