Toby's Study Blog
article thumbnail

๐Ÿ’ก ์š”์•ฝ ์„ค๋ช…

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

STM32 ์—์„œ์˜ GPIO ๋ธ”๋Ÿญ๋„

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์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ
์ฝ์–ด๋“œ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

Push & Pull Phase

Open Drain ์ถœ๋ ฅ ๋ฐฉ์‹

N-MOS๋งŒ ์‚ฌ์šฉํ•˜์˜€์„ ๊ฒฝ์šฐ์— ํ•ด๋‹นํ•˜๋ฉฐ Push / Pull ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ
MCU๊ฐ€ Vdd์— ์—ฐ๊ฒฐ๋˜์—ˆ์„ ๊ฒฝ์šฐ Floating ์ƒํƒœ๊ฐ€ ๋˜์–ด 0 ๋˜๋Š” 1์˜ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์™ธ๋ถ€ ์†Œ์ž์˜ ์ €ํ•ญ์„ ์ด์šฉํ•ด์„œ 
๋ถˆ์•ˆ์ •ํ•œ ์ถœ๋ ฅ ์ „๋ฅ˜๋ฅผ ์ œ์–ดํ•œ๋‹ค.
(โ€ป ์—ฌ๋Ÿฌ ์†Œ์ž์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅ ์‹œ์ผœ์•ผํ•˜๋Š” ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์™ธ๋ถ€ ์†Œ์ž์—์„œ ์ถœ๋ ฅ์„ ์ œ์–ดํ•ด์•ผํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.) 

 

   โ€ป) ํ”Œ๋กœํŒ… ํ˜„์ƒ

ํ”Œ๋กœํŒ… ํ˜„์ƒ ์›์ธ

์ฒซ ๋ฒˆ์งธ ๊ทธ๋ฆผ์—์„œ MCU์— 5V ์ „์••์ด ์ธ๊ฐ€๋˜์–ด High(1) ์‹ ํ˜ธ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
๋‘ ๋ฒˆ์งธ ๊ทธ๋ฆผ์—์„œ๋Š” 5V๊ฐ€ ์ธ๊ฐ€๋˜๊ณ  ์žˆ์ง€ ์•Š์œผ๋‚˜ ์ž”๋ฅ˜ ์ „๋ฅ˜, ์ •์ „๊ธฐ ๋“ฑ์˜ ์ด์œ ๋กœ Low(0) ์‹ ํ˜ธ์™€ High(1) ์‹ ํ˜ธ๊ฐ€
๋ถˆ๊ทœ์น™์ ์œผ๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค...
์ „์›์ด ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์•˜์„ ๋•Œ MCU๋ฅผ GND์— ์—ฐ๊ฒฐํ•ด ์ž”๋ฅ˜ ์ „๋ฅ˜, ์ •์ „๊ธฐ ๋“ฑ์„ ์ œ๊ฑฐํ•ด ์ฃผ๋Š” ํšŒ๋กœ๊ฐ€ ํ’€์—…, ํ’€๋‹ค์šด ํšŒ๋กœ์ด๋‹ค.

 

๐Ÿ’ก ์ฐธ๊ณ  ๋งํฌ

https://m.blog.naver.com/hhs4040/221543558686

'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
profile

Toby's Study Blog

@Toby12

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!

๊ฒ€์ƒ‰ ํƒœ๊ทธ