STM32固件库使用手册的中文翻译精编版.docx

上传人:b****1 文档编号:3124289 上传时间:2023-05-05 格式:DOCX 页数:100 大小:144.63KB
下载 相关 举报
STM32固件库使用手册的中文翻译精编版.docx_第1页
第1页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第2页
第2页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第3页
第3页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第4页
第4页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第5页
第5页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第6页
第6页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第7页
第7页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第8页
第8页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第9页
第9页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第10页
第10页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第11页
第11页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第12页
第12页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第13页
第13页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第14页
第14页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第15页
第15页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第16页
第16页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第17页
第17页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第18页
第18页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第19页
第19页 / 共100页
STM32固件库使用手册的中文翻译精编版.docx_第20页
第20页 / 共100页
亲,该文档总共100页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

STM32固件库使用手册的中文翻译精编版.docx

《STM32固件库使用手册的中文翻译精编版.docx》由会员分享,可在线阅读,更多相关《STM32固件库使用手册的中文翻译精编版.docx(100页珍藏版)》请在冰点文库上搜索。

STM32固件库使用手册的中文翻译精编版.docx

STM32固件库使用手册的中文翻译精编版

UM0427用户手册

32位基于ARM微控制器STM32F101xx与STM32F103xx

固件函数库

介绍

本手册介绍了32位基于ARM微控制器STM32F101xx与STM32F103xx的固件函数库。

该函数库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。

该函数库还包括每一个外设的驱动描述和应用实例。

通过使用本固件函数库,无需深入掌握细节,用户也可以轻松应用每一个外设。

因此,使用本固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。

每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。

