嵌入式--stm32固件库

合集下载

STM32固件库使用手册

STM32固件库使用手册

STM32固件库使用手册随着嵌入式系统在各个领域的越来越广泛的应用,各种芯片和处理器的类型也逐渐增多。

在这些芯片中,ST公司的STM32系列尤其受到了大量开发者们的追捧,其功能强大、性能优越、可编程性高等优点使得其成为了嵌入式系统设计的首选。

在STM32系列芯片中,固件库是其重要的组成部分,提供了独立的硬件抽象层和应用程序接口。

这些功能丰富的API库可用于快速搭建程序架构,以及简便地实现一些常见的操作。

节省开发人员大量的开发时间。

对于初学者,欲了解STM32芯片开发的话,学习STM32固件库的使用是第一步,因此在这里我将分享一些该库的基础内容。

一、固件库的启用在使用STM32固件库之前,我们需要先了解如何启用它。

首先,在安装Keil或IAR等IDE环境后,我们需要将官方提供的固件库下载到本地,并将其解压。

解压后,将库文件夹中的 inc 和src 文件夹添加至Keil或IAR的相关项目目录中,从而ermöglichen 制定了。

接下来,在IDE环境中选择对应的芯片,我们需要设置相关的固件库路径。

具体来说,我们打开Keil或IAR的属性管理器,设置 C/C++ -> Directories 中的 Include Paths 为stm32f10x_stdPeriph_driver/inc,设置配置管理器中的包含路径为上述inc文件夹的全路径。

这样就可以启用了 STM32 固件库,开始进行我们的嵌入式系统开发。

二、基础应用程序在信息时代的今天,眼前各种各样的计算机系统和程序都涌现在眼前。

但是无论是最基础的窗口显示,还是复杂的人脸识别技术,都需要一些基本的芯片和系统支持,而 STM32 芯片就是这一系统之一。

其基础应用程序包括了:GPIO 端口配置:GPIO(PIN)模式配置、输出配置、输入配置。

其中GPIO(PIN)模式配置是对GPIO端口输出模式进行设置,包括推挽、开漏等多种模式,GPIO口的作用是用于输入/输出操作。

嵌入式技术应用项目式教程(STM32版)教学课件(共31单元)03STM32开发环境搭建

嵌入式技术应用项目式教程(STM32版)教学课件(共31单元)03STM32开发环境搭建
• ST是最早推出固件库配置寄存器方案的公司之一,在其他 厂商还在使用传统的纯手工写代码配置寄存器的时候,ST 的标准固件库(Standard Firmware Library)横空出世。 直接使用函数对器件进行配置的方式一经上市就广受开发 人员好评。这也是STM32能够迅速发展壮大的一个重要原 因。
开发环境选择
• STM32F103支持多种IDE
– Keil MDK
• 优点:编程界面友好、操作方便、实用简单、资料多等 • 缺点:商用软件需付费
– STM32CubeIDE
• 优点:官方软件、界面友好、代码补全、操作简单等 • 缺点:基于eclipse,对电脑硬件要求较高
– Microsoft Visual Code & gcc-arm-none-eabi
• 优点:开源免费 • 缺点:搭建困难,需要一定的基础
– ……
开发环境选择
• 本着易用的思路,选择keil MDK作为首选开发工具。烧录 工具选择ST官方推出的ST-Link(如下右图)。
关于固件库
• 由于STM32功能强,片上资源丰富,因此必然导致配置寄 存器数量多,配置难度大。从而希望寻求一种简单的配置 寄存器的方法。
STM32开发环境搭建
什么是开发环境?
• 在做开发时需要用到的指定软、硬件,以及对应的系统以 及应用程序工具等,这个整体就是开发环境。
• 简单的说:就是用什么写程序,用什么编译程序,用什么 通过什么方式将编译好的程序烧录到微控制器。
• 随着开发软件的不断发展,将多种开发工具集成到一个软 件中的集成开发环境(Integrated Development Environment ,DE)逐渐成为开发人员的首选。
关于固件库

