[STM32] 5. GPIO 제어하기-출력(B-L475E-IOT01A1 개발보드 활용하기)

728x90
반응형

이전 포스팅이 궁금하다면?

2022.04.01 - [Hardware&Firmware/STmicroelectronic(STM)] - [STM32] 4. STM32CubeIDE 사용방법(B-L475E-IOT01A1 개발보드 활용하기)

 

[STM32] 4. STM32CubeIDE 사용방법(B-L475E-IOT01A1 개발보드 활용하기)

https://vuzwa.tistory.com/entry/STM32-3-STM32-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0STM32CubeIDE-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0 [STM32] 3. STM32 개발환경 구축하기(STM32CubeIDE 설치하기) https://vuzwa.tis

vuzwa.tistory.com


이전 포스팅(1~4번)에서 개발환경을 구축하고 디버깅을 어떻게 하는지까지 알아봤다. 그럼 이제 MCU를 움직여봐야겠지? 우선 가장 기본이 되는 GPIO(General Purpose Input Output)부터 알아보도록 하겠다! 

 

우선 출력(Output) 먼저 살펴보자.

 

개발 보드의 회로도를 열어보면(이전 포스팅에 다운로드 가능한 링크 걸어둠) LED가 어디에 연결돼 있는지 확인할 수 있다.

 

그림을 확대해서 보면 PB14번 포트에 연결돼있는 걸 확인할 수 있다. 그럼 STM32CubeIDE로 넘어가 보자.

 

 

 

먼저 왼쪽의 Project Explorer에서 B-L475E-IOT01A1.ioc 파일을 더블클릭한다. 화면 중앙에 MCU모양의 화면이 나타날 것이다. 여기서 PB14번을 찾아보자. 빨간색으로 표시된 부분에 검색창이 있다. 여기에 PB14를 입력하면 찾을 수 있다. 

 

 

 

친절하게 깜빡거리면서 위치도 알려준다. 

 

 

PB14를 클릭해 보면 해당 포트에서 사용할 수 있는 기능들이 모두 나온다. 우리는 GPIO 출력으로 활용할 거니까 GPIO_Output으로 설정해야 된다. 이미 설정되어 있다. 

GPIO_Output를 누르면 LED2[LED_GREEN]으로 나와있던 글씨가 사라지고 GPIO_Output으로 변경될 거다. 그럼 PB14에서 마우스 우클릭을 하면 Enter User Label이 보일 것이다. 이걸 클릭해서 원하는 이름으로 바꿔주면 된다. 

 

보드의 초기 설정을 그대로 가져왔기 때문에 아마 다 LED2[LED_GREEN]으로 되어있을 거다.

 

그럼 이 상태에서 main.c 파일을 열어보자. 

 

코드 창에서 스크롤을 내리다 보면 

 

int main(void)가 보이고 더 내리면 while(1) 무한루프가 보인다. 펌웨어에서 모든 코드는 이 안에 작성해야 한다. 

 

(4월 1일 금요일까지 쓰고 나서 퇴근하고 헬스 갔다 검도장을 갔다. 토요일에 몸이 아파서 몸살이겠거니.. 했는데 월요일(오늘 4월 4일) 날 검사해 보니 코로나란다. ㅎㅎ 하...)

 

그럼 이제 LED 동작을 확인해 보자.

 

GPIO의 출력을 제어할 수 있는 함수는 2가지다.

 

왼쪽 이미지의 HAL_GPIO_WritePin()함수 코드, 오른쪽 이미지가 HAL_GPIO_TogglePin()함수 코드 

 

HAL_GPIO_WritePin함수는 GPIO핀의 출력을 제어하는 함수다. 첫 번째 전달 인자에는 PORT를 두 번째 전달인자에는 PORT번호를, 마지막 전달인자에는 핀 상태를 입력하면 된다. 

 

여기서는 GPIO의 상태를 LED로 확인할 것이기 때문에 아래와 같이 입력하면 된다.

 

 

한줄한줄 살펴보면.

119번째 줄이 무한루프의 시작이다. 그 아래로 123번째 줄을 보면 /* USER CODE BEGIN 3 */라는 주석이 보일 것이다. STM32CubeMX를 사용해 코드를 생성한 경우 이 주석 아래인 124번째 줄과 129번째 줄에 보이는 /* USER CODE END 3 */ 사이에 사용자 코드를 입력해야 한다. 이 구간 외에 다른 곳에 코드를 입력하면 STM32CubeMX에서 코드를 재생성할 경우 싹 다 날아간다. 굉장히 주의해야 하는 부분이다. 

 

/* USER CODE BEGIN */

 

반드시 이 사이에 코드를 입력해야 함!!!

 

/* USER CODE END*/

 

그럼 코드 내용을 살펴보자. 

 

HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);

여기서 LED2는 CubeMX에서 GPIO에 지정한 포트의 이름이다. STM32CubeMX에서는 사용자가 포트에 지정한 이름을 이용해서 포트와 핀을 define 해준다. define 은 main.h에서 찾을 수 있다. 

LED2로 할당돼 GPIO pin을 Set(High, 3.3V) 시키겠다는 의미다. 현재 회로의 LED는 Pull-down으로 연결되어 있기 때문에 GPIO pin을 Set(High, 3.3V)으로 만들면 LED가 켜질 것이다. 

 

HAL_Delay(1000);

HAL 드라이버에서 제공하는 딜레이(시간 지연) 함수다 단위는 msec다. 

 

 

아래 코드는 GPIO pin을 reset(Low, 0V) 시키겠다는 의미다. 현재 회로의 LED는 Pull-down으로 연결되어 있기 때문에 GPIO pin을 reset(Low, 0V)으로 만들면 LED가 꺼진다. 

HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);

 

위 코드를 실행하면 1초 간격으로 LED가 ON/OFF를 반복할 것이다. 

 

 

 

HAL_GPIO_TogglePin() 함수는 GPIO 핀을 Toggle 시키는 함수 즉, 반대로 전환시키는 함수다. GPIO 핀이 Set상태면 Reset 상태로, Reset상태면 Set상태로 변경하는 함수다.  

 

아래 코드를 수행하면 위 동영상과 같이 동작이 될 것이다. 

	  HAL_GPIO_Toggle(LED2_GPIO_Port, LED2_Pin);
	  HAL_Delay(1000);
	  HAL_GPIO_Toggle(LED2_GPIO_Port, LED2_Pin);
	  HAL_Delay(1000);

 

- 끝 -


다음 포스팅이 궁금하다면?

2022.04.05 - [Hardware&Firmware/STmicroelectronic(STM)] - [STM32] 6. GPIO 제어하기-입력(B-L475E-IOT01A1 개발보드 활용하기)

 

[STM32] 6. GPIO 제어하기-입력(B-L475E-IOT01A1 개발보드 활용하기)

https://vuzwa.tistory.com/entry/STM32-5-GPIO-%EC%A0%9C%EC%96%B4%ED%95%98%EA%B8%B0B-L475E-IOT01A1-%EA%B0%9C%EB%B0%9C%EB%B3%B4%EB%93%9C-%ED%99%9C%EC%9A%A9%ED%95%98%EA%B8%B0?category=955127 [STM32] 5. GPIO 제어하기-출력(B-L475E-IOT01A1 개발보드 활

vuzwa.tistory.com

 

728x90
반응형