本帖最后由 DongInker 于 2017-1-12 08:59 编辑
主要用于普通管脚输入输出配置,包含是否初始化管脚(GpioEn),如是输出管脚初始化的电平状态(UpPowVal)。
[mw_shl_code=applescript,true]#define GPIO_ClrBits(m,n) GPIO_ResetBits(m,n)
typedef struct
{
UInt16 GpioFlag;
UInt16 GpioEn;
UInt16 UpPowVal;
GPIO_TypeDef *GPIO_PRT;
GPIO_InitTypeDef GPIO_INIT;
}tGPIO_CFG;
enum{
PIN_KEY1,
PIN_KEY2,
PIN_BEEP,
PIN_LAMP,
PIN_315,
PIN_OUT,
};
tGPIO_CFG GpioCfgTable[]={
{PIN_KEY1 ,1 , 0,GPIOA ,GPIO_Pin_0 ,GPIO_Speed_50MHz ,GPIO_Mode_IN_FLOATING},
{PIN_KEY2 ,1 , 0,GPIOA ,GPIO_Pin_1 ,GPIO_Speed_50MHz ,GPIO_Mode_IN_FLOATING},
{PIN_BEEP ,1 , 0,GPIOA ,GPIO_Pin_13 ,GPIO_Speed_50MHz ,GPIO_Mode_Out_OD },//神州1号开发板管脚
{PIN_LAMP ,1 , 0,GPIOB ,GPIO_Pin_2 ,GPIO_Speed_50MHz ,GPIO_Mode_Out_PP },
{PIN_315 ,1 , 0,GPIOB ,GPIO_Pin_4 ,GPIO_Speed_50MHz ,GPIO_Mode_IN_FLOATING},
{PIN_OUT ,1 , 0,GPIOA ,GPIO_Pin_7 ,GPIO_Speed_50MHz ,GPIO_Mode_Out_PP },
{0 ,0 , 0,0 ,0 ,GPIO_Speed_50MHz ,GPIO_Mode_IN_FLOATING}};
static void GpioInit(void)
{
int i;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
#ifdef MCU_STM32F103VE
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
#endif
AFIO->MAPR = (0x00FFFFFF & AFIO->MAPR)|0x04000000;//关闭JTAG
for(i=0;GpioCfgTable.GPIO_PRT;i++)
{
if(GpioCfgTable.GpioEn)
{
if((GpioCfgTable.GPIO_INIT.GPIO_Mode == GPIO_Mode_Out_OD) || (GpioCfgTable.GPIO_INIT.GPIO_Mode == GPIO_Mode_Out_PP))
{
if(GpioCfgTable.UpPowVal)
GPIO_SetBits(GpioCfgTable.GPIO_PRT,GpioCfgTable.GPIO_INIT.GPIO_Pin);
else
GPIO_ClrBits(GpioCfgTable.GPIO_PRT,GpioCfgTable.GPIO_INIT.GPIO_Pin);
}
GPIO_Init(GpioCfgTable.GPIO_PRT, &GpioCfgTable.GPIO_INIT);
}
}
}
/* InPort */
GLOBAL int GetKey1(void)
{
if(GpioCfgTable[PIN_KEY1].GpioEn)
{
if(GPIO_ReadInputDataBit(GpioCfgTable[PIN_KEY1].GPIO_PRT,GpioCfgTable[PIN_KEY1].GPIO_INIT.GPIO_Pin) == 0)
return 1;
}
return 0;
}
GLOBAL int GetKey2(void)
{
if(GpioCfgTable[PIN_KEY2].GpioEn)
{
if(GPIO_ReadInputDataBit(GpioCfgTable[PIN_KEY2].GPIO_PRT,GpioCfgTable[PIN_KEY2].GPIO_INIT.GPIO_Pin) == 0)
return 1;
}
return 0;
}
/* Out Port*/
GLOBAL void SetBeepIO(int val)
{
if(GpioCfgTable[PIN_BEEP].GpioEn)
{
if(val)
GPIO_ClrBits(GpioCfgTable[PIN_BEEP].GPIO_PRT,GpioCfgTable[PIN_BEEP].GPIO_INIT.GPIO_Pin);
else
GPIO_SetBits(GpioCfgTable[PIN_BEEP].GPIO_PRT,GpioCfgTable[PIN_BEEP].GPIO_INIT.GPIO_Pin);
}
}
GLOBAL void SetLampIO(int val)
{
if(GpioCfgTable[PIN_LAMP].GpioEn)
{
if(val)
GPIO_ClrBits(GpioCfgTable[PIN_LAMP].GPIO_PRT,GpioCfgTable[PIN_LAMP].GPIO_INIT.GPIO_Pin);
else
GPIO_SetBits(GpioCfgTable[PIN_LAMP].GPIO_PRT,GpioCfgTable[PIN_LAMP].GPIO_INIT.GPIO_Pin);
}
}[/mw_shl_code]
一周热门 更多>