在PB9 PB10用一个按键接在一起,PB9设为输出(输出高电平1) PB10设为输入 当按键按下的是时候灯就亮
但是 为什么我设置了之后 按键都还没按下灯就亮了 并且还发现了一个这样的问题: 在我把PB9 PB10 的线拆了之后灯就不了 ,然而当我的手触摸到PB10的时候灯就亮了
void key_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC->APB2ENR|=1<<0;
AFIO->MAPR&=0xf8ffffff;
AFIO->MAPR|=0x04000000;
/*
这里还有PA13 PA15 的设置
*/
///////////////// PB9 //////////////////////
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
///////////////////// PB10 ////////////////////////////
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
int key_input()
{
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)==0)
{
delay_nms(10);
return 1;
}
else if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13)==0)
{
delay_nms(10);
return 2;
}
else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)==1)
{
delay_nms(10);
return 2;
}
return 0;
}
int main()
{
static u8 t;
clock_init();
led_init();
key_init();
while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_9);
t=key_input();
switch(t)
{
case 0 :
GPIO_SetBits(GPIOD,GPIO_Pin_2);
GPIO_SetBits(GPIOA,GPIO_Pin_8);
break;
case 1 :
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
break;
case 2 :
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
break;
}
}
}
|