嵌入式系统——基于Keil5的STM32固件库寄存器编程实现流水灯

嵌入式系统——基于Keil5的STM32固件库寄存器编程实现流水灯

嵌⼊式系统——基于Keil5的STM32固件库寄存器编程实现流⽔灯//PF9-LED0,PF10-LED1//PF13-LED2,PF14-LED3#define rRCCAHB1CLKEN *((volatile unsigned long *) 0x40023830)#define rGPIOF_MODER *((volatile unsigned long *) 0x40021400)#define rGPIOE_MODER *((volatile unsigned long *) 0x40021000)#define rGPIOF_OTYPER *((volatile unsigned long *) 0x40021404)#define rGPIOE_OTYPER *((volatile unsigned long *) 0x40021004)#define rGPIOF_OSPEEDR *((volatile unsigned long *) 0x40021408)#define rGPIOE_OSPEEDR *((volatile unsigned long *) 0x40021008)#define rGPIOF_PUPDR *((volatile unsigned long *) 0x4002140C)#define rGPIOE_PUPDR *((volatile unsigned long *) 0x4002100C)#define rGPIOF_ODR *((volatile unsigned long *) 0x40021414)#define rGPIOE_ODR *((volatile unsigned long *) 0x40021014)#define time 0x300000#define on 1#define off 0void led_init(){//GPIOE -- rRCCAHB1CLKEN[4] GPIOF -- rRCCAHB1CLKEN[5]rRCCAHB1CLKEN |= (1<<4)|(1<<5);//MODER-OUT--01 PF9,PF10 [21:18]<------- 0101unsigned long r_value;r_value = rGPIOF_MODER;//readr_value &= ~(0xf << 18);//clearr_value |= (1 << 18)|(1 << 20);rGPIOF_MODER = r_value;//write//MODER-OUT--01 PF13,PF14 [29:26]<------- 0101r_value = rGPIOE_MODER;//readr_value &= ~(0xf << 26);//clearr_value |= (1 << 26)|(1 << 28);rGPIOE_MODER = r_value;//write//OTYPER-PP--0 PF9,PF10 [10:9]<--------00r_value = rGPIOF_OTYPER;//readr_value &= ~(0x3 << 9);//clearrGPIOF_OTYPER = r_value;//write//OTYPER-PP--0 PF13,PF14 [14:13]<--------00r_value = rGPIOE_OTYPER;//readr_value &= ~(0x3 << 13);//clearrGPIOE_OTYPER = r_value;//write//OSPEEDR- PF9,PF10 [21:18]<-------1010r_value = rGPIOF_OSPEEDR;//readr_value &= ~(0xf << 18);//clearr_value |= (1 << 19)|(1 << 21);rGPIOF_OSPEEDR = r_value;//write//OSPEEDR- PF13,PF14 [29:26]<-------1010r_value = rGPIOE_OSPEEDR;//readr_value &= ~(0xf << 26);//clearr_value |= (1 << 27)|(1 << 29);rGPIOE_OSPEEDR = r_value;//write//PUPDR PF9,PF10 [21:18]<--------0000 r_value = rGPIOF_PUPDR;//readr_value &= ~(0xf << 18);//clearrGPIOF_PUPDR = r_value;//write//PUPDR PF13,PF14 [29:26]<--------0000 r_value = rGPIOE_PUPDR;//readr_value &= ~(0xf << 26);//clearrGPIOE_PUPDR = r_value;//write//ODR PF9,PF10 [10:9]<-------11r_value = rGPIOF_ODR;//readr_value |= (1<<9)|(1<<10);//clearrGPIOF_ODR = r_value;//write//ODR PF13,PF14 [14:13]<-------11r_value = rGPIOE_ODR;//readr_value |= (1<<13)|(1<<14);//clearrGPIOE_ODR = r_value;//write}void led0_ctr(int is_on){unsigned long r_value;r_value = rGPIOF_ODR;r_value |= (1<<9);//clearif(is_on) r_value &= ~(1<<9);rGPIOF_ODR = r_value;}void led1_ctr(int is_on){unsigned long r_value;r_value = rGPIOF_ODR;r_value |= (1<<10);//clearif(is_on) r_value &= ~(1<<10);rGPIOF_ODR = r_value;}void led2_ctr(int is_on){unsigned long r_value;r_value = rGPIOE_ODR;r_value |= (1<<13);//clearif(is_on) r_value &= ~(1<<13);rGPIOE_ODR = r_value;}void led3_ctr(int is_on){unsigned long r_value;r_value = rGPIOE_ODR;r_value |= (1<<14);//clearif(is_on) r_value &= ~(1<<14);rGPIOE_ODR = r_value;}void ledAll_ctr1(int flag){unsigned long r_value;if(flag == 0){//LED0 off, LED1 off, LED2 off, LED3 offled0_ctr(off);led1_ctr(off);led2_ctr(off);led3_ctr(off);}if(flag == 1){//LED0 on, LED1 off, LED2 off, LED3 offled0_ctr(on);led1_ctr(off);led2_ctr(off);led3_ctr(off);}else if(flag == 2){//LED0 on, LED1 on, LED2 off, LED3 off led0_ctr(on);led1_ctr(on);led2_ctr(off);led3_ctr(off);}else if(flag == 3){//LED0 on, LED1 on, LED2 on, LED3 off led0_ctr(on);led1_ctr(on);led2_ctr(on);led3_ctr(off);}else if(flag == 4){//LED0 on, LED1 on, LED2 on, LED3 on led0_ctr(on);led1_ctr(on);led2_ctr(on);led3_ctr(on);}}void delay(int v){while(v--);}int main(){led_init();unsigned int flag = 0;while(1){for (int i=0;i<5;i++){ledAll_ctr1(i);delay(time);}for (int i=3;i>=0;i--){ledAll_ctr1(i);delay(time);}}}。

