[STM32f10xxx库函数]定义、命名和编码规则

1.定义

在这里插入图片描述

2.命名规则

PPP 表示任一外设缩写,例如: ADC
系统、源程序文件和头文件命名都以“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 的函数,其功能为使能或者失能外设 PPPDMA 接口,例如: 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

3.编码规则

3.1变量

typedef signed long s32;
typedef signed short s16;
typedef signed char s8;
typedef signed long const sc32;
typedef signed short const sc16;
typedef signed char const sc8;
typedef volatile signed long vs32;
typedef volatile signed short vs16;
typedef volatile signed char vs8;
typedef volatile signed long const vsc32;
typedef volatile signed short const vsc16;
typedef volatile signed char const vsc8; 
typedef unsigned long u32;
typedef unsigned short u16;
typedef unsigned char u8;
typedef unsigned long const uc32; 
typedef unsigned short const uc16; 
typedef unsigned char const uc8;
typedef volatile unsigned long vu32;
typedef volatile unsigned short vu16;
typedef volatile unsigned char vu8;
typedef volatile unsigned long const vuc32; 
typedef volatile unsigned short const vuc16; 
typedef volatile unsigned char const vuc8; 

3.2布尔型

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

typedef enum
{
FALSE = 0,
TRUE = !FALSE
} bool;

3.3标志位状态类型

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

typedef enum
{
RESET = 0,
SET = !RESET
} FlagStatus;

3.4功能状态类型

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

typedef enum
{
DISABLE = 0,
ENABLE = !DISABLE
} FunctionalState;

3.5错误状态类型

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

typedef enum
{
ERROR = 0,
SUCCESS = !ERROR
} ErrorStatus;

3.6外设

用户可以通过指向各个外设的指针访问各外设的控制寄存器。这些指针所指向的数据结构与各个外设的控制寄存器布局一一对应。
外设控制寄存器结构
文件 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*/

1 当用户选择 DEBUG 模式,宏 assert_param 被扩展,同时运行时间检查功能也在固态函数库代码中被激活。
2 进入 DEBUG 模式会增大代码的尺寸,降低代码的运行效率。因此,我们强烈建议仅仅在除错的时候使用相应代码,在最终的应用程序中,删除它们。

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值