본문 바로가기

[ST_MICRO]/STM32F43x

[STM32F439 EVM] 외부인터럽트 테스트

[STM32F439 EVM] 외부인터럽트 테스트


STM32F439 의 외부 인터럽트 소스는 각 포트0에서 15까지로 설정 가능하고 아래와 같이 그룹별로 관리 가능하다.

0에서 4번까지는 각각의 인터럽트 소스를 할당 할 수 있고 5~9, 10~15는 그룹으로되어 있어서 인터럽트 핸들러 내에서 구분해서 사용해야 한다.


EXTI0_IRQn

EXTI1_IRQn

EXTI2_IRQn

EXTI3_IRQn

EXTI4_IRQn

EXTI9_5_IRQn

EXTI15_10_IRQn



STM32F439 EVM 보드의 스위치 회로는 아래과 같고 PA8에 연결되어 있는 스위치를 이용하여 인터럽트 테스트 예제를 작성해 보았다.





STM32F439 외부 인터럽트 초기화 코드

static void EXTILine9_5_Config(void)

{

  GPIO_InitTypeDef   GPIO_InitStructure;


  /* Enable GPIOA clock */

  __GPIOA_CLK_ENABLE();

  

  /* Configure PA0 pin as input floating */

  GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;

  GPIO_InitStructure.Pull = GPIO_PULLUP;

  GPIO_InitStructure.Pin = GPIO_PIN_8;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);


  /* Enable and set EXTI Line0 Interrupt to the lowest priority */

  HAL_NVIC_SetPriority(EXTI9_5_IRQn, 2, 0);

  HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);

}





STM32F439 외부 인터럽트 핸들러 함수

인터럽트 핸들러 함수 EXTI9_5_IRQHandler 내에서 HAL_GPIO_EXTI_Callback함수를 호출하는 구조로 되어 있다.


void EXTI9_5_IRQHandler(void)

{

  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);

}


void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

  if(GPIO_Pin == GPIO_PIN_8)

  {

        Led1Toggle();

  }

}


반응형