STM32 固件库的使用

STM32 固件库的使用

2012-03-14 10:40iar for stm32 固件库的学习笔记系统、源程序文件和头文件命名都以“stm32f10x-”作为开头寄存器作为常量处理外设函数的命名以外设的缩写加下划线开头每个单词的开头字母大写每个函数名只有一个下划线分隔外设缩写和函数名的其他部分ppp_Init :::根据PPP_InitTypeDef中指定的参数,初始化外设PPP。

PPP_DeInit::::复位外设PPP的所有寄存器至缺省值PPP_StructInit :::其功能为通过设置PPP_InitTypeDef结构中的各种参数来定义外设的功能PPP_Cmd:::使能或失能外设PPPPPP_ITConfig:::为使能或者失能来自外设PPP某中断源PPP_DMAConfig:::失能或者使能外设PPP的DMA接口用以配置外设功能的函数总是以字符串“Config”结尾PPP_GetFlagStatus:::检查外设PPP某标志位被设置与否PPP_ClearFlag:::清楚外设PPP标志位PPP_GetITStatus:::判断来自外设PPP的中断发生与否PPP_ClearITPendingBit:::清除外设PPP中断待处理标志位typedef signed long s32;typedef signed short s16;typedef signed char s8;typedef signed long const sc32; /* Read Only */typedef signed short const sc16; /* Read Only */typedef signed char const sc8; /* Read Only */typedef volatile signed long vs32;typedef volatile signed short vs16;typedef volatile signed char vs8;typedef volatile signed long const vsc32; /* Read Only */ typedef volatile signed short const vsc16; /* Read Only */ typedef volatile signed char const vsc8; /* Read Only */ typedef unsigned long u32;typedef unsigned short u16;typedef unsigned char u8;typedef unsigned long const uc32; /* Read Only */typedef unsigned short const uc16; /* Read Only */typedef unsigned char const uc8; /* Read Only */typedef volatile unsigned long vu32;typedef volatile unsigned short vu16;typedef volatile unsigned char vu8;typedef volatile unsigned long const vuc32; /* Read Only */ typedef volatile unsigned short const vuc16; /* Read Only */ typedef volatile unsigned char const vuc8; /* Read Only */stm32f10x_type.h文件中布尔型变量typedef enum{FALSE = 0,TRUE = !FALSE} bool;标志位状态类型 SET & RESETtypedef enum{RESET = 0,SET = !RESET} FlagStatus;功能状态类型 ENABLE&DISABLEtypedef enum{DISABLE = 0,ENABLE = !DISABLE} FunctionalState;错误状态类型 SUCCESS or ERRORtypedef enum{ERROR = 0,SUCCESS = !ERROR} ErrorStatus;stm32f10x_map.h文件包含了所有外设控制寄存器的结构,下例为SPI寄存器结构的声明:/*------------------ Serial Peripheral Interface ----------------*/ typedef struct{vu16 CR1;u16 RESERVED0;vu16 CR2;u16 RESERVED1;vu16 SR;u16 RESERVED2;vu16 DR;u16 RESERVED3;vu16 CRCPR;u16 RESERVED4;vu16 RXCRCR;u16 RESERVED5;vu16 TXCRCR;u16 RESERVED6;} SPI_TypeDef;RESERVEDi(i为一个整数索引值)表示被保留区域stm32f10x_map.h函数包含了所有的外设声明,下例为spi外设的声明:#ifndef EXT#Define EXT extern#endif...#define PERIPH_BASE ((u32)0x40000000)#define APB1PERIPH_BASE PERIPH_BASE#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000).../* SPI2 Base Address definition*/#define SPI2_BASE (APB1PERIPH_BASE + 0x3800).../* SPI2 peripheral declaration*/#ifndef DEBUG...#ifdef _SPI2#define SPI2 ((SPI_TypeDef *) SPI2_BASE)#endif /*_SPI2 */...#else /* DEBUG */...#ifdef _SPI2EXT SPI_TypeDef *SPI2;#endif /*_SPI2 */...#endif /* DEBUG */如果用户希望使用外设SPI,那么必须在文件STM32f10x_conf.h中定义_SPI标签例如:#define _SPI#define _SPI1#define _SPI2每个外设都有若干寄存器专门分配给标志位。

