관련글
잡동사니 세상 :: stm32 레지스터 직접 접근 (4. GPIO [Output]) (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으로 설정하면 됩니다.
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 모드로 설정합니다.
'stm32 > 강좌' 카테고리의 다른 글
stm32 레지스터 직접 접근 (5. Exception / Interrupt [인터럽트 설정 Part 02]) (0) | 2021.03.01 |
---|---|
stm32 레지스터 직접 접근 (5. Exception / Interrupt [설명 & 코드 Part 01]) (0) | 2021.02.27 |
stm32 레지스터 직접 접근 (4. GPIO [Output Part 01]) (7) | 2021.02.13 |
stm32 레지스터 직접 접근 (3. RCC) (2) | 2021.02.09 |
stm32 레지스터 직접 접근 (2. 프로그램 설치 및 설정) (0) | 2021.02.08 |