개발환경: STM32CubeIDE
개발보드: NUCELO-F103RB
1. 내부 LED 제어
1.Schematic
Schematic을 보면 LD2가 PA5에 연결되어있는 것을 확인할 수 있다.
참고로 LD1와 LD3도 있는데
LD1은 ST-LINK에
LD3은 power에 연결되어있다.
실제로 보드에 파워를 주면 LD1과 LD3에 불이 들어오고 업로드를 하면 LD1이 초록색과 빨간색으로 점멸하는것을 알 수 있다.
2.Pin Configuration
다시 돌아와서 내부 LED인 LD2와 연결되어있는 PA5를 OUTPUT으로 설정해준다. (아마 자동으로 되어있을거임)
코드 생성
그러면 이렇게 코드가 생성된것을 확인할 수 있다. 기본 세팅들은 이미 전에 했으니 따로 설정할건 없고 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로 가면 어떤 함수들을 제공하고 있는지 확인할 수 있음
2. 외부 LED 제어
CN10 커넥터의 PC8을 이용하여 외부 LED를 제어해보자. 그라운드는 32번핀의 AGND를 사용한다.
참고로 CN10 커넥터는
여기 위치한다.
다음과 같이 PC8을 OUPUT으로 세팅한 후 코드 생성
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8);
HAL_Delay(500);
다음과 같이 코드 작성 (이번에는 Toggle함수를 사용)
3. 스위치 입력을 통한 LED 제어
1. Schematic
보드에 부착되어 있는 B1스위치(파란색)과 내부 LED(LD2)를 사용한다.
회로도를 보면 B1은 PC13에 pull-up으로 연결되어있다.
2. 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);
}
예상과 달리 채터링 현상은 일어나지 않았다.. 왜지?
"영상은 추후 추가 예정"
'MCU > stm32' 카테고리의 다른 글
[NUCLEO-F103RB] 보드 분석 : HW layout (0) | 2024.09.30 |
---|---|
[NUCLEO-F103RB] 보드 분석 : 개요 (1) | 2024.09.30 |
[NUCELO-F103RB]UART (0) | 2023.01.12 |
[NUCELO-F103RB]NUCELO-F103RB 소개 (0) | 2023.01.12 |
HAL 라이브러리란? (0) | 2023.01.07 |