你传的是引脚定义?点亮led是传值?
不知道你这个问题是否已经解决, 如果还没有解决的话:void KEY_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK|KEY2_GPIO_CLK, ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStruct.GPIO_Pin = KEY1_GPIO_PIN;
GPIO_Init(KEY1_GPIO_PORT,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStruct.GPIO_Pin = KEY2_GPIO_PIN;
GPIO_Init(KEY2_GPIO_PORT,&GPIO_InitStruct);
}
//按键扫描
uint8_t key_scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON)
{
//松手检测
while(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON);
return KEY_ON;
}
else
return KEY_OFF;
}
int main(void)
{
LED_GPIO_Config();
KEY_GPIO_Config();
while(1)
{
if(key_scan(KEY1_GPIO_PORT, KEY1_GPIO_PIN) == KEY_ON)
{
LED_TOGGLE;
}
if(key_scan(KEY2_GPIO_PORT, KEY2_GPIO_PIN) == KEY_ON)
{
LED_TOGGLE;
}
}
}
其中LED_TOGGLE是利用宏定义的方式实现。
这里需要注意的是不要掉;
并且是控制LED的GPIO端口。
#define LED_TOGGLE {LED_GPIO_PORT->ODR^=LED_GPIO_PIN;}