-개발 환경
개발 보드 : NUCLEO-F103RB
개발 프로그램
- STM32 CubeMX : 6.12.0
- STM32 CubeIDE : 1.16.0
1. 서론
GPIO(General Perpose Input Output)은 새로운 MCU를 다루게 될때 가장 먼저 테스트 해보는 기능 중 하나입니다. 마치 새로운 언어를 배울 때 "Hello world"를 출력 하는 것과 마찬가지입니다. 이번 포스트에서는 GPIO를 통해 보드에 기본적으로 탑재되어 있는 LED와 버튼으로 간단한 입출력을 실습하도록 하겠습니다.
2. 프로젝트 생성
STM32 CubeIDE를 사용하셔도 상관없으며, 저의 경우는 VS code를 사용하여 개발할 것이므로 VS code로 개발하시고 싶은 분은 아래 포스트를 참고 하셔서 프로젝트를 생성해주시면 됩니다.
https://littlebitodd-developer.tistory.com/8
STM32위한 vscode 개발 환경 구축
STM32을 개발하기 위해서 STmicronics 회사에서 제공하는 "STM32 CubeIDE"를 사용하였습니다. 하지만, 기존 Visual studio code를 자주 사용하는 저에게 있어 Eclipse 기반의 STM32 CubeIDE는 사용하기 매우 불편하
littlebitodd-developer.tistory.com
3. IOC 파일 확인
사실 IOC 파일을 확인해보면, 이미 LED와 버튼에 대한 GPIO 설정이 이미 되어 있습니다.
PA5는 Green Led, PC13은 Blue PushButton이라고 Label도 달려있습니다.
만약, GPIO 설정이 되어 있지 않은 분들은 Board Selector를 사용하지 않고 MCU/MPU Selector를 사용한 분들 일 겁니다.
3.1. 추가적인 출력 설정 방법
출력 설정은 따로 건들이지 않아도 사용하는데 전혀 문제가 되지 않을 것입니다.
3.2. 추가적인 입력 설정 방법
근데 한가지 궁금한점이 있는 분도 있으실 겁니다.
PC13도 분명히 입력인데도 불구하고 GPIO 모드가 Input mode가 아닙니다.
그 이유는 PC13은 Interrupt를 사용하기 위한 모드로 설정되어 있기 때문입니다. Interrupt에 대한 자세한 내용은 아래 포스트를 참고하시기 바랍니다.
https://littlebitodd-developer.tistory.com/48
[STM32] 외부 인터럽트(EXTI : EXTernal Interrupt)를 통해 버튼의 입력 감지
- 개발 환경개발 보드 : NUCLEO-F103RB개발 프로그램- STM32 CubeMX : 6.12.0- STM32 CubeIDE : 1.16.01. 서론 인터럽트를 사용하기 전 사전적 정의부터 확인해보는 것이 좋습니다. 사전적 정의에서도 알 수 있
littlebitodd-developer.tistory.com
4. 실습 코드 작성
매우 간단하게 버튼을 누르면 LED가 켜지는 실습을 진행해보도록 하겠습니다.
while (1)
{
if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_SET){
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
}
else{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
NUCLEO-F103RB 보드의 버튼은 다음과 같습니다.
버튼을 누르지 않은 상태에서는 PC13에 풀업저항을 통해서 3.3V가 입력이 되어 GPIO_PIN_SET즉 High가 입력됩니다.
버튼을 누르게 되면 PC13은 직접적으로 Gruond에 연결되어 0V가 입력이 되어 GPIO_PIN_RESET즉 Low가 입력됩니다.
NUCLEO-F103RB 보드의 LED는 다음과 같습니다.
신호가 PA5으로 부터 생성되어 LED에 전달되게 됩니다.
이때 LED는 PA5가 GPIO_PIN_SET이면 3.3V가 출력되어 LED가 켜지게 되고, PA5가 GPIO_PIN_RESET이면 0V가 출력되어 LED가 꺼지게 됩니다.
5. 후기
정상작동하지만 While문을 통해 계속 Button의 상태를 계속 확인하는 것을 비효율적입니다. 그래서 실제로 입력과 관련한 부분에 대해서는 Interrupt 를 사용하여 처리하는 것이 일반적입니다. 다음 포스트는 Interrupt를 이용하여 버튼의 입력을 처리하는 것에 대해서 알아보도록 하겠습니다.
'Embedded > STM32' 카테고리의 다른 글
[STM32] USART / UART를 통한 데이터 송수신 (0) | 2025.04.06 |
---|---|
[STM32] GPIO 레지스터를 주소로 직접 접근하여 GPIO 제어 (0) | 2025.04.05 |
[PlatformIO] STM32를 아두이노처럼 개발 (0) | 2025.03.26 |
[STM32] I2C 통신으로 1602 Character LCD 출력 (0) | 2025.02.22 |
[STM32] 간략한 Timer 사용 방법(1ms 주기 설정) (0) | 2025.02.16 |