32F429IDISCOVERY 직접 레지스터로 GPIO 제어

2019. 6. 11. 04:12임베디드/32F429IDISCOVERY

[출처] https://cafe.naver.com/stm32study

위 카페에서 진행하는 STM32 세미나를 통해 얻은 내용들을 바탕으로 재구성했다

 

개발환경

1. Atollic TrueSTUDIO for STM32 9.3.0

2. STM32CubeMX 5.2.1

3. ST_HAL_Library

 

이 포스팅에서 진행하는 예제는 2, 3번을 사용하지않는 직접 레지스터에 작성하게 된다

 

1. Atollic TrueSTUDIO을 열고, 새로운 C 프로젝트를 생성한다

 

2. Embedded C project로 새로운 프로젝트를 생성한다. 그리고 타겟 하드웨어를 stm32f429ZI로 설정한다. 기본 설정은 default로 하고 넘어간다. 또 TrueSTUDIO 소프트웨어 구성도 넘어가고, 디버거는 내장되어 있는 stlink로 사용할 것이기 때문에 수정을 꼭 해주자. 그리고 완료를 눌러주자

 

 

3. 소스코드를 작성할 것이다. 미리 말했듯이 레지스터 주소에 직접 작성하는 것이라 어떠한 헤더파일에도 의존하지 않는 프로그램 작성이다. 따라서 생성된 src 폴더에 main.c에 있는 모든 내용들은 지우고 다음과 같이 타이핑을 한다. 다만, volatile 주제로 논의한 것이 있어 volatile로 설정은 마음이지만 기입을 추천한다

 

*만일 optimization level이 -Os라면 레지스터, delay 함수 모두 최적화된다

[링크] https://cafe.naver.com/stm32study/1178 내용과 [현수]님의 댓글을 참고하자

 

 

소스코드의 내용은 간략하게 2가지를 설정하고 있다

1. GPIO를 실행하려면 GPIO가 위치한 버스를 활성화해야한다. 활성화는 결국 클럭을 동작시키는 것이다. 이 부분이 RCC_AHB1ENR다. GPIOG는 AHB1 버스에 위치해 있다. 메모리 맵을 참고해보자

 

2. GPIO 출력모드에 대한 설정을 하고, toggle을 하는 예제다

 

이론적인 내용은 따로 포스팅을 해보도록 하겠다