본문 바로가기
Firmware Programming

[STM32F429ZI] GPIO를 통한 8Unit-LED 제어

by TYB 2023. 10. 20.
반응형

오늘 사용할 부품은 아래 부품들이다.

 

8 Unit LED는 LED BAR라고도 부르며 자세한 내용은

 

[전자회로] 8Unit LED Array

내가 갖고있는 8Unit LED Array는 아래의 파트넘버를 가진 red 버전이다 제품번호가 있는 쪽이 애노드(+) 반대쪽이 cathode가 되겠다.

program-developers-story.tistory.com

거기에 같이 연결되어 있는부품은 array 저항으로 9pin이다.  부품을 보다보면 끝에 점이 있을건데 그 부분을 LED BAR의 핀과 어긋나게 꽂아주고 그럼 나머지 8개는 다 맞겠죠? 점 부분을 GND에 연결해준다.

 

Array 저항은 다음 참고

 

[전자회로] 어레이 저항

어레이 저항에 글자를 해석해보자면 ex) ·9A331G(총핀은 9개고 저항은 33*10Ω 오차범위: ±5) 사용할때에는 ·있는 부분을 GND로 빼주고 나머지는 다른 소자의 -단에 연결

program-developers-story.tistory.com

 

led array 0->stm32의 pd0    ~      led array 7->stm32의 pd7   점퍼선으로 연결해주자(핀맵 참고)

 

[STM32F429ZI] GPIO를 통한 LED 제어

GPIO(General Purpose Input Output) 범용 입출력 장치 다양한 용도로 사용하는 입출력 장치가 되겠다. 보드를 정면으로 바라봤을때 좌측라인이 아래 핀맵사진의 내용이다. 핀맵은 앞으로 전자회로 부품

program-developers-story.tistory.com

 

 

회로 구성이 끝났다면 CUBE IDE를 할 차례이다. 새 프로젝트를 다시 생성하면 세팅이 오래걸리기 때문에

지난 프로젝트가 저장되어있는 위치로 이동한다.

지난번 프로젝트를 통채로 복사하고 붙여넣은 후 이름을 바꿔준다.

02.STM32_LED_BAR라고 하겠다. 폴더 이름을 바꾸었다면 폴더 내부로 들어가서 Debug폴더와 Debug파일하나를 삭제해주고 기존 프로젝트 이름으로 되어있던 파일 2개의 이름을 새 프로젝트의 이름으로 바꿔주고 

프로젝트 더블클릭하지말고 메모장으로 열어준 후 내부에 프로젝트 이름을 새 프로젝트 이름으로 수정한 후 저장해주고 더블클릭으로 CUBE IDE를 열어주면 정상적으로 열렸다고 나온다.

 

 

 

HAL (HW Access Library) 말그대로 Hw에 액세스하기 쉽도록 지원해주는 라이브러리이다. 

관련된 함수들은 HAL_Driver안에 들어있다고 보면 되겠다.

이렇게 나오면 ioc로 들어가겠다. input output configuration으로 입출력 환경설정이라고 생각하면 되겠다.

해당 포트 좌클릭 후 MCU에서 출력을 해줘야  LED가 켜질테니 GPIO OUTPUT으로 세팅

                       ( led array 0->stm32의 pd0    ~      led array 7->stm32의 pd7 )

 



세팅이 완료되었으면 ioc 파일 저장하면 code generate를 하겠다고 한다. ok 눌러주면 main.c에 아래의 pin들에 대한 code가 추가되었음을 확인할 수 있다.

맞는지 확인하고 main.c의 main문 내부 while문에 아래 코드 작성.

돌리기 전에 컴파일러가 헷갈리지 않도록 1번 프로젝트는 close 해주자.

 

 

close 된 상태의 프로젝트

STM32 USB 연결 후 코드 디버깅 후 실행시키면 LED BAR의 불이 켜진 것을 확인 할 수 있다.

 

 

 

여기까지 되었다면 Inc 우클릭해서 파일추가 led.h 생성  src 우클릭해서 파일추가 led.c 생성

 

led.h

 

led.c
main.c User code pfp

반드시 저 주석들 사이에 넣어줘야한다. 그렇지 않으면 다음에 ioc 파일 세팅 후 저장할때 날라갈 수 있다.

마찬가지로 한글 주석도 main문에서는 ioc 코드생성할때 깨진다. 영어로 달아야한다!

 

main의 while문 위에 user code2에 led_main();을 친 후 디버깅 및 실행 진행하면 정상적으로 동작하는 것을 확인할 수 있다.

 

 

그러면 더 간략화 할 순 없을까?

led_all_on

 

led_all_off

이렇게 하면 코드를 간략화 할 수 있다.

 

원리는 8bit led 이고 PORT D의 0부터 7까지 연결을 해줬기 때문에 

모든 port(PD7~PD0)을 2진수로 표현한 값 1111 1111을 16진수로 적어준게 0xff 이고 이말은 즉 모든 LED가 대상이며, 그 뒤에 1과 0으로 다 1로 만들것인지 0으로 만들것인지를 결정하면 된다.

1로만들면 on 0으로 만들면 off가 되겠다.

 

 

 

 

[STM32F429ZI] GPIO를 통한 8Unit-LED 제어(2)

내용이 이어지니 이전 편을 보지 않았다면 보고 오도록 하자. [STM32F429ZI] GPIO를 통한 8Unit-LED 제어 오늘 사용할 부품은 아래 부품들이다. 8 Unit LED는 LED BAR라고도 부르며 자세한 내용은 [전자회로] 8

program-developers-story.tistory.com

 

반응형