打印

ST标准外设库以及函数的命名规则

[复制链接]
2216|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sunmeat|  楼主 | 2014-9-25 09:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
标准外设库遵从以下命名规则 PPP表示任一外设缩写,例如:ADC。源程序文件和头文件命名都以“stm32f10x_”作为开头,例如:stm32f10x_conf.h。常量仅被应用于一个文件的,定义于该文件中;被应用于多个文件的,在对应头文件中定义。所有常量都由英文字母大写书写。寄存器作为常量处理。他们的命名都由英文字母大写书写。在大多数情况下,他们采用与缩写规范一致。外设函数的命名以该外设的缩写加下划线为开头。每个单词的第一个字母都由英文字母大写书写,例如:SPI_SendData。在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。
沙发
sunmeat|  楼主 | 2014-9-25 09:21 | 只看该作者
对于函数命名,总的来说有以下规则:
l 名为PPP_Init的函数,其功能是根据PPP_InitTypeDef中指定的参数,初始化外设PPP,例如TIM_Init.

使用特权

评论回复
板凳
sunmeat|  楼主 | 2014-9-25 09:22 | 只看该作者
l 名为PPP_DeInit的函数,其功能为复位外设PPP的所有寄存器至缺省值,例如TIM_DeInit.

使用特权

评论回复
地板
sunmeat|  楼主 | 2014-9-25 09:22 | 只看该作者
l 名为PPP_Init的函数,其功能为通过设置PPP_InitTypeDef 结构中的各种参数来定义外设的功能,例如:USART_Init .

使用特权

评论回复
5
sunmeat|  楼主 | 2014-9-25 09:23 | 只看该作者
l 名为PPP_Cmd的函数,其功能为使能或者失能外设PPP,例如: SPI_Cmd.

使用特权

评论回复
6
sunmeat|  楼主 | 2014-9-25 09:23 | 只看该作者
l 名为PPP_ITConfig的函数,其功能为使能或者失能来自外设PPP某中断源,例如: RCC_ITConfig.

使用特权

评论回复
7
sunmeat|  楼主 | 2014-9-25 09:23 | 只看该作者
l 名为PPP_DMAConfig的函数,其功能为使能或者失能外设PPP的DMA接口,例如:TIM1_DMAConfig.

使用特权

评论回复
8
sunmeat|  楼主 | 2014-9-25 09:27 | 只看该作者
用以配置外设功能的函数,总是以字符串“Config”结尾,例如GPIO_PinRemapConfig.

使用特权

评论回复
9
sunmeat|  楼主 | 2014-9-25 09:27 | 只看该作者
名为PPP_GetFlagStatus的函数,其功能为检查外设PPP某标志位被设置与否,例如:I2C_GetFlagStatus.

使用特权

评论回复
10
sunmeat|  楼主 | 2014-9-25 09:36 | 只看该作者
l 名为PPP_ClearFlag的函数,其功能为清除外设PPP标志位,例如:I2C_ClearFlag.

使用特权

评论回复
11
sunmeat|  楼主 | 2014-9-25 09:36 | 只看该作者
l 名为PPP_GetITStatus的函数,其功能为判断来自外设PPP的中断发生与否,例如:I2C_GetITStatus.

使用特权

评论回复
12
sunmeat|  楼主 | 2014-9-25 09:36 | 只看该作者
名为PPP_ClearITPendingBit的函数,其功能为清除外设PPP中断待处理标志位,例如: I2C_ClearITPendingBit.

使用特权

评论回复
13
sunmeat|  楼主 | 2014-9-25 09:37 | 只看该作者
这样的命名方式非常便于程序的编写和阅读,以标准外设库中的示例函数为例,下面摘录了STM32F10x_StdPeriph_Examples\ADC\3ADCs_DMA\mian.c中的一段程序。
DMA_InitType Def DMA_InitStructure;

/* DMA1 channel1 configuration ----------------------------------------------*/

DMA_DeInit(DMA1_Channel1);

DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;

DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADC1ConvertedValue;

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;

DMA_InitStructure.DMA_BufferSize = 1;

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

DMA_InitStructure.DMA_Priority = DMA_Priority_High;

DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

DMA_Init(DMA1_Channel1, &DMA_InitStructure);

/* Enable DMA1 channel1 */

DMA_Cmd(DMA1_Channel1, ENABLE);

使用特权

评论回复
14
sunmeat|  楼主 | 2014-9-25 09:37 | 只看该作者
上面的代码完成了DMA1通道的配置,首先定义了DMA_InitType DMA_InitStructure,接着配置DMA_InitType的各种参数,各参数的命名方式也均使用约定的命名方式,从命名就能够很容易的看出各参数所指代的具体功能。功能参数配置完成后,使用DMA_Init(DMA1_Channel1, &DMA_InitStructure);完成相应外设的初始化,最后使用DMA_Cmd(DMA1_Channel1, ENABLE) 使能相应外设。从这个例子就能够很容易的看出标准外设库这种规范化的命名规则给编写和阅读程序带来的好处。

使用特权

评论回复
15
zitral| | 2014-9-25 10:41 | 只看该作者
学习笔记?!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

208

主题

2132

帖子

13

粉丝