/*LED.H*/
#define LED_GPIO GPIOA //端口宏定义
#define LED_Pin GPIO_Pin_8 //端口位宏定义#define LED_CLK RCC_APB2Periph_GPIOA //端口时钟宏定义
/*AD.H*/
#define AD_GPIO GPIOB //端口宏定义
#define AD_Pin GPIO_Pin_9 //端口位宏定义
#define AD_CLK RCC_APB2Periph_GPIOB //端口时钟宏定义
/*GPIO.C*/
/************************************
函数名:GPIO_Bits_SetOrReset
描述 :GPIO端口置位复位,控制led闪烁
输入 :GPIOx(端口),GPIO_Pin(端口位),state(端口状态)
输出 :无
备注 :GPIO_Bits_SetOrReset(GPIOA,8,0);GPIOA,端口8,复位
***********************************/
void GPIO_Bits_SetOrReset(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, uint8_t state)
{
if(state)
{
GPIOx->BSRR|=1<<GPIO_Pin;
}else GPIOx->BSRR|=1<<(GPIO_Pin+16);
}
/*LED.C*/
/************************************
函数名:LED_Bits_SetOrReset
描述 :LED端口置位复位,控制led闪烁
输入 :state(端口状态)
输出 :无
备注 :LED_Bits_SetOrReset(0);LED对应端口位复位,灭
***********************************/
void LED_Bits_SetOrReset(uint8_t state)
{
if(state)
{
LED_GPIO->BSRR|=1<<LED_Pin;
}else LED_GPIO->BSRR|=1<<(LED_Pin+16);
}
void LED_Bits_SetOrReset1(uint8_t state)
{
GPIO_Bits_SetOrReset(GPIOA, GPIO_Pin_9,state)
}
void LED_Bits_SetOrReset2(uint8_t state)
{
GPIO_Bits_SetOrReset(LED_GPIO, LED_Pin,state)
}
/*AD.C*/
/************************************
函数名:AD_Bits_SetOrReset
描述 :AD端口置位复位
输入 :state(端口状态)
输出 :无
备注 :AD_Bits_SetOrReset(0);AD对应端口位复位
***********************************/
void AD_Bits_SetOrReset(uint8_t state)
{
if(state)
{
AD_GPIO->BSRR|=1<<AD_Pin;
}else AD_GPIO->BSRR|=1<<(AD_Pin+16);
}
析:
1
定义模块函数(无传递参数)
2
定义模块函数(参数全部从外部接受)
3
定义模块函数(参数部分传递,部分外部接受)
理想模式:为方便在不同平台移植
1
若基于本平台此模块只需要一种状态,则参数完全宏定义即可(例如,ds18b20,作为一个独立外设模块,被平台使用时,端口,端口位,时钟线完全唯一确定,所以可以完全宏定义)
2
若基于本平台此模块需要配置多种状态,则根据区分多种状态的最小公共参数作为传递参数,其余参数使用宏定义(例如,GPIO端口置位复位模块,被平台使用时,可能需要被ds18b20的端口配置需要,也可能被USART端口配置需要,还可能被AD端口配置需要,所以可按传递部分参数,宏定义部分参数定义该模块)
析:
基于以上代码,可知:
GPIO.C模块中的GPIO_Bits_SetOrReset()函数可以被多个设备调用》》》基于平台移植,GPIO.C模块比较适合作为底层模块,被其他外设模块调用,而GPIO.C模块参数全部为传递参数。
LED.C模块中的LED_Bits_SetOrReset()对应到某唯一平台移植时,端口,端口位唯一确定,LED.C模块比较适合作为外设模块,LED.C模块参数部分宏定义,部分传递。
void LED_Bits_SetOrReset1(uint8_t state)
{
GPIO_Bits_SetOrReset(LED_GPIO, LED_Pin,state)
}
/********
void LED_Bits_SetOrReset1(uint8_t state)
{
GPIO_Bits_SetOrReset(LED_GPIO, LED_Pin,state)
}
void LED_Bits_SetOrReset1(uint8_t state)
{
GPIO_Bits_SetOrReset(LED_GPIO, LED_Pin,state)
}
/********部分参数传递,部分参数由外设宏定义,功能逻辑自身实现*******************/
void LED_Bits_SetOrReset(uint8_t state)
/********部分参数传递,其余部分参数直接使用系统参数(stm32系统宏定义),功能逻辑调用底层模块实现*******************/
void LED_Bits_SetOrReset1(uint8_t state)
/********部分参数由外设宏定义,功能逻辑调用底层模块实现*******************/
void LED_Bits_SetOrReset2(uint8_t state)
void LED_Bits_SetOrReset1(uint8_t state)
{
GPIO_Bits_SetOrReset(LED_GPIO, LED_Pin,state)
}