0. 개발 환경
IDE: STM32CubeIDE
개발보드: NUCELO-F103RB
1. 내장 LED 회로도
F103RB보드에는 사용자 응용으로 내장해 둔 LED가 있다. 회로에는 LD2이다.
Schematic을 보면 LD2가 PA5에 연결되어 있는 것을 확인할 수 있다.
Source current라 PA5의 출력이 HIGH가 되어야 LED에 불이 켜질 것이다.
2. Pin Configuration
PA5를 GPIO_OUTPUT으로 설정한다. 처음 프로젝트 생성할 때, nucleo보드로 생성했더라면 이미 자동으로 설정되어 있을 것이다.
그러면 이렇게 코드가 생성된 것을 확인할 수 있다. 기본 세팅들은 이미 전에 했으니 따로 설정할 건 없고 main 함수 안에 잇는 while문에서 작업을 하면 된다.
HAL 라이브러리에서 GPIO 제어하는 함수를 제공한다.
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // LED on
HAL_Delay(500); // 0.5초 delay
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // LED off
HAL_Delay(500); // 0.5초 delay
다음과 같이 while문 안에 작성한다. 여기서 주의할 점은 코드를 작성할 때 무조건
/* USER CODE BEGIN */
/* USER CODE END */
라는 주석 사이에 작성을 해야 한다. 안 그러면 코드 생성할 때 싹 날아감
Run을 눌러 업로드를 하면 LD1이 초-빨로 깜빡이면서 업로드가 되고 있는 것을 확인할 수 있다.
TIP
1. Ctrl + 스페이스 누르면 자동완성 가능함
2. 우측에 Drivers - STM32F1xx_HAL_Driver - Src로 가면 어떤 함수들을 제공하고 있는지 확인할 수 있음
3. 외부 LED 제어
CN10 커넥터의 PC8을 이용하여 외부 LED를 제어해보자. 그라운드는 32번핀의 AGND를 사용한다.
참고로 CN10 커넥터는
여기 위치한다.
다음과 같이 PC8을 OUPUT으로 세팅한 후 코드 생성
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8);
HAL_Delay(500);
다음과 같이 코드 작성 (이번에는 Toggle함수를 사용)
4. 스위치 입력을 통한 LED 제어
1. Schematic
보드에 부착되어 있는 B1스위치(파란색)와 내부 LED(LD2)를 사용한다.
회로도를 보면 B1은 PC13에 pull-up으로 연결되어 있다.
5. Pin Configuration
아마도 PC13이 디폴트로 GPIO_EXTI13로 되어있을 텐데 polling 방식으로 구현할 거라 input모드로 바꿔준다.
3. Code
if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_RESET) {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
}
else if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_SET) {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
}
예상과 달리 채터링 현상은 일어나지 않았다.. 왜지?
→ RC회로를 달아서
'MCU > stm32' 카테고리의 다른 글
[FreeRTOS] freertos_mpool.h, freertos_os2.h No such file or directory issue (0) | 2025.01.19 |
---|---|
ST LINK (0) | 2024.12.27 |
[NUCELO-F103RB] stm32cubeIDE 프로젝트 생성 (0) | 2024.11.12 |
[NUCLEO-F103RB] 보드 분석 : OSC 32 kHz clock supply (LSE) (0) | 2024.10.02 |
[NUCLEO-F103RB] 보드 분석 : OSC Clock (HSE) (1) | 2024.10.02 |