본문 바로가기

개발환경/STM32CubeMX

GPIO(LED) 설정 - STM32F030F4P6

MCU는 STM32F030F4P6을 사용하였고 관련 데이터 시트는 아래 첨부했습니다.

STM32F030F4P6_Reference Manual.pdf
11.46MB

 

GPIO output level - Low/High

GPIO 내장 주변장치의 레지스터 설정의 초기화가 끝난 이후에 해당 GPIO 핀의 출력 상태를 지정할 수 있는 속성이다.

위의 회로는 GPIO 핀이 논리값 High 일 때 점등이 되고, 논리값 Low일 때 소등되는 구조로 동작한다.

만약 여기서 GPIO output levelLow로 설정한다면, GPIO 내장 주변장치의 레지스터 설정의 초기화가 끝난 이후에 해당 GPIO 핀의 출력 상태가 Low가 되어 LED가 소등되어 있는 상태가 된다.

하지만 High로 설정한다면 해당 GPIO 핀의 출력 상태가 High이므로 LED가 점등되어 있는 상태가 된다.

정리하면, Low면 초기 값이 0V로 출력되고, High면 초기 값이 3.3V로 출력된다.

 

GPIO mode - Output Push Pull/ Output Open Drain

Push Pull & Open DrainOutput 모드일 경우 사용한다.

1. Push Pull

‘GPIO HIGH로 설정해 줘라고 메모리에 1이라는 값을 적으면 sw1이 닫히면서 GPIO3.3v가 나온다.

‘GPIOLOW로 설정해 줘라고 메모리에 0이라는 값을 적으면 sw2이 닫히면서 GPIO0v가 나온다.

 

실제 BJT, MOSFET의 Push Pull 회로

 

2. Open Drain

‘GPIOHIGH로 설정해 줘라고 메모리에 1이라는 값을 적으면 sw2가 닫히면서 GND와 연결되어 GPIO0v(Low level)가 나온다.

‘GPIO LOW로 설정해 줘라고 메모리에 0이라는 값을 적으면 sw2가 열리면서 floating상태가 된다.

 

실제 BJT, MOSFET의 Open Drain 회로

 

Open Drain 을 사용하는 이유

MCU에서 나오는 전압은 3.3v로 정해져 있다.

그래서 MCU에서 더 높은 전압을 만들어내려면 별도의 회로가 필요하다.

또한 내가 구한 칩이 3.3v가 아니라 5v에서 동작한다고 하면 5v가 공급되어야 하는데 3.3v를 넣어봤자 의미가 없다.

그래서 위처럼 회로를 구성한다.

스위치를 닫히면 5v가 그라운드 쪽으로 흐르고, 열면 칩으로 흐른다.

 

결론

Push PullMCU에서 제공하는 3.3v를 넣느냐 0v를 넣느냐를 가지고 노는 것이고,

Open Drain은 단순히 그라운드를 열었다 닫았다만 한다.

여기서는 0v도 만들고 3.3v도 만들어야 되는 상황이기 때문에 Push Pull을 사용한다.

 

GPIO Pull-up/Pull-down - No pull-up and no pull-down/Pull-up/Pull-down

Pull-up & Pull-downInput 모드에서 사용하지만 Open drain일 경우에는 Output에서도 설정할 수 있으며 의미를 갖는다.

앞서 Open-drain에서 Open-drain을 사용하는 경우에 대하여 설명했다.

위 그림처럼 Open-drain에서 Pull-up저항을 달면 의미가 있다.

MCU에서 Output1로 하면 sw2가 닫히면서 IC CHIP0V가 들어가면서 꺼지고, Output0으로 하면 sw2가 열리면서 IC CHIP5V가 들어가면서 켜진다.

외부의 전압을 가지고 제어할 때 Open-drainPull-upOutput으로 설정하면 외부 회로와 같이 결합해서 사용될 수 있다.

하지만 여기서는 외부의 전압을 가지고 제어하는 경우가 아니므로 No pull-up and no pull-down으로 설정했다.

 

Maximum output speed - Low/Medium/High

Output 모드에서 사용하는 설정이다.

GPIOHIGH에서 LOW로 떨어뜨리거나 LOW에서 HIGH로 올릴 때는 시간이 필요하다.

Maximum output speed는 이 시간에 대한 설정이다.

디지털 신호는 이론상 아래의 그림과 같다.

 

하지만 실제로는 아래의 그림과 같이 HighLow사이에 시간이 필요하다.

이 시간을 최대한 빠르게 하고 싶다면 Maximum output speedHIGH로 설정하면 된다.

 

<사용 예>

GPIOI2CSPI 신호를 만들어낼 수도 있는데, 아래의 그림처럼 MCU에서 신호를 만들어서 보낸다고 하자.

그런데 A가 엄청 고속으로 받아들이는 장치라면 HIGHLOW 사이의 시간이 오래 걸리면 MCU가 만들어낸 신호를 제대로 받아들이지 못한다.

따라서 고속으로 HIGHLOW가 변경되어야 될 때 Maximum output speedHIGH로 설정한다.

 

최종 설정 및 정리

 

위의 회로는 GPIO핀이 논리값 High 일 때 점등되고, 논리값 Low일 때 소등되는 구조로 동작한다.

따라서 GPIO output levelLow로 설정하여, 프로그램이 시작되면 LED는 소등되게 했다.

그리고 Output Push Pull 모드이므로 High일 때 3.3V가 출력되고, Low일 때 0V가 출력된다.

, GPIO PA9핀에 High를 주면 3.3V가 출력되어 LED가 점등되고, Low를 주면 0V가 출력되어 LED가 소등된다.

GPIO Pull-up/Pull-downInput 모드가 아니므로 no pull-up and no pull-down으로 설정했고, 해당 핀으로 LED 제어가 목적이지 I2C와 같은 신호를 만들지 않기 때문에 Maximum output speedLow로 설정했다.

'개발환경 > STM32CubeMX' 카테고리의 다른 글

GPIO(스위치) 설정 - STM32F030F4P6  (0) 2023.11.18
Debug 설정 - STM32F030F4P6  (1) 2023.11.18
ADC 설정 - STM32F030F4P6  (1) 2023.11.18
UART(RS-485) 설정 - STM32F030F4P6  (1) 2023.11.18
타이머 설정 - STM32F030F4P6  (1) 2023.11.18