stm32-参数-宏定义

来源:互联网 发布:基恩士plc编程手册 编辑:程序博客网 时间:2024/06/01 12:53

/*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)
}

0 0
原创粉丝点击