STM32固件库使用手册的中文翻译Word格式.docx
《STM32固件库使用手册的中文翻译Word格式.docx》由会员分享,可在线阅读,更多相关《STM32固件库使用手册的中文翻译Word格式.docx(100页珍藏版)》请在冰点文库上搜索。
外部中断事件控制器
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;
typedefvolatilesignedlongvs32;
typedefvolatilesignedshortvs16;
typedefvolatilesignedcharvs8;
typedefvolatilesignedlongconstvsc32;
typedefvolatilesignedshortconstvsc16;
typedefvolatilesignedcharconstvsc8;
typedefunsignedlongu32;
typedefunsignedshortu16;
typedefunsignedcharu8;
typedefunsignedlongconstuc32;
typedefunsignedshortconstuc16;
/*ReadOnly*/
typedefunsignedcharconstuc8;
typedefvolatileunsignedlongvu32;
typedefvolatileunsignedshortvu16;
typedefvolatileunsignedcharvu8;
typedefvolatileunsignedlongconstvuc32;
typedefvolatileunsignedshortconstvuc16;
/*ReadOnly*/
typedefvolatileunsignedcharconstvuc8;
3.2布尔型
在文件stm32f10x_type.h中,布尔形变量被定义如下:
Typedefenum
{
FALSE=0,
TRUE=!
FALSE
}bool;
3。
3标志位状态类型
h中,我们定义标志位类型(FlagStatustype)的2个可能值为“设置”与“重置”(SETorRESET).
typedefenum
RESET=0,
SET=!
RESET
}FlagStatus;
1.3.4功能状态类型
h中,我们定义功能状态类型(FunctionalStatetype)的2个可能值为“使能”与“失能”(ENABLEorDISABLE)。
DISABLE=0,
ENABLE=!
DISABLE
}FunctionalState;
5错误状态类型
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。
所有其他文件使用的通用数据类型和枚举。
-stm32f10x_map。
外设存储器映像和寄存器数据结构。
—stm32f10x_lib.h:
主头文件夹,包含了其他头文件。
—stm32f10x_ppp.h:
每个外设对应一个头文件,包含了该外设使用的函数原形,数据结构和枚举.
—cortexm3_macro。
文件cortexm3_macro。
s对应的头文件。
⏹子文件夹src包含了固件函数库所需的源文件,用户无需修改该文件夹:
—stm32f10x_ppp。
c:
每个外设对应一个源文件,包含了该外设使用的函数体。
—stm32f10x_lib。
初始化所有外设的指针。
注:
所有代码都按照StrictANSI-C标准书写,都不受不同软件开发环境的影响。
2.1.3文件夹Project
文件夹Project包含了一个标准的程序项目模板,包括库文件的编译和所有用户可修改的文件,可用以建立新的工程。
—stm32f10x_conf。
h:
项目配置头文件,默认为设置了所有的外设。
-stm32f10x_it.c:
该源文件包含了所有的中断处理程序(所有的函数体默认为空).
stm32f10x_it。
该头文件包含了所有的中断处理程序的原形.
主函数体
文件夹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
主函数体示例.
h
头文件,包含所有中断处理函数原形.
stm32f10x_it.c
外设中断函数文件.
用户可以加入自己的中断程序代码。
对于指向同一个中断向量的多个不同中断请
求,可以利用函数通过判断外设的中断标志位来确定准确的中断源。
提供了这些函数的名称。
stm32f10x_lib。
包含了所有外设的头文件的头文件.
它是唯一一个用户需要包括在自己应用中的文件,起到应用和库之间界面的作用。
stm32f10x_lib.c
Debug模式初始化文件。
它包括多个指针的定义,每个指针指向特定外设的首地址,以及在Debug模式被
使能时,被调用的函数的定义。
stm32f10x_map.h
该文件包含了存储器映像和所有寄存器物理地址的声明,既可以用于Debug模式
也可以用于release模式。
所有外设都使用该文件。
stm32f10x_type。
通用声明文件。
包含所有外设驱动使用的通用类型和常数.
stm32f10x_ppp.c
由C语言编写的外设PPP的驱动源程序文件。
stm32f10x_ppp.h
外设PPP的头文件。
包含外设PPP函数的定义,和这些函数使用的变量.
cortexm3_macro。
文件cortexm3_macro.s的头文件
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;
memberN=valN;
/*whereNisthenumberofthestructuremembers*/
以上步骤可以合并在同一行里,用以优化代码大小:
PPP_InitTypeDefPPP_InitStructure={val1,val2,.。
valN}
b)仅设置结构体中的部分成员:
这种情况下,用户应当首先调用函数PPP_SturcInit(。
)来初始化变量PPP_InitStructure,然后再修改其中需要修改的成员。
这样可以保证其他成员的值(多为缺省值)被正确填入.
PPP_StructInit(&
PPP_InitStructure);
PP_InitStructure。
memberX=valX;
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)
在外设设置完成以后,继续修改它的一些参数,可以参照如下步骤:
PPP_InitStucture.memberX=valX;
PPP_InitStructure.memberY=valY;
/*whereXandYaretheonly
membersthatuserwantstomodify*/
PPP_Init(PPP,&
2.4位段(Bit—Banding)
Cortex™-M3存储器映像包括两个位段(bit—band)区。
这两个位段区将别名存储器区中的每个字映射到位段存储器区的一个位,在别名存储区写入一个字具有对位段区的目标位执行读—改-写操作的相同效果.所有STM32F10x外设寄存器都被映射到一个位段(bit-band)区。
这个特性在各个函数中对单个比特进行置1/置0操作时被大量使用,用以减小和优化代码尺寸。
Section2。
4.1和Section2。
4.2给出了外设固件函数库中如何实现位段访问的描述.
2.4。
1映射公式
映射公式给出了别名区中的每个字是如何对应位带区的相应位的,公式如下:
bit_word_offset=(byte_