每个器件的开发都由一个通用API(applicationprogramminginterface应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。

所有的驱动源代码都符合“StrictANSI-C”标准(项目于范例文件符合扩充ANSI-C标准)。

我们已经把驱动源代码文档化,他们同时兼容MISRA-C2004标准(根据需要,我们可以提供兼容矩阵)。

由于整个固态函数库按照“StrictANSI-C”标准编写,它不受不同开发环境的影响。

仅对话启动文件取决于开发环境。

该固态函数库通过校验所有库函数的输入值来实现实时错误检测。

该动态校验提高了软件的鲁棒性。

实时检测适合于用户应用程序的开发和调试。

但这会增加了成本,可以在最终应用程序代码中移去,以优化代码大小和执行速度。

想要了解更多细节,请参阅Section2.5。

因为该固件库是通用的,并且包括了所有外设的功能,所以应用程序代码的大小和执行速度可能不是最优的。

对大多数应用程序来说,用户可以直接使用之,对于那些在代码大小和执行速度方面有严格要求的应用程序,该固件库驱动程序可以作为如何设置外设的一份参考资料,根据实际需求对其进行调整。

此份固件库用户手册的整体架构如下:

⏹定义,文档约定和固态函数库规则。

⏹固态函数库概述(包的内容,库的架构),安装指南,库使用实例。

⏹固件库具体描述:

设置架构和每个外设的函数。

STM32F101xx和STM32F103xx在整个文档中被写作STM32F101x。

1.文档和库规范

本用户手册和固态函数库按照以下章节所描述的规范编写。

1.1缩写

Table1.本文档所有缩写定义

缩写

外设/单元

ADC

模数转换器

BKP

备份寄存器

CAN

控制器局域网模块

DMA

直接内存存取控制器

EXTI

外部中断事件控制器

FLASH

闪存存储器

GPIO

通用输入输出

I2C

内部集成电路

IWDG

独立看门狗

NVIC

嵌套中断向量列表控制器

PWR

电源/功耗控制

RCC

复位与时钟控制器

RTC

实时时钟

SPI

串行外设接口

SysTick

系统嘀嗒定时器

TIM

通用定时器

TIM1

高级控制定时器

USART

通用同步异步接收发射端

WWDG

窗口看门狗

1.2命名规则

固态函数库遵从以下命名规则:

PPP表示任一外设缩写,例如:

ADC。

更多缩写相关信息参阅章节1.1缩写。

系统、源程序文件和头文件命名都以“stm32f10x_”作为开头,例如:

stm32f10x_conf.h。

常量仅被应用于一个文件的,定义于该文件中;被应用于多个文件的,在对应头文件中定义。

所有常量都由英文字母大写书写。

寄存器作为常量处理。

他们的命名都由英文字母大写书写。

在大多数情况下,他们采用与缩写规范与本用户手册一致。

外设函数的命名以该外设的缩写加下划线为开头。

每个单词的第一个字母都由英文字母大写书写,例如:

SPI_SendData。

在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。

名为PPP_Init的函数,其功能是根据PPP_InitTypeDef中指定的参数,初始化外设PPP,例如TIM_Init.

名为PPP_DeInit的函数,其功能为复位外设PPP的所有寄存器至缺省值,例如TIM_DeInit.

名为PPP_StructInit的函数,其功能为通过设置PPP_InitTypeDef结构中的各种参数来定义外设的功能,例如:

USART_StructInit.

名为PPP_Cmd的函数,其功能为使能或者失能外设PPP,例如:

SPI_Cmd.

名为PPP_ITConfig的函数,其功能为使能或者失能来自外设PPP某中断源,例如:

RCC_ITConfig.

名为PPP_DMAConfig的函数,其功能为使能或者失能外设PPP的DMA接口,例如:

TIM1_DMAConfig.

用以配置外设功能的函数,总是以字符串“Config”结尾,例如GPIO_PinRemapConfig.

名为PPP_GetFlagStatus的函数,其功能为检查外设PPP某标志位被设置与否,例如:

I2C_GetFlagStatus.

名为PPP_ClearFlag的函数,其功能为清除外设PPP标志位,例如:

I2C_ClearFlag.

名为PPP_GetITStatus的函数,其功能为判断来自外设PPP的中断发生与否,例如:

I2C_GetITStatus.

名为PPP_ClearITPendingBit的函数,其功能为清除外设PPP中断待处理标志位,例如:

I2C_ClearITPendingBit.

1.3编码规则

本章节描述了固态函书库的编码规则。

1.3.1变量

固态函数库定义了24个变量类型,他们的类型和大小是固定的。

在文件stm32f10x_type.h中我们定义了这些变量:

typedefsignedlongs32;

typedefsignedshorts16;

typedefsignedchars8;

typedefsignedlongconstsc32;/*ReadOnly*/

typedefsignedshortconstsc16;/*ReadOnly*/

typedefsignedcharconstsc8;/*ReadOnly*/

typedefvolatilesignedlongvs32;

typedefvolatilesignedshortvs16;

typedefvolatilesignedcharvs8;

typedefvolatilesignedlongconstvsc32;/*ReadOnly*/

typedefvolatilesignedshortconstvsc16;/*ReadOnly*/

typedefvolatilesignedcharconstvsc8;/*ReadOnly*/

typedefunsignedlongu32;

typedefunsignedshortu16;

typedefunsignedcharu8;

typedefunsignedlongconstuc32;/*ReadOnly*/

typedefunsignedshortconstuc16;/*ReadOnly*/

typedefunsignedcharconstuc8;/*ReadOnly*/

typedefvolatileunsignedlongvu32;

typedefvolatileunsignedshortvu16;

typedefvolatileunsignedcharvu8;

typedefvolatileunsignedlongconstvuc32;/*ReadOnly*/

typedefvolatileunsignedshortconstvuc16;/*ReadOnly*/

typedefvolatileunsignedcharconstvuc8;/*ReadOnly*/

1.3.2布尔型

在文件stm32f10x_type.h中,布尔形变量被定义如下:

Typedefenum

{

FALSE=0,

TRUE=!

FALSE

}bool;

1.3.3标志位状态类型

在文件stm32f10x_type.h中,我们定义标志位类型(FlagStatustype)的2个可能值为“设置”与“重置”(SETorRESET)。

typedefenum

{

RESET=0,

SET=!

RESET

}FlagStatus;

1.3.4功能状态类型

在文件stm32f10x_type.h中,我们定义功能状态类型(FunctionalStatetype)的2个可能值为“使能”与“失能”(ENABLEorDISABLE)。

typedefenum

{

DISABLE=0,

ENABLE=!

DISABLE

}FunctionalState;

1.3.5错误状态类型

在文件stm32f10x_type.h中,我们错误状态类型类型(ErrorStatustype)的2个可能值为“成功”与“出错”(SUCCESSorERROR)。

Typedefenum

{

ERROR=0,

SUCCESS=!

ERROR

}ErrorStatus;

1.3.6外设

用户可以通过指向各个外设的指针访问各外设的控制寄存器。

这些指针所指向的数据结构与各个外设的控制寄存器布局一一对应。

外设控制寄存器结构

文件stm32f10x_map.h包含了所有外设控制寄存器的结构,下例为SPI寄存器结构的声明:

/*--------------------------------SerialPeripheralInterface-----------------------------*/

typedefstruct

{

vu16CR1;

u16RESERVED0;

vu16CR2;

u16RESERVED1;

vu16SR;

u16RESERVED2;

vu16DR;

u16RESERVED3;

vu16CRCPR;

u16RESERVED4;

vu16RXCRCR;

u16RESERVED5;

vu16TXCRCR;

u16RESERVED6;

}SPI_TypeDef;

寄存器命名遵循上节的寄存器缩写命名规则。

RESERVEDi(i为一个整数索引值)表示被保留区域。

外设声明

文件stm32f10x_map.h包含了所有外设的声明,下例为SPI外设的声明:

#ifndefEXT

#DefineEXTextern

#endif

......

#definePERIPH_BASE((u32)0x40000000)

#defineAPB1PERIPH_BASEPERIPH_BASE

#defineAPB2PERIPH_BASE(PERIPH_BASE+0x10000)

......

/*SPI2BaseAddressdefinition*/

#defineSPI2_BASE(APB1PERIPH_BASE+0x3800)

......

/*SPI2peripheraldeclaration*/

#ifndefDEBUG

......

#ifdef_SPI2#defineSPI2((SPI_TypeDef*)SPI2_BASE)

#endif/*_SPI2*/

......

#else/*DEBUG*/

…...

#ifdef_SPI2

EXTSPI_TypeDef*SPI2;

#endif/*_SPI2*/

…...

#endif/*DEBUG*/

如果用户希望使用外设SPI,那么必须在文件stm32f10x_conf.h中定义_SPI标签。

通过定义标签_SPIn,用户可以访问外设SPIn的寄存器。

例如,用户必须在文件stm32f10x_conf.h中定义标签_SPI2,否则是不能访问SPI2的寄存器的。

在文件stm32f10x_conf.h中,用户可以按照下例定义标签_SPI和_SPIn。

#define_SPI

#define_SPI1

#define_SPI2

每个外设都有若干寄存器专门分配给标志位。

我们按照相应的结构定义这些寄存器。

标志位的命名,同样遵循上节的外设缩写规范,以‘PPP_FLAG_’开始。

对于不同的外设,标志位都被定义在相应的文件stm32f10x_ppp.h中。

用户想要进入除错(DEBUG)模式的话,必须在文件stm32f10x_conf.h中定义标签DEBUG。

这样会在SRAM的外设结构部分创建一个指针。

因此我们可以简化除错过程,并且通过转储外设获得来获得所有寄存器的状态。

在所有情况下,SPI2都是一个指向外设SPI2首地址的指针。

变量DEBUG可以仿照下例定义:

#defineDEBUG1

可以初始化DEBUG模式与文件stm32f10x_lib.c中如下:

#ifdefDEBUG

voiddebug(void)

{

......

#ifdef_SPI2

SPI2=(SPI_TypeDef*)SPI2_BASE;

#endif/*_SPI2*/

......

}#endif/*DEBUG*/

Note:

1当用户选择DEBUG模式,宏assert_param被扩展,同时运行时间检查功能也在固态函数库代码中被激活。

2进入DEBUG模式会增大代码的尺寸,降低代码的运行效率。

因此,我们强烈建议仅仅在除错的时候使用相应代码,在最终的应用程序中,删除它们。

 

2.固件函数库

2.1压缩包描述

STM32F10x固件函数库被压缩在一个zip文件中。

解压该文件会产生一个文件夹:

STM32F10xFWLib\FWLib,包含如下所示的子文件夹:

Figure1:

固件函数库文件夹结构

2.1.1文件夹Examples

文件夹Examples,对应每一个STM32外设,都包含一个子文件夹。

这些子文件夹包含了整套文件,组成典型的例子,来示范如何使用对应外设。

这些文件有:

readme.txt:

每个例子的简单描述和使用说明。

stm32f10x_conf.h:

该头文件设置了所有使用到的外设,由不同的“DEFINE”语句组成。

stm32f10x_it.c:

该源文件包含了所有的中断处理程序(如果未使用中断,则所有的函数体都为空)。

stm32f10x.it.h:

该头文件包含了所有的中断处理程序的原形。

main.c:

例程代码。

注:

所有的例程的使用,都不受不同软件开发环境的影响。

2.1.2文件夹Library

文件夹Library包含组成固件函数库核心的所有子文件夹和文件:

⏹子文件夹inc包含了固件函数库所需的头文件,用户无需修改该文件夹:

-stm32f10x_type.h:

所有其他文件使用的通用数据类型和枚举。

-stm32f10x_map.h:

外设存储器映像和寄存器数据结构。

-stm32f10x_lib.h:

主头文件夹,包含了其他头文件。

-stm32f10x_ppp.h:

每个外设对应一个头文件,包含了该外设使用的函数原形,数据结构和枚举。

-cortexm3_macro.h:

文件cortexm3_macro.s对应的头文件。

⏹子文件夹src包含了固件函数库所需的源文件,用户无需修改该文件夹:

-stm32f10x_ppp.c:

每个外设对应一个源文件,包含了该外设使用的函数体。

-stm32f10x_lib.c:

初始化所有外设的指针。

注:

所有代码都按照StrictANSI-C标准书写,都不受不同软件开发环境的影响。

2.1.3文件夹Project

文件夹Project包含了一个标准的程序项目模板,包括库文件的编译和所有用户可修改的文件,可用以建立新的工程。

-stm32f10x_conf.h:

项目配置头文件,默认为设置了所有的外设。

-stm32f10x_it.c:

该源文件包含了所有的中断处理程序(所有的函数体默认为空)。

stm32f10x_it.h:

该头文件包含了所有的中断处理程序的原形。

main.c:

主函数体

文件夹EWARM,RVMDK,RIDE:

用于不同开发环境使用,详情查询各文件夹下的文件readme.txt。

2.2固件函数库文件描述

Table2列举和描述了固件函数库使用的所有文件。

固件函数库的体系和文件相互包括的联系表示在Figure2中。

每一个外设都有一个对应的源文件:

stm32f10x_ppp.c和一个对应的头文件:

stm32f10x_ppp.h。

文件stm32f10x_ppp.c包含了使用外设PPP所需的所有固件函数。

提供所有外设一个存储器映像文件stm32f10x_map.h。

它包含了所有寄存器的声明,既可以用于Debug模式也可以用于release模式。

头文件stm32f10x_lib.h包含了所有外设头文件的头文件。

它是唯一一个用户需要包括在自己应用中的文件,起到应用和库之间界面的作用。

文件stm32f10x_conf.h是唯一一个需要由用户修改的文件。

它作为应用和库之间的界面,指定了一系列参数。

 

Table2.固件函数库文件描述

文件名

描述

stm32f10x_conf.h

参数设置文件,起到应用和库之间界面的作用。

用户必须在运行自己的程序前修改该文件。

用户可以利用模板使能或者失能外设。

也可以修改外部晶振的参数。

也可以是用该文件在编译前使能Debug或者release模式。

main.c

主函数体示例。

stm32f10x_it.h

头文件,包含所有中断处理函数原形。

stm32f10x_it.c

外设中断函数文件。

用户可以加入自己的中断程序代码。

对于指向同一个中断向量的多个不同中断请

求,可以利用函数通过判断外设的中断标志位来确定准确的中断源。

固件函数库

提供了这些函数的名称。

stm32f10x_lib.h

包含了所有外设的头文件的头文件。

它是唯一一个用户需要包括在自己应用中的文件,起到应用和库之间界面的作用。

stm32f10x_lib.c

Debug模式初始化文件。

它包括多个指针的定义,每个指针指向特定外设的首地址,以及在Debug模式被

使能时,被调用的函数的定义。

stm32f10x_map.h

该文件包含了存储器映像和所有寄存器物理地址的声明,既可以用于Debug模式

也可以用于release模式。

所有外设都使用该文件。

stm32f10x_type.h

通用声明文件。

包含所有外设驱动使用的通用类型和常数。

stm32f10x_ppp.c

由C语言编写的外设PPP的驱动源程序文件。

stm32f10x_ppp.h

外设PPP的头文件。

包含外设PPP函数的定义,和这些函数使用的变量。

cortexm3_macro.h

文件cortexm3_macro.s的头文件

cortexm3_macro.s

Cortex-M3内核特殊指令的指令包装。

 

Figure2.固件函数库文件体系结构

2.3外设的初始化和设置

本节按步骤描述了如何初始化和设置任意外设。

这里PPP代表任意外设。

1.在主应用文件中,声明一个结构PPP_InitTypeDef,例如:

PPP_InitTypeDefPPP_InitStructure;

这里PPP_InitStructure是一个位于内存中的工作变量,用来初始化一个或者多个外设PPP。

2.为变量PPP_InitStructure的各个结构成员填入允许的值。

可以采用以下2种方式:

a)按照如下程序设置整个结构体