STM32固件库详解

STM32固件库详解

STM32固件库详解1.1 基于标准外设库的软件开发1.1.2 使用标准外设库开发的优势简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。

标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC等等的所有标准外设。

对应的C源代码只是用了最基本的C编程的知识,所有代码经过严格测试,易于理解和使用,并且配有完整的文档,非常方便进行二次开发和应用。

1.1.3 STM32F10XXX标准外设库结构与文件描述1. 标准外设库的文件结构在上一小节中已经介绍了使用标准外设库的开发的优势,因此对标准外设库的熟悉程度直接影响到程序的编写,下面让我们来认识一下STM32F10XXX的标准外设库。

STM32F10XXX的标准外设库经历众多的更新目前已经更新到最新的3.5版本,开发环境中自带的标准外设库为2.0.3版本,本书中以比较稳定而且较新的V3.4版本为基础介绍标准外设库的结构。

可以从ST的官方网站下载到各种版本的标准外设库,首先看一下3.4版本标准外设库的文件结构,如图5-3所示。

3.0以上版本的文件结构大致相同,每个版本可能略有调整。

标准外设库的第一部分是CMSIS 和STM32F10x_StdPeriph_Driver,CMSIS 是独立于供应商的Cortex-M 处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M 上操作系统的移植难度,并减少了新入门的微控制器开发者的学习曲线和新产品的上市时间。

STM32F10x_StdPeriph_Driver则包括了分别对应包括了所有外设对应驱动函数,这些驱动函数均使用C语言编写,并提供了统一的易于调用的函数接口,供开发者使用。

Project文件夹中则包括了ST官方的所有例程和基于不同编译器的项目模板,这些例程是学习和使用STM32的重要参考。

