STM32固件库中的变量类型

固态函数库定义了 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 模式会增大代码的尺寸,降低代码的运行效率。因此,我们强烈建议仅仅在除错的时候使用相应代码,在最终的应用程序中,删除它们。

扫描二维码关注公众号,回复: 10866704 查看本文章

在这里插入图片描述

发布了178 篇原创文章 · 获赞 774 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/qq_45172832/article/details/105569939