有什么方法 将5个函数的功能用一个函数代替了
#include<stm32f10x_lib.h>
#include"gpio.h"
//GPIO模式设置函数 MODE详情见 gpio.h 当为输入模式时 speed 为0
void GPIOA_CONF(u8 n,u8 mode,u8 speed)
{
u8 temp=n;
if(n<8)
{
n=n*4;
BIT_ADDR(GPIOA_CRL_Addr,n) = speed;
BIT_ADDR(GPIOA_CRL_Addr,n+1) = speed>>1;
BIT_ADDR(GPIOA_CRL_Addr,n+2) = mode;
BIT_ADDR(GPIOA_CRL_Addr,n+3) = mode>>1;
if(mode>0x04)
{
  Aout(temp)=mode>>2;
}
}
else
{
n=(n-8)*4;
BIT_ADDR(GPIOA_CRH_Addr,n) = speed;
BIT_ADDR(GPIOA_CRH_Addr,n+1) = speed>>1;
BIT_ADDR(GPIOA_CRH_Addr,n+2) = mode;
BIT_ADDR(GPIOA_CRH_Addr,n+3) = mode>>1;
}
if(mode>0x04)
{
  Aout(temp)=mode>>2;
}
}
void GPIOB_CONF(u8 n,u8 mode,u8 speed)
{
u8 temp=n;
if(n<8)
{
n=n*4;
BIT_ADDR(GPIOB_CRL_Addr,n) = speed;
BIT_ADDR(GPIOB_CRL_Addr,n+1) = speed>>1;
BIT_ADDR(GPIOB_CRL_Addr,n+2) = mode;
BIT_ADDR(GPIOB_CRL_Addr,n+3) = mode>>1;
if(mode>0x04)
{
  Bout(temp)=mode>>2;
}
}
else
{
n=(n-8)*4;
BIT_ADDR(GPIOB_CRH_Addr,n) = speed;
BIT_ADDR(GPIOB_CRH_Addr,n+1) = speed>>1;
BIT_ADDR(GPIOB_CRH_Addr,n+2) = mode;
BIT_ADDR(GPIOB_CRH_Addr,n+3) = mode>>1;
}
if(mode>0x04)
{
  Bout(temp)=mode>>2;
}
}
void GPIOC_CONF(u8 n,u8 mode,u8 speed)
{
u8 temp=n;
if(n<8)
{
n=n*4;
BIT_ADDR(GPIOC_CRL_Addr,n) = speed;
BIT_ADDR(GPIOC_CRL_Addr,n+1) = speed>>1;
BIT_ADDR(GPIOC_CRL_Addr,n+2) = mode;
BIT_ADDR(GPIOC_CRL_Addr,n+3) = mode>>1;
if(mode>0x04)
{
  Cout(temp)=mode>>2;
}
}
else
{
n=(n-8)*4;
BIT_ADDR(GPIOC_CRH_Addr,n) = speed;
BIT_ADDR(GPIOC_CRH_Addr,n+1) = speed>>1;
BIT_ADDR(GPIOC_CRH_Addr,n+2) = mode;
BIT_ADDR(GPIOC_CRH_Addr,n+3) = mode>>1;
}
if(mode>0x04)
{
  Cout(temp)=mode>>2;
}
}
void GPIOD_CONF(u8 n,u8 mode,u8 speed)
{
u8 temp=n;
if(n<8)
{
n=n*4;
BIT_ADDR(GPIOD_CRL_Addr,n) = speed;
BIT_ADDR(GPIOD_CRL_Addr,n+1) = speed>>1;
BIT_ADDR(GPIOD_CRL_Addr,n+2) = mode;
BIT_ADDR(GPIOD_CRL_Addr,n+3) = mode>>1;
if(mode>0x04)
{
  Dout(temp)=mode>>2;
}
}
else
{
n=(n-8)*4;
BIT_ADDR(GPIOD_CRH_Addr,n) = speed;
BIT_ADDR(GPIOD_CRH_Addr,n+1) = speed>>1;
BIT_ADDR(GPIOD_CRH_Addr,n+2) = mode;
BIT_ADDR(GPIOD_CRH_Addr,n+3) = mode>>1;
}
if(mode>0x04)
{
  Dout(temp)=mode>>2;
}
}
void GPIOE_CONF(u8 n,u8 mode,u8 speed)
{
u8 temp=n;
if(n<8)
{
n=n*4;
BIT_ADDR(GPIOE_CRL_Addr,n) = speed;
BIT_ADDR(GPIOE_CRL_Addr,n+1) = speed>>1;
BIT_ADDR(GPIOE_CRL_Addr,n+2) = mode;
BIT_ADDR(GPIOE_CRL_Addr,n+3) = mode>>1;
if(mode>0x04)
{
  Eout(temp)=mode>>2;
}
}
else
{
n=(n-8)*4;
BIT_ADDR(GPIOE_CRH_Addr,n) = speed;
BIT_ADDR(GPIOE_CRH_Addr,n+1) = speed>>1;
BIT_ADDR(GPIOE_CRH_Addr,n+2) = mode;
BIT_ADDR(GPIOE_CRH_Addr,n+3) = mode>>1;
}
if(mode>0x04)
{
  Eout(temp)=mode>>2;
}
} |