STM32F746G-DISCO 보드에서 GPIO(General-purpose I/O)를 간단히 테스트 해 보았습니다.
우선 GPIO 관련 레지스터를 데이터시트에서 찾아보았습니다.
GPIOA ~ GPIOK까지 총 11개의 GPIO 그룹이 있으며 주소 0x4002000 ~ 0x40022BFF까지 할당되어져 있습니다.
STM32F746NG에서의 사용하는 GPIO 레지스터 맵은 아래와 같습니다.
각 레지스터를 간단히 살펴보면 아래와 같으며 자세한 내용은 en.DM00124865.pdf를 참고하시면 됩니다.
GPIO port mode register
- input/output/alternate function/analog 모드로 설정할 수 있습니다.
GPIO port output type register
- push-pull/open-drain 타입으로 설정할 수 있습니다.
GPIO port output speed register
- low/medium/high/very high 속도를 선택할 수 있습니다.
GPIO port pull-up/pull-down register
- no/pull-up/pull-down 으로 설정할 수 있습니다.
GPIO port input data register
GPIO port output data register
- input/output 데이터를 읽거나 쓸 수 있습니다.
GPIO port bit set/reset register
- 해당하는 포트의 비트값을 set/clear 할 수 있습니다.
GPIO port configuration lock register
- gpio에 lock을 걸어 세팅된 내용을 고정시킬 수 있습니다.
GPIO alternate function low register
GPIO alternate function high register
- GPIO 포트를 다른 기능의 핀으로 재할당할 수 있습니다.
- Alternate Function(AF) 사용시 설정 AF 관련해서 reference manual에 대략적인 내용만 나와있으며 세부적인 내용은 en.DM00166116.pdf를 참고하시면 됩니다.
아래 보시는 것과 같이 AF0~AF15까지 기능들이 이미 할당되어져 있으며 해당 포트를 아래와 같은 기능으로 전환하여 사용할 수 있습니다. 총 13 페이지의 내용으로 구성되어 있으며 여기서는 처음 4개만 발췌 하였습니다.
자세한 내용은 en.DM00166116.pdf의 76 페이지를 참고하시기 바랍니다.
위의 내용은 CubeMX의 pin, gpio configuration에서 설정할 수 있으며 프로젝트로 export 하면 main.c 소스에서 관련 gpio 초기화하는 부분에서도 확인 가능합니다.
STM32F746G-DISCO 보드의 후면에는 아두이노 보드와 동일한 구조의 커넥터를 가지고 있습니다.
아래 회로도를 보시면 아두이노와 마찬가지로 기본적인 blink에 사용되는 LED는 D13번 포트로 동일한 번호를 사용하고 있습니다. 그래서 이번 GPIO 테스트는 간단히 D13번 포트를 ON/OFF 토글 시켜 LED를 깜박이는 동작을 테스트해 보겠습니다.
STM32CubeIDE에서 GPIO라는 이름으로 새 프로젝트를 생성합니다.
간단히 GPIO 포트를 ON/OFF 하는 테스트만 하기 때문에 우선 사용하지 않는 다른 디바이스들은 모두 초기화를 하였습니다.
초기화 방법은 아래 게시글을 참고하시기 바랍니다.
[STM32F746G-DISCO] 핀 설정 일괄 해제
CubeIDE를 사용하여 프로젝트를 생성하면 아래와 같이 기본적으로 주변 장치들도 같이 생성됩니다.아래 이미지의 녹색으로 보여주는 핀들이 모두 사용되는 핀입니다.모든 기능을 잘 알고 있는 경
rudalskim.tistory.com
GPIO를 사용하기 위한 설정은 간단합니다.
회로도에서 본 D13번 핀(STM32F746G-DISCO의 PI1 포트)을 CubeMX에서 찾아서 GPIO 출력으로 설정한 후 main 함수에서 GPIO를 toggle 시키는 코드를 추가해 주면 됩니다.
새 프로젝트를 생성 후 왼쪽 소스 트리의 GPIO.ioc 파일을 엽니다.
아래 부분에 PI1을 입력하여 해당 핀을 찾은 후 검색된 핀을 마우스 왼쪽 버튼으로 클릭하면 해당 핀이 사용 가능한 펑션들이 나오는데 GPIO_Output을 선택합니다.
왼쪽의 카테고리의 System Core에서 GPIO를 선택하면 GPIO 리스트창이 나오는데 PI1핀을 선택 후 맨 아래쪽의 'User Label'에 D13이라고 적습니다. 왼쪽 위쪽 툴바의 톱니바퀴 모양을 클릭하여 현재 설정을 기준으로 소스를 생성시킵니다. 왼쪽 소스 트리의 코드들이 정리가 되고 필요한 내용의 코드들로 재생성되어졌습니다.
만약 클럭 관련 에러가 발생되면 노란색 탭을 선택합니다. (경우에 따라 자동으로 탭 전환이 되기도 합니다.)
클럭 관련 에러를 자동 수정하겠냐는 메시지 창이 나오는데 'Yes'를 눌러 자동으로 클럭 설정을 해 줍니다.
같은 방법으로 왼쪽 위쪽의 톱니바퀴를 클릭하여 코드를 재생성해 줍니다.
왼쪽 소스 트리에서 Core/Src/main.c를 연 후 while문 안쪽에 GPIO포트를 토글 시키는 코드를 추가합니다.
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_GPIO_TogglePin(D13_GPIO_Port, D13_Pin);
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
메뉴의 RUN을 눌러 빌드와 다운로드를 실행 시킵니다. 정상적으로 다운로드된 경우 아래와 같은 로그가 나옵니다.
STM32F746G-DISCO 보드의 후면에 녹색 LED가 있는데 1초간격으로 깜박깜박이며 GPIO가 정상적으로 토글 동작됨을 확인할 수 있습니다.
'Hardware > STM32' 카테고리의 다른 글
STM32CubeIDE에서 시리얼 터미널 설치하기 (0) | 2024.07.05 |
---|---|
[STM32F746G-DISCO] 하드웨어 살펴보기 (0) | 2024.07.03 |
[STM32F746G-DISCO] 핀 설정 일괄 해제 (0) | 2024.07.02 |
[STM32F746G-DISCO] 개발 환경 설정하기 (0) | 2024.07.02 |
[STM32F746G-DISCO] IAP 사용하기 (1) | 2024.03.16 |
댓글