同GPIO输出一样,只需要两个步骤就可以实现GPIO输入的功能。
1 将GPIO配置为输出模式
void GPIO_ConfigInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
//PA0 INPUT
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//PB6 INPUT
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//PB0/PB1 OUTPUT
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
2 调用接口函数实现功能。
int main(void)
{
RCC_ConfigInit();
GPIO_ConfigInit();
Uart_ConfigInit(9600);
while(1) {
//get PA0 input data;
gpioTempBuf[ 0 ] = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
//get GPIOB input data;
gpioTempBuf[ 1 ] = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6);
if(gpioTempBuf[ 0 ] != Bit_RESET) {
//if level of IO changed,printf current status;
GPIO_ResetBits(GPIOB, GPIO_Pin_0);
UartSendGroup((u8*)printBuf, sprintf(printBuf, "PA0 PRESS\r\n"));
}
else
GPIO_SetBits(GPIOB, GPIO_Pin_0);
if(gpioTempBuf[ 1 ] != Bit_RESET) {
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
UartSendGroup((u8*)printBuf, sprintf(printBuf, "PB6 PRESS\r\n"));
}
else
GPIO_SetBits(GPIOB, GPIO_Pin_1);
}
}
这个例程实现以下功能:
1 当PA0输入为低电平时,PB0控制LED亮;
2 当PB6输入为低电平时,PB1控制LED亮。
网友评论