嵌入式课程设计报告stm32

嵌入式课程设计报告stm32

嵌入式技术与应用课程设计报告题目STM32I2C固件库分析与应用学院专业班级姓名学号指导教师年月日教师评语:总分:教师签名:目录1 I2C接口1.1介绍1.2主要特点1.3概述1.4功能描述1.4.1I2C从模式1.4.2I2C主模式1.4.3错误条件1.4.4SDA/SCL线控制1.4.5SMBus1.4.6DMA请求1.4.7包错误校验(PEC)1.5 中断请求1.6 内部集成电路(I2C)1.6.1 I2C寄存器结构1.6.2 I2C库函数1.6.2.1 函数I2C_DeInit .1.6.2.2 函数I2C_ Init1.6.2.3 函数I2C_ StructInit1.6.2.4 函数I2C_ Cmd1.6.2.5 函数I2C_ DMACmd1.6.2.6 函数I2C_ DMALastTransferCmd1.6.2.7 函数I2C_ GenerateSTART1.6.2.8 函数I2C_ GenerateSTOP1.6.2.9 函数I2C_ AcknowledgeConfig1.6.2.10 函数I2C_ OwnAddress2Config1.6.2.11 函数I2C_ DualAddressCmd1.6.2.12 函数I2C_ GeneralCallCmd1.6.2.13 函数I2C_ ITConfig1.6.2.14 函数I2C_ SendData1.6.2.15 函数I2C_ ReceiveData1.6.2.16 函数I2C_ Send7bitAddress1.6.2.17 函数I2C_ ReadRegister1.6.2.18 函数I2C_ SoftwareResetCmd1.6.2.19 函数I2C_ SMBusAlertConfig1.6.2.20 函数I2C_ TransmitPEC1.6.2.21 函数I2C_ PECPositionConfig1.6.2.22 函数I2C_ CalculatePEC1.6.2.23 函数I2C_ GetPEC1.6.2.24 函数I2C_ ARPCmd1.6.2.25 函数I2C_ StretchClockCmd1.6.2.26 函数I2C_ FastModeDutyCycleConfig1.6.2.27 函数I2C_ GetLastEvent1.6.2.29 函数I2C_ GetFlagStatus1.6.2.30 函数I2C_ ClearFlag1.6.2.31 函数I2C_ GetITStatus1.6.2.32 函数I2C_ ClearITPendingBi1 2C接口1.1 介绍I2C 总线接口连接微控制器和串行I2C 总线。

MDK中使用STM32官方固件库

MDK中使用STM32官方固件库
首先STM32 官方固件库在Keil 中的位置是:.h 文件在
\Keil\ARM\INC\ST\STM32F10x
.c 文件在\Keil\ARM\RV31\LIB\ST\STM32F10x
要使用官方固件库,首先要在MDK 的工程建立以后将需要用到的相应的.c 文件复制到工程下,例如在工程目录下新建一个FWLib 的文件夹,然后复制到这里。

STM32 官方固件库的结构如下:
在stm32f10x_conf.h 中类似如下的定义:#define _SPI2#define _SPI3
在stm32f10x_map.h 中
#ifdef _SPI2#define SPI2((SPI_TypeDef *) SPI2_BASE)#endif
#ifdef _SPI3#define SPI3((SPI_TypeDef *) SPI3_BASE)#endif
就是说只有在stm32f10x_conf.h 中定义了外设的标签(如_SPI2),才能访问SPI2 的寄存器。

因此用户希望访问某外设,必须在stm32f10x_conf.h 中定义标签。

tips:感谢大家的阅读,本文由我司收集整编。

仅供参阅!。

stm32标准库

stm32标准库STM32标准库是针对ST公司推出的STM32系列单片机而设计的一套软件开发工具,它提供了一系列的库函数,方便开发者对STM32单片机进行快速的开发和应用。

本文将对STM32标准库进行详细介绍,包括其特点、使用方法以及应用案例。

STM32标准库的特点。

