实验原理:
按键的一端与STM32的GPIO(PB9)相连,且PB9外接一个1k大小的限流上接电阻。
初始化时把PB9设置成输入模式,当按键弹起时,PB9由于上拉电阻的作用呈高电平(3.3V);
当按键按下时,PB9直接被按键短接到GND,呈低电平,因此PB9的电平变化产生下降
沿,从而进入中断函数,进入中断回调。
实验现象:
按键被按下一次,切换一个LED的状态。
源代码下载链接:
链接:http://pan.baidu.com/s/1hrCzb2s 密码:21yp
核心代码:
int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); /* USER CODE BEGIN 2 */ LED_RED_ON; /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { static int led_work_status = 0; HAL_Delay(10); if(ARM_KEY_STATE == KEY_DOWN){ led_work_status += 1; if(led_work_status > 2)led_work_status = 0; } switch(led_work_status){ case 0: LED_RED_ON; LED_GREEN_OFF; LED_BLUE_OFF; break; case 1: LED_RED_OFF; LED_GREEN_ON; LED_BLUE_OFF; break; case 2: LED_RED_OFF; LED_GREEN_OFF; LED_BLUE_ON; break; default: break; } __HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_9); }
iCore4链接: