ARM

external interrupt로 led 출력

GunwooYun 2022. 4. 24. 12:10

사용보드 : STM32F103RB + I/O board

 

interrupt callback 함수를 이용한 LED 출력

 

확대해야 잘 보임

pc0:7 led output

pa8 switch1

pb4 switch2

 

sw1 을 누르면 led1->led8 순차적으로 high

sw2 을 누르면 반대로 high

 

flag 변수를 하나 만들고 interrupt callback 함수에서 플래그 변수를 바꾼다.

while에서 플래그에 따라 동작을 수행한다.

 

  while (1)
  {
	  /*Push PA8 (sw1) Button*/
	  if(flag_SW1 == 1){
		  HAL_GPIO_WritePin(GPIOC, led, 1);
		  HAL_Delay(200);
		  HAL_GPIO_WritePin(GPIOC, led, 0);
		  led <<= 1;
		  if(led > 0x0100) led = 0x0001;

	  }
	  /*Push PB4 (sw2) Button*/
	  if(flag_SW1 == 2){
		  HAL_GPIO_WritePin(GPIOC, led, 1);
		  HAL_Delay(200);
		  HAL_GPIO_WritePin(GPIOC, led, 0);
		  led >>= 1;
		  if(led < 0x0001) led = 0x0080;
	  	  }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  
/*********************************************/

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_8) //PA8
		flag_SW1 = 1;
	if(GPIO_Pin == GPIO_PIN_4) // PB4
		flag_SW1 = 2;
}