STM32F4标准外设固件库文件关系图
- 格式:docx
- 大小:374.21 KB
- 文档页数:2
stm32标准外设库使用详解分类:stm32 2011-07-17 10:57 2233人阅读评论(11) 收藏举报转载请注明出处:/lbl1234下载代码stm32标准外设库是stm32全系列芯片的外设驱动,有了它可以大大加速我们开发stm32。
首先从st公司的网站下载最新的stm32标准外设库,写本文时最新的版本是V3.5.0。
解压该zip文件,得到如下文件夹和文件STM32F10x_StdPeriph_Lib_V3.5.0\_htmrescLibrariesProjectUtilitiesRelease_Notes.htmlstm32f10x_stdperiph_lib_um.chm其中Libraries包含库的源代码,Project包含stm32各个外设的使用范例和一个工程模板,Utilities是使用st公司评估板的例子,stm32f10x_stdperiph_lib_um.chm教我们怎么用标准外设库。
工程目录结构既然准备使用32位单片机,应该是个不小项目,因此工程目录也应该做个规划。
这里我推荐一下我所使用的目录结构。
假设工程名字叫template,建一个名为template的文件夹,该目录下有个3个固定文件夹doc,src,include,doc用来存放工程相关的资料文件,src放源代码,在src下每个功能模块一个文件夹,include放各个模块都要使用的公共头文件。
output放编译输出文件,内含两个子文件夹obj和list。
template\docsrcincludeoutput\obj\list整理库代码由于Libraries下的CMSIS文件夹中很多代码是和编译器及芯片相关的,导致文件夹多且深度大,不利于工程维护,实际上一个项目往往是用固定的编译器和芯片,因此有必要对库进行整理。
在src下建立libstm32目录1. 把Libraries\STM32F10x_StdPeriph_Driver\下的内容拷贝到libstm32目录下2. 在libstm32目录下建立cmsis文件夹,把Libraries\CMSIS\CM3\CoreSupport\下的core_cm3.c,core_cm3.h;Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\下的stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h拷贝到cmsis文件夹中。
一、标准固件库简介本文下载的是STM32F4xx_DSP_StdPeriph_Lib_V1.5.0,其文件夹如下图所示:其中Project文件夹为各个开发环境(MDK-ARM、EWARM、TrueSTUDIO)的模板工程,Utilities文件夹为官方评估板的标准固件库应用例程,而真正的标准固件库在Libraries文件夹中。
在Libraries文件夹中:CMSIS文件夹主要包含于内核相关的文件;STM32F4xx_StdPeriph_Driver文件夹为STM32F4xx处理器外设相关的底层驱动。
以下为固件库移植时CMSIS文件夹中的重要源文件:core_cm4.h :内核功能的定义,比如NVIC相关寄存器的结构体和Systick配置。
在CMSIS/Include中core_cmFunc.h :内核核心功能接口头文件。
在CMSIS/Include中core_cmInstr.h :包含一些内核核心专用指令。
在CMSIS/Include中core_cmSimd.h :包含与编译器相关的处理。
在CMSIS/Include中stm32f4xx.h :包含了stm32f4的寄存器结构体的定义(类似于c51的reg52.h)。
在CMSIS\Device\ST\STM32F4xx\Include中system_stm32f4xx.h :system_stm32f4xx.c的头文件。
在CMSIS\Device\ST\STM32F4xx\Include中system_stm32f4xx.c :stm32f4的系统时钟配置。
在CMSIS\Device\ST\STM32F4xx\Source\Templates中startup_stm32f40_41xxx.s:启动文件:设定SP的初始值;设置PC的初始值;设置中断向量表的地址;配置时钟;设置堆栈;调用main。
这个启动文件先调用system_stm32f4xx.c里面的systeminit()在调用main()之前。
STM32固件库详解最近考试较多,教材编写暂停了一下,之前写了很多,只是每一章都感觉不是特别完整,最近把其中的部分内容贴出来一下,欢迎指正。
本文内容基于我对固件库的理解,按照便于理解的顺序进行整理介绍,部分参考了固件库的说明,但是也基本上重新表述并按照我理解的顺序进行重新编写。
我的目的很简单,很多人写教程只是告诉你怎么做,不会告诉你为什么这么做,我就尽量吧前因后果都说清楚,这是我的出发点,水平所限,难免有很大的局限性,具体不足欢迎指正。
1.1基于标准外设库的软件开发1.1.1 STM32 标准外设库概述STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。
该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。
因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。
每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。
每个器件的开发都由一个通用API (application programmi ng in terface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。
ST公司2007年10月发布了 V1.0版本的固件库,MDK ARM3.22 之前的版本均支持该库。
2008年6月发布了 V2.0版的固件库,从2008年9月推出的MDK ARM3.23 版本至今均使用V2.0版本的固件库。
V3.0以后的版本相对之前的版本改动较大,本书使用目前较新的V3.4版本。
1.1.2使用标准外设库开发的优势简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。
标准外设库覆盖了从 GPIO 到定时器,再到 CAN 、I2C、SPI、UART和ADC等等的所有标准外设。
stm32f4 标准库例程
STM32F4标准库例程是针对STMicroelectronics的STM32F4系列微控制器的软件库。
该库提供了一系列的API和函数来简化开发过程,包括GPIO、UART、SPI、I2C、ADC等常见外设的控制。
标准库例程分为两部分:库函数和示例代码。
库函数提供了一系列api和函数,可以直接在用户代码里调用来方便地控制外设。
示例代码则提供了一系列完整的项目范例,用户可以根据需要来学习和修改。
库函数包括各种外设的初始化、读写寄存器等操作。
例如,GPIO部分提供了GPIO初始化和控制函数、EXTI中断控制函数等;USART部分提供了串口初始化、发送、接收等函数;SPI部分提供了SPI初始化、配置、发送、接收等函数;ADC部分提供了ADC初始化、采样、转换等函数。
总之,这些库函数为开发者提供了许多方便和帮助。
示例代码则为用户提供了许多完整的项目实例,包括blinking LED实验、串口通信实验、SPI通信实验、I2C通信实验、ADC采样实验等。
用户可以通过学习这些示例代码,了解如何使用库函数控制外设。
总的来说,STM32F4标准库例程是STM32F4系列微控制器开发的重要工具,为用户提供了方便的API和函数,以及完整的示例代码,帮助用户更好的理解
和掌握STM32F4微控制器的开发。
STM32F4标准外设固件库⽂件关系图1、⽂件夹介绍⽹上下载STM32F4xx_DSP_StdPeriph_Lib_V1.4.0,其中Libraries⽂件夹下⾯就是固件库相关程序⽂件。
包括CMSIS和STM32F4xx_StdPeriph_Driver ⽂件夹CMSISCMSIS⽂件夹存放的是符合CMSIS规范的⼀些⽂件。
STM32F4xx_StdPeriph_Driver存放的是STM32F4xx标准外设固件库源码⽂件和对应的头⽂件。
1)main主程序中引⽤:stm32f4xx.h 头⽂件。
stm32f4xx.h 是 STM32F4 ⽚上外设访问层头⽂件。
⾮常重要。
2)stm32f4xx.h中引⽤:、system_stm32f4xx.h、core_cm4.h、stm32f4xx_conf.h3)system_stm32f4xx.h 是⽚上外设接⼊层系统头⽂件。
主要是申明设置系统及总线时钟相关的函数。
4)core_cm4.h ⽂件,这个就是 CMSIS 核⼼⽂件,提供进⼊ M4 内核接⼝,这是 ARM 公司提供,对所有CM4 内核的芯⽚都⼀样。
5)stm32f4xx_conf.h 是外设驱动配置⽂件。
包括misc.h、stm32f4xx_rcc.h和各种外设头⽂件stm32f4xx_ppp.h6)misc.c 和 misc.h 是定义中断优先级分组以及 Systick 定时器相关的函数。
7)stm32f3xx_rcc.c 和 stm32f4xx_rcc.h 是与 RCC 相关的⼀些操作函数,作⽤主要是⼀些时钟的配置和使能。
在任何⼀个 STM32 ⼯程 RCC 相关的源⽂件和头⽂件是必须添加的。
8)对于⽂件 stm32f4xx_ppp.c 和 stm32f4xx_ppp.h,这就是 stm32F4 标准外设固件库对应的源⽂件和头⽂件。
包括⼀些常⽤外设 GPIO,ADC,USART 等。
9)⽂件 Application.c 实际就是说是应⽤层代码。
STM32F4TFT-LCD一、简介:TFT-LCD即薄膜晶体管液晶显示器,依据其尺寸、分辨率和驱动芯片的不同有很多分类,下边会依据2.8寸320X240分辨率以ILI9341芯片驱动的TFT-LCD做相关介绍。
二、接口:模块采用16位并方式与外部连接,其相关接口图及信号线功能如下:CS:TFTLCD片选信号。
WR:向TFTLCD写数据。
RD:从TFTLCD读取数据。
D[15:0]:16位数据线。
RS:命令/数据标示(0,读写命令;1,读写数据)。
三、驱动时序:对于写时序:CS拉低做片选,RS表示是要写数据还是要写命令,在WR信号线的上升沿获取数据线D[0:15]上的数据,在写时序上RD 信号线总是处于高电平。
对于读时序同理。
四、驱动流程:对于LCD的驱动流程可由下图表示:首先通过LCD_RST引脚做复位,再进行初始化序列,由于本人现阶段水平有限,先不去研究相关初始化序列,所以就直接运用LCD商家给出的初始化序列代码。
无论是读写指令,都需要设置好坐标,再做出读写GRAM的相关指令。
在随后涉及到颜色数据的相关处理,下边就针对颜色数据做一下相关说明。
对于颜色的设定也有多种格式,在这里只是针对RGB565颜色格式做说明。
RGB565这样看(Red)[5位](Green)[6位](Blue)[5位],组成16位颜色深度。
五、指令:对于ILI9341的指令有很多,下边对ILI9341驱动芯片的个别指令做相关说明:1、0XD3:该指令用于读取芯片ID。
由此可以依据不同的LCD做相关初始化,做到更好的兼容。
2、OX36:存储器访问控制指令,可以在读写数据过程中控制GRAM指针的增长方向,简单说明就是控制像素的扫描方式。
3、0X2A:用于设置列地址,也就是在从左到右从上到下的扫描方式下,设置x坐标。
即用于设置x坐标的范围。
4、0X2B:与OX2A类似,该指令用于设置y坐标。
需要说明的是在OX2A和OX2B的控制下就可以在屏幕上开窗显示了。
STM32标准外设固件库文件结构及用途文件夹树图及文件作用详述stm32f10x_stdperiph_lib_V3.5.0--------------ST 公司针对STM32提供的函数接口├─Release_Notes.html -------------------------官方网页资源├─stm32f10x_stdperiph_lib_um.chm-------------库的帮助文档 ├─stm32f10x_stdperiph_lib_um.chw ├─htmresc -----------------------------------CMSIS 内核和ST 公司Logo │ ├─CMSIS_Logo_Final.jpg │ └─logo.bmp ├─Libraries ----------------------------------固件库 │ ├─CMSIS -Cortex Microcontroller Software Interface Standard(Cortex 内核软件接口标准) │ │ ├─CMSIS debug support.htm ------------官方网页资源 │ │ ├─CMSIS_changes.htm ------------------官方网页资源 │ │ ├─License.doc │ │ ├─CM3 固件库文件夹树形图│ │ │ ├─CoreSupport----为采用Cortex-M3核设计SOC的芯片商设计的芯片外设提供一个进入M3内核的接口│ │ │ │ ├─core_cm3.c│ │ │ │ └─core_cm3.h│ │ │ └─DeviceSupport│ │ │ └─ST│ │ │ └─STM32F10x│ │ │ ├─Release_Notes.html│ │ │ ├─stm32f10x.h --------------------定义寄存器的地址及使用的结构体封装│ │ │ ├─system_stm32f10x.c--------------设备外设访问层,主要配置时钟频率│ │ │ ├─system_stm32f10x.h--------------配置时钟频率相应的头文件│ │ │ └─startup--------由汇编编写的系统启动文件,不同的文件对应不同的芯片型号│ │ │ ├─arm-------ARM编译器启动文件│ │ │ │ ├─startup_stm32f10x_cl.s------cl:互联型产品,stm32f105/107系列│ │ │ │ ├─startup_stm32f10x_hd.s------hd:高密度产品,FLASH大于128│ │ │ │ ├─startup_stm32f10x_hd_vl.s---vl:超值型产品,stm32f100系列│ │ │ │ ├─startup_stm32f10x_ld.s------ld:低密度产品,FLASH小于64K│ │ │ │ ├─startup_stm32f10x_ld_vl.s│ │ │ │ ├─startup_stm32f10x_md.s------md:中等密度产品,FLASH=64 or 128 │ │ │ │ ├─startup_stm32f10x_md_vl.s│ │ │ │ └─startup_stm32f10x_xl.s----xl:超高密度(容量)产品,stm32f101/103系列│ │ │ ├─gcc_ride7………………GCC编译器启动文件│ │ │ ├─iar………………………………IAR编译器启动文件│ │ │ └─TrueSTUDIO……………TrueSTUDIO编译器启动文件│ │ └─Documentation│ │ └─CMSIS_Core.htm --------------CMSIS_Core网页资源│ └─STM32F10x_StdPeriph_Driver-----------CMSIS的设备外设函数,由stm32f10x_ppp.c或 stm32f10x_ppp.h ││文件组成,PPP表示外设名称。
1、文件夹介绍
网上下载STM32F4xx_DSP_StdPeriph_Lib_V1.4.0,其中Libraries文件夹下面就是固件库相关程序文件。
包括CMSIS和STM32F4xx_StdPeriph_Driver 文件夹
CMSIS
CMSIS文件夹存放的是符合CMSIS规范的一些文件。
STM32F4xx_StdPeriph_Driver
存放的是STM32F4xx标准外设固件库源码文件和对应的头文件。
1)main主程序中引用:stm32f4xx.h 头文件。
stm32f4xx.h 是 STM32F4 片上外设访问层头文件。
非常重要。
2)stm32f4xx.h中引用:<stdint.h> 、system_stm32f4xx.h、core_cm4.h、
stm32f4xx_conf.h
3)system_stm32f4xx.h 是片上外设接入层系统头文件。
主要是申明设置系统
及总线时钟相关的函数。
4)core_cm4.h 文件,这个就是 CMSIS 核心文件,提供进入 M4 内核接口,这
是 ARM 公司提供,对所有CM4 内核的芯片都一样。
5)stm32f4xx_conf.h 是外设驱动配置文件。
包括misc.h、stm32f4xx_rcc.h
和各种外设头文件stm32f4xx_ppp.h
6)misc.c 和 misc.h 是定义中断优先级分组以及 Systick 定时器相关的函
数。
7)stm32f3xx_rcc.c 和 stm32f4xx_rcc.h 是与 RCC 相关的一些操作函数,作
用主要是一些时钟的配置和使能。
在任何一个 STM32 工程 RCC 相关的源文件和头文件是必须添加的。
8)对于文件 stm32f4xx_ppp.c 和 stm32f4xx_ppp.h,这就是 stm32F4 标准外
设固件库对应的源文件和头文件。
包括一些常用外设 GPIO,ADC,USART 等。
9)文件 Application.c 实际就是说是应用层代码。
这个文件名称可以任意取
了。
我们工程中,直接取名为 main.c。
10)一个完整的 STM32F4 的工程中除了上面的程序文件外,还需要启动文件。
对于不同型号的 STM32F4 系列对应的启动文件也不一样。
我们的开发板是STM32F407 系列所以我们选择的启动文件为startup_stm32f40_41xxx.s。
一个完整的 STM32F4 的工程模板。