text: 
  #include <stdio.h>
  #include "wm_hal.h"
  
  void Error_Handler(void);
  static void GPIO_Init(void);
  
  static volatile uint8_t key_flag = 0;
  
  int main(void)
  {
  	SystemClock_Config(CPU_CLK_160M);
  	printf("enter main\r\n");
  	HAL_Init();
  	GPIO_Init();
  	
  	while (1)
  	{
  		if (key_flag == 1)
  		{
  			HAL_Delay(20);
  			if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5) == GPIO_PIN_RESET)
  			{
  				HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2);
  			}
  			key_flag = 0;
  		}
  	}
  	
      return 0;
  }
  
  static void GPIO_Init(void)
  {
  	GPIO_InitTypeDef GPIO_InitStruct = {0};
  	
  	__HAL_RCC_GPIO_CLK_ENABLE();
  
  	GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2;
  	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT;
  	GPIO_InitStruct.Pull = GPIO_NOPULL;
  	HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2, GPIO_PIN_SET);
  	
  	GPIO_InitStruct.Pin = GPIO_PIN_5;
  	GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
  	GPIO_InitStruct.Pull = GPIO_PULLUP;
  	HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  	
  	HAL_NVIC_SetPriority(GPIOB_IRQn, 0);
  	HAL_NVIC_EnableIRQ(GPIOB_IRQn);
  
  }
  
  void HAL_GPIO_EXTI_Callback(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
  {
  	if ((GPIOx == GPIOB) && (GPIO_Pin == GPIO_PIN_5))
  	{
  		key_flag = 1;
  	}
  }
  
  void Error_Handler(void)
  {
  	while (1)
  	{
  	}
  }
  
  void assert_failed(uint8_t *file, uint32_t line)
  {
  	printf("Wrong parameters value: file %s on line %d\r\n", file, line);
  }