PPP_InitStructure.member1=val1;

PPP_InitStructure.member2=val2;

PPP_InitStructure.memberN=valN;

/*whereNisthenumberofthestructuremembers*/

以上步骤可以合并在同一行里,用以优化代码大小:

PPP_InitTypeDefPPP_InitStructure={val1,val2,..,valN}

b)仅设置结构体中的部分成员:

这种情况下,用户应当首先调用函数PPP_SturcInit(..)来初始化变量PPP_InitStructure,然后再修改其中需要修改的成员。

这样可以保证其他成员的值(多为缺省值)被正确填入。

PPP_StructInit(&PPP_InitStructure);

PP_InitStructure.memberX=valX;

PPP_InitStructure.memberY=valY;

/*whereXandYarethememberstheuserwantstoconfigure*/

3.调用函数PPP_Init(..)来初始化外设PPP。

4.在这一步,外设PPP已被初始化。

可以调用函数PPP_Cmd(..)来使能之。

PPP_Cmd(PPP,ENABLE);

可以通过调用一系列函数来使用外设。

每个外设都拥有各自的功能函数。

更多细节参阅Section3外设固件概述。

注:

1.在设置一个外设前,必须调用以下一个函数来使能它的时钟:

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_PPPx,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_PPPx,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_PPPx,ENABLE);

2.可以调用函数PPP_Deinit(..)来把外设PPP的所有寄存器复位为缺省值:

PPP_DeInit(PPP)

3.在外设设置完成以后,继续修改它的一些参数,可以参照如下步骤:

PPP_InitStucture.memberX=valX;

PPP_InitStructure.memberY=valY;/*whereXandYaretheonly

membersthatuserwantstomodify*/

PPP_Init(PPP,&PPP_InitStructure);

2.4位段(Bit-Banding)

Cortex™-M3存储器映像包括两个位段(bit-band)区。

这两个位段区将别名存储器区中的每个字映射到位段存储器区的一个位,在别名存储区写入一个字具有对位段区的目标位执行读-改-写操作的相同效果。

所有STM32F10x外设寄存器都被映射到一个位段(bit-band)区。

这个特性在各个函数中对单个比特进行置1/置0操作时被大量使用,用以减小和优化代码尺寸。

Section2.4.1和Section2.4.2给出了外设固件函数库中如何实现位段访问的描述。

2.4.1映射公式

映射公式给出了别名区中的每个字是如何对应位带区的相应位的,公式

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2