STM32标准库是ST公司针对其STM32系列单片机提供的一套软件开发工具,其特点主要包括以下几点:1. 全面性,STM32标准库涵盖了STM32系列单片机的各种功能模块,包括GPIO、USART、SPI、I2C、定时器、PWM等,能够满足开发者在各种应用场景下的需求。

2. 易用性,STM32标准库提供了丰富的库函数,开发者可以直接调用这些函数来实现对单片机的控制和应用,无需过多关注底层的硬件细节,大大简化了开发流程。

3. 灵活性,STM32标准库的设计考虑了各种应用场景下的需求,提供了多种配置选项和参数设置接口,能够满足不同开发者的个性化需求。

使用STM32标准库的方法。

使用STM32标准库进行开发主要包括以下几个步骤:1. 环境搭建,首先需要在开发环境中配置好STM32标准库的相关文件和工具,包括库文件、编译工具链等。

2. 库函数调用,在编写应用程序时,开发者可以直接调用STM32标准库中提供的各种库函数,来实现对单片机的控制和应用。

3. 参数配置,在调用库函数时,开发者可以根据具体的应用需求进行参数的配置和设置,以实现个性化的功能实现。

4. 编译下载,在完成应用程序的编写后,需要将程序编译生成可执行文件,并下载到目标单片机中进行调试和运行。

STM32标准库的应用案例。

STM32标准库广泛应用于各种领域的嵌入式系统开发中,例如工业控制、智能家居、汽车电子、医疗设备等。

