본문 바로가기

stm32 레지스터 직접 접근 (4. GPIO [Input Part 02])

반응형

관련글


잡동사니 세상 :: stm32 레지스터 직접 접근 (4. GPIO [Output]) (tistory.com)

 

stm32 레지스터 직접 접근 (4. GPIO [Output])

관련글 잡동사니 세상 :: stm32 레지스터 직접 접근 (4. GPIO [Input]) (tistory.com) stm32 레지스터 직접 접근 (4. GPIO [Input]) 관련글 잡동사니 세상 :: stm32 레지스터 직접 접근 (소개) (tistory.com) 잡동..

pkr7098.tistory.com


잡동사니 세상 :: stm32 레지스터 직접 접근 (소개) (tistory.com)

잡동사니 세상 :: stm32 레지스터 직접 접근 (0. Microcontroller와 ARM ) (tistory.com)

잡동사니 세상 :: stm32 레지스터 직접 접근 (1. STM32F10x란) (tistory.com)

잡동사니 세상 :: stm32 레지스터 직접 접근 (2. 프로그램 설치 및 설정) (tistory.com)

잡동사니 세상 :: stm32 레지스터 직접 접근 (3. RCC) (tistory.com)

잡동사니 세상 :: stm32 레지스터 직접 접근 (4. GPIO [Output]) (tistory.com)

잡동사니 세상 :: stm32 레지스터 직접 접근 (5. Exception / Interrupt [설명 & 코드 Part 01]) (tistory.com)

잡동사니 세상 :: stm32 레지스터 직접 접근 (5. Exception / Interrupt [인터럽트 설정 Part 02]) (tistory.com)

stm32 레지스터 직접 접근 (5. Exception / Interrupt [중요 레지스터들 Part 03]) (tistory.com)


서론


STM32에는 Output 외에 Input가 있습니다. Input 모드는 다시 4개로 나눠져 Input analog, Input floating, Input pull-up, Input pull-down가 있습니다. Input analog 모드는 ADC 기능을 사용할 때 설정하는 모드이기 때문에 나중에 다시 다루도록 하겠습니다. 그 외에 나머지 3개의 모드는 사용자가 회로를 어떻게 구성하냐에 따라 그에 맞게 설정해야하며, 외부 인터럽트 등의 특수 기능을 사용할 때도 설정되어야하는 모드들 입니다.

입력 형태 ODR 상태 설명 1 설명 2
Input floating 상관 없음 플로팅 상태가 요구될 때 사용하는 모드입니다. .
Input pull-down Low 내부 Pull-down 저항 회로를 사용하는 모드입니다. ODR 비트가 0이어야 합니다.
Input pull-up High 내부  Pull-up 저항 회로를 사용하는 모드입니다. ODR 비트가 1이어야 합니다.

 

Input 모드들로 설정했을 경우, IDR 레지스터를 통해 해당 핀의 상태를 확인할 수 있습니다.

Input 모드들은 각각에 대해 알고 있을 것이라 생각되기에 설명은 넘어가겠습니다.

STM32_Examples/Ex_05_GPIO_Input at master · KwangryeolPark/STM32_Examples (github.com)

(GPIO 관련 파일은 res -> gpio.h에 있습니다.)


Input floating

Input pull-down

Input pull-up


참고 자료


STM32F103ZET6 Reference Manual

 

Section 3.3 [Memory map] (

Section 9.1 [GPIO functional description] (161 page)

Section 9.2.1 [Port configuration register low] (171 page)

Section 9.2.2 [Port configuration register high] (172 page)

Section 9.2.3 [Port input data register] (172 page)

Section 9.2.4 [Port output data register] (173 page)

 

Input floating


Input floating은 서론에서 언급되었던 것처럼 CNF[1:0]을 01로, MODE[1:0]을 00으로 설정하면 됩니다.

그림 01 161 page [Port bit configuration table]

PC0을 Floating모드로 설정하고 싶다면 다음과 같이 설정하면 됩니다.

GPIOC -> CRL |= (1 << CNF0);	// CNF[1:0]를 01로 설정합니다.
GPIOC -> CRL &= ~(3 << MODE0);	// MODE[1:0]을 00으로 설정합니다.

 

Input pull-down

PC4를 Pull-down 모드로 설정하고 싶다면 다음과 같이 설정하면 됩니다.

GPIOC -> CRH |= (2 << CNF4);	
GPIOC -> CRH &= ~(3 << MODE4);
// Input pull-down / pull-up 모드로 설정합니다.

GPIOC -> ODR &= ~(1 << 4); // Input pull-down 모드로 설정합니다.

우선 CRH의 CNF4[1:0]을 10, MODE4[1:0]을 00으로 설정하여 Input pull-down / pull-up 모드로 설정합니다. 그런 다음 ODR의 4번째 비트를 0으로 만들어 최종적으로 Input pull-down 모드로 설정합니다.

 

Input pull-up

PG0를 Pull-up 모드로 설정하고 싶다면 다음과 같이 설정하면 됩니다.

GPIOG -> CRL |= (2 << CNF0);
GPIOG -> CRL &= ~(3 << MODE0);

GPIOG -> ODR |= (1 << 0);

우선 CRL의 CNF0[1:0]을 10, MODE0[1:0]을 00으로 설정하여 Input pull-down / pull-up 모드로 설정합니다. 그런 다음 ODR의 0번째 비트를 1로 만들어 최종적으로 Input pull-up 모드로 설정합니다.

반응형