๐ก ์์ฝ ์ค๋ช
General Purpose Input Output ๋?
MCU์ ์ฐ๊ฒฐ๋ ์์ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด MCU์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์๋ฏธ Input Mode์ Output Mode๊ฐ ์๋ค.
- ์
๋ ฅ ๋ชจ๋(GPIO Input)
MCU์ ํ์ ํตํด ์ฐ๊ฒฐ๋ ์ ์ ์ฅ์น๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ ์๊ฒ ํ๋ Mode
๋์งํธ ๊ฐ์ ์ ๋ ฅ๋ฐ์ ๋์๋ ํ๋กํ ํ์(โป ์๋์ ์ค๋ช )์ ์ ๊ฑฐํ๊ธฐ ์ํด Pull-up ๋๋ Pull-down ํ๋ก๋ฅผ ์ฌ์ฉํ๋ฉฐ
์๋ ๋ก๊ทธ ๊ฐ์ ์ ๋ ฅ๋ฐ์ ๋์๋ GPIO ํ์ ํตํด ์๋ ๊ทธ๋๋ก์ ์๋ ๋ก๊ทธ ์ ์ ๊ฐ์ ์ธก์ ํด์ผ ํ๋ฏ๋ก Pull-up ๋ฐ
Pull-down ํ๋ก๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
TTL ์๋ฏธํธ ํธ๋ฆฌ๊ฑฐ ๋ผ๊ณ ํ๋ ์์๋ฅผ ์ฌ์ฉํ๋ค.
- ์ถ๋ ฅ ๋ชจ๋(GPIO Output)
MCU์ ํ์ ํตํด ์ฐ๊ฒฐ๋ ์ ์ ์ฅ์น์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ์ด ํน์ ๋์์ ์ํํ ์ ์๊ฒ ํ๋ Mode
์ถ๋ ฅ ๋ฐฉ์์๋ Push/Pull ์ถ๋ ฅ ๋ฐฉ์๊ณผ ์คํ ๋๋ ์ธ ์ถ๋ ฅ ๋ฐฉ์์ด ์๋ค.
GPIO Input / Output์ DDRx, PORTx, PINx ๋ผ๋ ๋ ์ง์คํฐ๋ฅผ ํตํด ์ฌ์ฉํ ์ ์์ผ๋ฉฐ
MCU์ ๋๋ถ๋ถ์ ํฌํธ๋ ํด๋น ๋ ์ง์คํฐ๋ค์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ํฌํธ์์ GPIO๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
(โป F429zi ๊ธฐ์ค 114ํ์ ์
์ถ๋ ฅ ํ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ)
DDRX(Data Direction Register)
- GPIO Mode๋ฅผ Input ๋๋ Output์ผ๋ก ์ค์ ํ ๋ ์ฌ์ฉํ๋ ๋ ์ง์คํฐ
- 0์ ์ ๋ ฅํ๋ฉด ํด๋น ํฌํธ๋ ์ ๋ ฅ์ฉ ํฌํธ๋ก, ๋ฐ๋๋ก 1์ ์ ๋ ฅํ๋ฉด ์ถ๋ ฅ์ฉ ํฌํธ๊ฐ ๋๋ค.
PORTX
- ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ ๋ ์ฌ์ฉํ๋ ๋ ์ง์คํฐ
- ์ถ๋ ฅ์ ์ํ๋ ๋ฐ์ดํฐ๊ฐ์ ๋ ์ง์คํฐ์ ๋ฃ์ด์ฃผ๋ฉด ์ธ๋ถ ์์๋ ํด๋น ๋ฐ์ดํฐ๊ฐ์ ์ฝ์ด๋๋ฆด ์ ์๋ค.
PINX
- ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ ๋ ์ฌ์ฉํ๋ ๋ ์ง์คํฐ
- ํด๋น ๋ ์ง์คํฐ๋ฅผ ํตํด ์ธ๋ถ ์์๋ก๋ถํฐ ์ํ๋ ์ ๋ ฅ๊ฐ์ ์ฝ์ด๋๋ฆด ์ ์๋ค.
SFIOR(Special Function IO Register)
- ๊ฐ์ข ํน์ ๊ธฐ๋ฅ์ ์ ์ดํ๊ธฐ ์ํ ๋ ์ง์คํฐ
- e.g) ํ์ ์ ํญ์ ๋นํ์ฑํํ ์ ์๋ค.
๐ก GPIO Block Diagram
GPIO ๋ธ๋ญ๋๋ STM32 ์ธ์ ๋ค๋ฅธ MCU ์์๋ ๋น์ทํ๊ฒ ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ ์ค๋ฅธ์ชฝ ๋ถํฐ ๋ณด๋ฉด ๋๋ค.
๋จผ์ ๋งจ ์ค๋ฅธ์ชฝ Protecition diode๋ฅผ ํตํด ํ์ค ์
๋ ฅ ์ ์(e.g. 3.3V or 5V)๋ณด๋ค ๋๊ฒ ๋ค์ด์จ ๊ฒฝ์ฐ ์ ๋ฅ๋ฅผ ๋ค์ด์ค๋์ ๋ณด๋ด
ํ์ค ์
๋ ฅ ์ ์ ๋ณด๋ค ๋์ ์ ์์ด ๋ค์ด์ค๋ ๊ฒ์ ๋ง์ผ๋ฉฐ ํ๋ก๋ฅผ ๋ณดํธํ๋ค.
Pull up, Pull down ์ค ์ฌ์ฉํ ํ๋ก๋ฅผ ์ ํํ๊ณ ์
๋ ฅ์ด๋ฉด ์์ชฝ Input driver๋ฅผ ์ถ๋ ฅ์ด๋ฉด ์๋์ชฝ output driver๋ฅผ ์ ํํ๋ค.
TTL ์๋ฏธํธ ํธ๋ฆฌ๊ฑฐ
TTL ๋ก์ง์ ํตํด ํ์ค ์ ์์ ๋ถํฉํ ์ ์์ด ๊ณต๊ธ๋ ๊ฒฝ์ฐ High(1), ๋ฏธ๋ง์ ์ ์์ด ๊ณต๊ธ๋ ๊ฒฝ์ฐ Low(0)์ ๋ฐํํ๊ณ
์๋ฏธํธ ํธ๋ฆฌ๊ฑฐ ๋ก์ง์ ํตํด ๋
ธ์ด์ฆ๋ฅผ ์ค์ด๊ณ Input data register์ ์ ์ฅ๋ ๊ฐ์ ์ฝ์ด๋๋ฆด ์ ์๊ฒ ๋๋ค.
Push / Pull ์ถ๋ ฅ ๋ฐฉ์
๊ฐ์ฅ ํ๋จ P-MOS, N-MOS๋ก ์ด๋ฃจ์ด์ง ํ๋ก์์ ๋ ์์๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ๊ฒฝ์ฐ์ ํด๋นํ๋ฉฐ
MCU์ Vdd๊ฐ ์ฐ๊ฒฐ๋์์ ๊ฒฝ์ฐ Push ์ํ๊ฐ ๋์ด Output pin์ High(1)์ Push ํ๋ค.
๋ฐ๋๋ก MCU์ Vdd๊ฐ ์ฐ๊ฒฐ๋์ง ์์์ ๊ฒฝ์ฐ Pull ์ํ๊ฐ ๋์ด Output pin์ Low(0)๋ฅผ Pull ํ๋ค.
๋ฐ๋ผ์ Vdd๊ฐ ์ฐ๊ฒฐ๋์์์ ์ธ๋ถ ์์๊ฐ ๊ฐ์งํ ์ ์๊ฒ ํ์ฌ ์ธ๋ถ์์๋ Output data register์์ ๋ฐ์ดํฐ๋ฅผ
์ฝ์ด๋๋ฆด ์ ์๊ฒ ๋๋ค.
Open Drain ์ถ๋ ฅ ๋ฐฉ์
N-MOS๋ง ์ฌ์ฉํ์์ ๊ฒฝ์ฐ์ ํด๋นํ๋ฉฐ Push / Pull ๊ณผ๋ ๋ค๋ฅด๊ฒ
MCU๊ฐ Vdd์ ์ฐ๊ฒฐ๋์์ ๊ฒฝ์ฐ Floating ์ํ๊ฐ ๋์ด 0 ๋๋ 1์ ์ํ๊ฐ ๋๋ค. ๋ฐ๋ผ์ ์ธ๋ถ ์์์ ์ ํญ์ ์ด์ฉํด์
๋ถ์์ ํ ์ถ๋ ฅ ์ ๋ฅ๋ฅผ ์ ์ดํ๋ค.
(โป ์ฌ๋ฌ ์์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ ์์ผ์ผํ๋ ํด์ผํ๋ ๊ฒฝ์ฐ ์ธ๋ถ ์์์์ ์ถ๋ ฅ์ ์ ์ดํด์ผํ ๋ ์ฌ์ฉํ๋ค.)
โป) ํ๋กํ ํ์
์ฒซ ๋ฒ์งธ ๊ทธ๋ฆผ์์ MCU์ 5V ์ ์์ด ์ธ๊ฐ๋์ด High(1) ์ ํธ๊ฐ ์ถ๋ ฅ๋๋ค.
๋ ๋ฒ์งธ ๊ทธ๋ฆผ์์๋ 5V๊ฐ ์ธ๊ฐ๋๊ณ ์์ง ์์ผ๋ ์๋ฅ ์ ๋ฅ, ์ ์ ๊ธฐ ๋ฑ์ ์ด์ ๋ก Low(0) ์ ํธ์ High(1) ์ ํธ๊ฐ
๋ถ๊ท์น์ ์ผ๋ก ๋ํ๋๋ค...
์ ์์ด ์ฐ๊ฒฐ๋์ง ์์์ ๋ MCU๋ฅผ GND์ ์ฐ๊ฒฐํด ์๋ฅ ์ ๋ฅ, ์ ์ ๊ธฐ ๋ฑ์ ์ ๊ฑฐํด ์ฃผ๋ ํ๋ก๊ฐ ํ์
, ํ๋ค์ด ํ๋ก์ด๋ค.
๐ก ์ฐธ๊ณ ๋งํฌ
'embedded' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[stm32] UART ์ค์ต (0) | 2023.08.30 |
---|---|
[stm32] UART ์ด๋ก ์ ๋ฆฌ (0) | 2023.08.16 |
[stm32] Timer ์ค์ต (0) | 2023.08.16 |
[stm32] Timer ์ด๋ก ์ ๋ฆฌ (0) | 2023.08.16 |
[stm32] GPIO ์ค์ต (0) | 2023.08.13 |