固态函数库定义了 24 个变量类型,他们的类型和大小是固定的。在文件 stm32f10x_type.h 中我们定义了这
<>变量:
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;
<>标志位状态类型
在文件 stm32f10x_type.h 中,我们定义标志位类型( FlagStatus type)的 2 个可能值为“设置”与“重置”( SET
or RESET)。
typedef enum { RESET = 0, SET = !RESET } FlagStatus;
<>功能状态类型
在文件 stm32f10x_type.h 中,我们定义功能状态类型( FunctionalState type)的 2 个可能值为“使能”与“失
能”( ENABLE or DISABLE)。
typedef enum { DISABLE = 0, ENABLE = !DISABLE } FunctionalState;
<>错误状态类型
在文件 stm32f10x_type.h 中,我们错误状态类型类型( ErrorStatus type)的 2 个可能值为“成功”与“出错”
( SUCCESS or ERROR)。
typedef 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
_SPI2 EXT SPI_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 可以仿照下例定义:
#define DEBUG 1
可以初始化 DEBUG 模式与文件 stm32f10x_lib.c 中如下:
#ifdef DEBUG void debug(void) { ... #ifdef _SPI2 SPI2 = (SPI_TypeDef *)
SPI2_BASE; #endif /*_SPI2 */ ... } #endif /* DEBUG*/
Note: 1 当用户选择 DEBUG 模式,宏 assert_param 被扩展,同时运行时间检查功能也在固态函数库代码中被激活。
Note: 2 进入 DEBUG 模式会增大代码的尺寸,降低代码的运行效率。因此,我们强烈建议仅仅在除错的时候使用相应代码,在最终的应用程序中,删除它们。