[STM32] EXTI(외부 인터럽트)

Vandeven·2024년 3월 27일
0

STM32

목록 보기
3/5

서론

회로도를 분석해 코딩을 하는법을 배우고, 실행해보자.

본론

요구사항

nucleo 보드의 User 버튼을 누를때마다 LD2 led를 토글시키는 예제

설정

자세한 설정은 UART printf 에서 이미지 참고

GPIO에서 B1 User 버튼은 회로도를 보았을 때

PC13에 연결이 되어있고, R30 저항이 풀업 저항이므로 이 버튼은 Falling edge(버튼을 눌렀을때 신호가 0)인것을 알수있다. 그러므로 GPIO모드를 FallingEdge모드로 바꿔준다.

그리고 Code generate를 해준다.

Code

HAL Driver에서 stm32f1xx_hal_gpio.c 를 들어가보면

__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(GPIO_Pin);
  /* NOTE: This function Should not be modified, when the callback is needed,
           the HAL_GPIO_EXTI_Callback could be implemented in the user file
   */
}

식으로 weak 처리가 되어있다.
__weak 심볼은 따로 선언이 되어있지 않으면 심볼내 함수를 처리하겠다는 의미이므로, 심볼을 제외한 함수만 긁어다 새로 선언해준다.

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	switch (GPIO_Pin)
	{
	case B1_Pin:
		HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
		break;
	default:
		;
	}
}

만약 GPIO_Pin이 B1 User Pin이라면 LD2 led를 토글하라고 설정해주었다.

결과

유저 버튼을 누를때마다 토글되는것을 확인하였다. 다만 여러번 토글되는것으로 보아 플로팅현상은 방지하였으나, 채터링 현상(신호가 수차례반복됨)이 해결되지 않은것 같다. 해결하는 방식이나 코드를 추가해야 될 것이다.

gif가 안올라간다.. 이게 맞나..

profile
신입 하드웨어 개발자 입니다.

0개의 댓글

관련 채용 정보