下面以一个简单的LED闪烁程序为例,介绍STM32标准库的应用方法:```c。

#include "stm32f10x.h"void Delay(__IO uint32_t nCount) {。

STM32固件库使用手册【中文】

每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用 API (application programming interface 应用编程界面)驱动,API 对该驱动程序的结构,函数和参数名称都进行 了标准化。
所有的驱动源代码都符合“Strict ANSI-C”标准(项目于范例文件符合扩充 ANSI-C 标准)。我们已经把驱动 源代码文档化,他们同时兼容 MISRA-C 2004 标准(根据需要,我们可以提供兼容矩阵)。由于整个固态 函数库按照“Strict ANSI-C”标准编写,它不受不同开发环境的影响。仅对话启动文件取决于开发环境。
1.3.1 变量 ................................................................................................................................................ 28 1.3.2 布尔型 ............................................................................................................................................ 28 1.3.3 标志位状态类型 ........................................................................................................................... 29 1.3.4 功能状态类型 ...............................................

《嵌入式系统》课程实验报告-stm32单片机gpio程序开发

华南理工大学 《嵌入式系统》课程实验报告-STM32 单片机 GPIO 程序开发
实验概述
【实验目的及要求】 实验目的: 1. 掌握 STM32 单片机输入输出接口程序开发 2. 掌握用寄存器开发 STM32 单片机程序 3. 掌握用库函数开发 STM32 单片机程序 实验要求: 1. 完成实验要求中提到要完成的所有内容,完成代码并提交主要代码。 2. 分析寄存器和库函数编程的优势和劣势,你喜欢用哪种方式。 3. 对每行主要代码要进行注释,说明其功能。 实验内容:
1.熟悉 TEB-CM5000 嵌入式单片机实验系统上的 LED 灯电路和单独按钮电路。
2.学习并掌握寄存器版本、库函数版本相关的实例程序,主要学习实例 stm32referencesrcforch5 目录下的,LED、LEDLib、KEY_LED 和 KEY_LEDlib 四 个程序。
3.利用寄存器位操作模式、库函数分别开发出 USER2(PD3)按钮控制 LD5(PF7)亮灭。具体功能:USER2(PD3)按钮按下时,LD5 灯闪烁;当 USER2(PD3) 按钮弹开时,LD5 灯停止闪烁。 4.实现利用寄存器位操作模式、库函数分别开发出: 当每次 USER2(PD3)按钮 按下时,LD5 灯只闪烁一次。 【实验环境】 1. TEB-CM5000 嵌入式单片机实验系统 2. MDK4.12 嵌入式软件开发环境
2.当每次 USER2(PD3)按钮按下时,LD5 灯只闪烁一次。
(1)寄存器位操作模式 循环判断 PD3 的状态,并执行对应操作(点亮或熄灭灯)
(3) 库函数
循环判断 PD3 的状态,并执行对应操作(点亮或熄灭灯)
小结
1. 只闪烁一次跟一直闪烁的区别主要在于 Flag 值。 在只闪烁一次的程序中, 设置 flag 值作为标志,灯亮以后改变 flag 值的状态,flag 的状态改变灯的 状态就不再继续。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/* #include "stm32f10x_bkp.h" */

/* #include "stm32f10x_can.h" */ 系统时钟在“system_stm32f10x.c”同样通过注释的方 式来配置


已经配置了系统的主要外部参数,这些参数主要是 通过更改相关的宏定义来实现的,有些开发环境, 例如Keil支持在软件设置中加入全局宏定义,因此 像芯片系列定义,是否使用固件库定义等也可以通 过软件添加来实现。 完成了主要参数配置以后就可以进行程序的开发了, 标准外设库开发就可以使用标准外设库中提供的方 便的API函数进行相应的功能设计了。
操作语句 P0=0x11; GPIOx->BRR = 0x0011;
操作名称 51开发操作寄存器 Stm32开发操作寄存器
Stm32库函数
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { GPIOx->BRR = GPIO_Pin; }
灵活的静态存储器控制器
通用输入输出 I2C接口 独立看门狗 电源/功耗控制 复位与时钟控制器 实时时钟 SDIO接口 串行外设接口 定时器 通用同步/异步收发器
WWDG
窗口看门狗




首先新建一个项目并设置工具链对应的启动文件,可以使用标准外设库 中提供的模板,也可以自己根据自己的需求新建。标准外设库中已经提 供了不同工具链对应的文件,位于 STM32F10x_StdPeriph_Lib_V3.4.0\Libraries\CMSIS\CM3\DeviceS upport\ST\STM32F10x\startup目录下。 其次按照使用产品的具体型号选择具体的启动文件,加入工程。文件主 要按照使用产品的容量进行区分,根据产品容量进行选择即可。每个文 件的具体含义可以在“stm32f10x.h”文件中找到对应的说明 “stm32f10x.h”是整个标准外设库的入口文件,这个文件包含了 STM32F10x全系列所有外设寄存器的定义(寄存器的基地址和布局)、 位定义、中断向量表、存储空间的地址映射等。为了是这个文件适用于 不同系列的产品,程序中是通过宏定义来实现不同产品的匹配的 #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) /* #define STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low density devices */
(3) 外设访问函数:该层也由芯 片厂商负责实现,主要是提供访 问片上外设的访问函数,这一部 分是可选的。 (2) 片上外设访问层:负责对硬 件寄存器地址以及外设访问接口 进行定义。该层可调用CPAL 层 提供的接口函数同时根据设备特 性对异常向量表进行扩展,以处 理相应外设的中断请求。
(1) 核内外设访问层:该层由 ARM 负责实现。包括对寄存器名 称、地址的定义,对核寄存器、 NVIC、调试子系统的访问接口定 义以及对特殊用途寄存器的访问 接口定义。该层定义的接口函数 均是可重入的。
Documen CMSIS文档 tation
缩写 ADC BKP CAN CRC DAC DBGMCU DMA EXTI FLASH
外设/单元 模数转换器 备份寄存器 控制器局域网模块 CRC计算单元 数模转换器 调试支持 直接内存存取控制器 外部中断事件控制器 闪存存储器
FSMC
GPIO I2C IWDG PWR RCC RTC SDIO SPI TIM USART


如果去掉/*#define USE_STDPERIPH_DRIVER*/的注 释,则是使用标准外设库进行开发,用户需要使用在文 件“stm32f10x_conf.h”中,选择要用的外设,外设同 样是通过注释/去掉注释的方式来选择。 /* Uncomment the line below to enable peripheral header file inclusion */ #include "stm32f10x_adc.h"
CMSIS 通过以上三个部分实现了: a) 定义访问外设寄存器和异常向量的通用方法; b) 定义核内外设的寄存器名称和核异常向量的名称; c) 为RTOS 核定义与设备独立的接口,包括Debug 通道。


我们在使用 STM32 芯片的时候首先要进行系统初始化, CMSIS 规范就规定,系统初始化函数名字必须为SystemInit, 所以各个芯片公司写自己的库函数的时候就必须用 SystemInit 对系统进行初始化。 CMSIS 还对各个外设驱动 文件的文件名字规范化,以及函数名字规范化等等一系列规 定。
ProeSupport
core_cm3.h core_cm3.c stm32f10x.h
CMSIS 的 Cortex-M3 内核设备访问层头 文 件 , 提 供 进 入 M3 内 核 接 口
CM3
系统寄存器定义申明以及包装内存操 作 设置系统以及总线时钟,SystemInit system_stm32f10x.h 函数,系统启动的时候都会调用,用 system_stm32f10x.c 来设置系统的整个时钟系统 编译器启动代码,不同容量的芯片启 startup_stm32f10x_Xd.s 动文件不一样 通过更改包含的外设头文件来选择固 DeviceSupport 件库所使用的外设,在新建程序和进 stm32f10x_conf.h 行功能变更之前应当首先修改对应的 配置。 用户可以相应的加入自己的中断程序 的代码,对于指向同一个中断向量的 stm32f10x_it.h 多个不同中断请求,用户可以通过判 stm32f10x_it.c 断外设的中断标志位来确定准确的中 断源,执行相应的中断服务函数。

其实一句话就可以概括: 固件库就是函数的集合; 固件库函数的作用是: 向下负责与寄存器直接打交道, 向上提供用户函数调用的接口( API)。


但是固件库不是万能的,您如果想要把 STM32 学 透,光读 STM32 固件库是远远不够的。你还是要 了解一下 STM32 的原理,而这些原理了解了,你 在进行固件库开发过程中才可能得心应手游刃 有余。 E.g
_htmresc Libraries
本文件夹包含了所有的html页面资源 CMSIS 见表 标准外设库驱动头文件 标准外设库驱动源文件
STM32F10x_Std inc Periph_Driver src
Examples 标准外设库驱动的完整例程 KEIL RVMDK 的项目模板示 例 Raisonance RIDE 的 项 目 模 Template RIDE 板示例 IAR EWARM 的项目模板示 EWARM 例 STM3210- 本文件夹包含了用于 STM3210B-EVAL EVAL 和STM3210E-EVAL评估板的专用驱动 MDK-ARM
报告人:徐倩 康利利 学号:2014552007 2014552012
1.
STM32标准外设库概述 2. STM32 固件库与 CMSIS 标准 3.STM32固件库包结构 4.STM32使用步骤简介



本质:一个固件函数包 组成:程序、数据结构和宏,包括了微控制器所有外设的性能特 征。还包括每一个外设的驱动描述和应用实例,为开发者访问底 层硬件提供了一个中间API。每个外设驱动都由一组函数组成,这 组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API 对该驱动程序的结构,函数和参数名称都进行了标准化。 优点:a、通过使用固件函数库,无需深入掌握底层硬件细节,开 发者就可以轻松应用每一个外设; b、使用固态函数库可以大大减少用户的程序编写时间,进 而降低开发成本。 ST公司2007年10月发布了V1.0版本的固件库,MDK ARM3.22 之前的版本均支持该库。2008年6月发布了V2.0版的固件库,从 2008年9月推出的MDK ARM3.23版本至今均使用V2.0版本的固 件库。V3.0以后的版本相对之前的版本改动较大,本书使用目前 较新的V3.4版本。
相关文档
最新文档