본문 바로가기

공부/STM32F1

3.[stm32f103][hal] GPIO 입출력

728x90
반응형

1. 설명

처음 ARM을 배울때만해도 HAL 이라는 개념이 없이  Struct을 통해서 설정을 일일이 다 했습니다.~

하지만 HAL 드라이버가 나옴으로써 그럴 필요가 없어지고 간편해진거 같습니다..

HAL 드라이버를 쓰기 위해서는 CUBE를 통해서 다운로드를 자동으로 지원해주고 있어서 너무 편해요~

Pull up Pull Down

push pull
open drain

2. CUBE 실행 하기

 

 

 

 

 

해당하는 MCU를 선택한 다음에 START Project를 누르면 자동으로 다운로드가 시작 됩니다.

저같은 경우는 stm32f103vct6 이라서 stm32f103vctx를 선택했습니다. 

 

 

3. 입출력 설정하기

 

 

이것 같은 경우도 조심해야될게 저같은 경우는 st-link/v2를 써서 디버깅을 합니다.

이경우 sys 부분을 설정 하지 않으면 "Fatal error: ST-LINK, No MCU device found" 라는 에러 메세지를 볼수 있을 겁니다.

이런 오류가 나는 이유가 디버깅을 하려면 SWDIO,SWCLK pin 을 설정해야 작동을 하는데 설정을 안했기 때문입니다.

오류 해결 부분은 다음 부분에 따로 올리겠습니다. 

http://hnydiy.tistory.com/15   <---오류 해결 방법

 

 

 

 

 

 

5. IAR 에서 설정하기 및 소스 해석

파일 및 부분을 오론쪽 클릭하면 Option... 부분을 클릭해서

Device 부분을 클릭해서 선택 해줍니다.

그리고 저는 st-link를 쓰기 때문에 저렇게 따로 설정해줬습니다.

 

 

 

 

 

 

    if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==1)   HAL_GPIO_WritePin(GPIOE,GPIO_PIN_4,GPIO_PIN_SET);
     else       HAL_GPIO_WritePin(GPIOE,GPIO_PIN_4,GPIO_PIN_RESET); 

    

     main.c 부분에 윗 소스를 넣으시면 스위치를 누를 때마다 LED가 들어오시는 것을 확인 하실수 있겟습니다~

 

 

 

2번쨰 방법

 

BSRR 레지스터를 사용하여 셋팅과 리셋을 합니다.

BS 비트는 셋

BR 비트는 리셋

 

다만 리셋같은 경우 전용 레지스트가 있기때문에 리셋은 BRR 레지스트를 이용합니다.

GPIOC->BRR = ((uint16_t)0xffff); // All reset

 

이런식으로 하면 모든 비트가 리셋이 됩니다.

 

728x90
반응형