NOTE : ๊ณต๋ถ€ํ•˜๋Š”๊ฒธ ์ ์€๊ฑฐ๋ผ ๋ถ€์ •ํ™•ํ•œ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

GPIO (General-Purpose Input/Ouput)

GPIO๊ฐ€ ๋ญ๋ƒ๊ณ  ํ•˜๋ฉด ๊ทธ๋ƒฅ ๋‚ด๊ฐ€ ๋ง˜๋Œ€๋กœ ์—ฌ๋Ÿฌ ๋ชฉ์ ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฒ”์šฉ ํ•€์ด๋‹ค.

GPIO ํ•€ ์„ค์ • ๊ณผ์ •

  1. GPIOํ•€์— clock ์ธ๊ฐ€
  2. MODER๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ํ†ตํ•ด ์–ด๋–ค ๋ชจ๋“œ๋กœ ์‚ฌ์šฉํ• ๊ฑด์ง€ ์„ค์ •
  3. ์‚ฌ์šฉ

GPIO ์—ฐ์Šต : ๋ณด๋“œ์˜ LED1 ๋ถˆ ์ผœ๊ณ  ๋„๊ธฐ

์—„์ฒญ ๊ฐ„๋‹จํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด์„œ GPIO๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ดค๋‹ค.

์ด๋ฒˆ์—๋Š” ๋ณดํ†ต ์ฒ˜์Œ ๋ฐฐ์šธ๋•Œ ๋งŽ์ด ํ•˜๋Š” ๋ณด๋“œ LED ๋ถˆ ์ผœ๊ณ  ๋„๊ธฐ๋ฅผ ํ•ด๋ดค๋‹ค.

GPIO ํ•€ ์ฐพ๊ธฐ

GPIO๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น LED๊ฐ€ ์–ด๋–ค ํ•€์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„์•ผํ•œ๋‹ค.

๋‚˜๋Š” ์—ฐ์Šต์šฉ ๋ณด๋“œ๋กœ stm32 uncleo f767zi์ธ๊ฐ€ ํ•˜๋Š” ๋ณด๋“œ๋ฅผ ์“ฐ๊ณ ์žˆ๋Š”๋ฐ ์ด ๋ณด๋“œ์˜ ๊ฒฝ์šฐ์—๋Š” LED ํ•€ ๋งตํ•‘ ์ •๋ณด๋ฅผ User Manual์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ณด๋ฉด LD1์€ PB0์— ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค๊ณ  ๋‚˜์™€์žˆ์œผ๋‹ˆ ๋‚ด๊ฐ€ ์ œ์–ดํ•ด์•ผํ•˜๋Š” GPIO ํ•€์ด PB0๋ผ๋Š”๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค.

์ด ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ํ•ด๋‹น ํ•€์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์„ ์ด์–ด์„œ ์ง„ํ–‰ํ•œ๋‹ค.

GPIOํ•€์— clock์ธ๊ฐ€

Clock์„ ์ธ๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น GPIOํ•€์ด ์–ด๋–ค ๋ฒ„์Šค์— ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š”์ง€ ์•Œ์•„์•ผํ•œ๋‹ค.

๋ณดํ†ต ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๋ชจ์•„๋‘” Reference sheet์—์„œ GPIO๋ ˆ์ง€์Šคํ„ฐ ๋งตํ•‘๋œ ๋ถ€๋ถ„์„ ๋ณด๋ฉด ๋ฒ„์Šค๊ฐ€ ๊ฐ™์ด ๋‚˜์™€์žˆ๋‹ค.

์•„๋ž˜ ์‚ฌ์ง„์„ ๋ณด๋ฉด GPIO๊ฐ€ AHB1๋ฒ„์Šค์— ์—ฐ๊ฒฐ๋˜์–ด์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”๋‰ด์–ผ์„ ๋ณด๋ฉด AHB1๋ฒ„์Šค์— RCC๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ 0x40023800~xxx ์ฃผ์†Œ์— ์œ„์น˜ํ•ด ์žˆ๋Š”๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ด์–ด์„œ RCC register map์„ ํ™•์ธํ•ด๋ณด๋ฉด ์ด๋Ÿฐ์‹์œผ๋กœ 0x30 offset์— GPIOB์˜ clock์„ ์ธ๊ฐ€ํ•˜๋Š” GPIOBEN์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‚˜์™€์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ณด๋ฉด 0x30 offset ์ฃผ์†Œ์˜ ๋‘๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

cf) ์ฐธ๊ณ ๋กœ RCC ๋ ˆ์ง€์Šคํ„ฐ์˜ RCC๋Š” Reset and Clock Control์˜ ์•ฝ์ž๋กœ, ํ•ด๋‹น ๋ฒ„์Šค์— ์—ฐ๊ฒฐ๋œ ํ•€์˜ reset๊ณผ clock์„ ์ œ์–ดํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ์ง‘ํ•ฉ์ด๋‹ค.

ํ•„์š”ํ•œ ์ฃผ์†Œ๋ฅผ ์•Œ์•˜์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํ•ด๋‹น ํ•€์— ํด๋Ÿญ์„ ์ธ๊ฐ€์‹œํ‚ฌ์ˆ˜ ์žˆ๋‹ค.

#define RCC_BASE        0x40023800UL
#define RCC_AHB1ENR     (*(volatile uint32_t*)(RCC_BASE + 0x30))

// GPIOB ํด๋Ÿญ ์ธ๊ฐ€
RCC_AHB1ENR |= (1 << 1); // 1๋ฒˆ ๋น„ํŠธ๊ฐ€ GPIOB

๋ชจ๋“œ ์„ค์ •

์ด๋ฒˆ์—๋Š” GPIO register map์„ ํ™•์ธํ•œ๋‹ค. ๊ทธ ์ „์— ๋ฉ”๋ชจ๋ฆฌ ๋งต์—์„œ GPIOB์˜ base์ฃผ์†Œ๊ฐ€ 0x40020400์ด๋ผ๋Š”๊ฑธ ํ™•์ธํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  GPIO register map์„ ๋ณด๋ฉด offset 0x00์— MODER๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์žˆ๋‹ค. MODER๋ ˆ์ง€์Šคํ„ฐ์—์„œ๋Š” ํ•ด๋‹น GPIO ๊ทธ๋ฃน์˜ ํ•€ ๋ชจ๋“œ๋ฅผ ๊ฐ๊ฐ 2๋น„ํŠธ๋ฅผ ํ™œ์šฉํ•ด ์„ค์ •ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  GPIOB_MODER๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๋ณด๋ฉด ํ•ด๋‹น ๋ ˆ์ง€์Šคํ„ฐ์˜ 0,1๋ฒˆ์งธ ๋น„ํŠธ๋กœ PB0 ํ•€์˜ MODE๋ฅผ ์„ค์ •ํ•จ์„ ์•Œ ์ˆ˜์žˆ๋‹ค.

๋ชจ๋“œ์— ๋Œ€ํ•œ ์„ค์ •๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

00 : Input mode 01 : General purpose output mode 10 : Alternate function mode 11 : Analog mode

input(00)

input์€ GPIO์˜์—ญ์—์„œ IDR๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ฝ์–ด์„œ LOW, HIGH๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

Output(01)

output์˜ ๊ฒฝ์šฐ์—๋Š” GPIO๋ ˆ์ง€์Šคํ„ฐ ์˜์—ญ์—์„œ ODR(Output Data Register)์˜์—ญ์— ์ถœ๋ ฅ์œผ๋กœ ์„ค์ •ํ•  ๊ฐ’์„ ์จ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

NOTE : ODR๋Œ€์‹  BSRR๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋” ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋‹ค๋งŒ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” ํ•€์ด ์—ฐ๊ฒฐ๋œ ํšŒ๋กœ๊ฐ€ push-pull์ƒํƒœ์ธ์ง€ ํ˜น์€ open-drain์ƒํƒœ์ธ์ง€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.

ODR push-pull open-drain
0 LOW LOW
1 HIGH HIGH-Z (floating state) / HIGH(pull-up ์ €ํ•ญ์žˆ๋Š” ๊ฒฝ์šฐ)

์ด ๋‘ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ์‚ฌ์‹ค ์ข€๋” ์—ฌ๋Ÿฌ ๋‚ด์šฉ์ด ์žˆ์ง€๋งŒ ๊ธธ์–ด์งˆ๊ฒƒ ๊ฐ™์•„์„œ ๋‹ค์Œ์— ๋‹ค์‹œ ์ •๋ฆฌํ•˜๋ ค๊ณ ํ•œ๋‹ค.

Alternate function mode(AF) (10)

์ด๊ฑด ๊ทธ๋ƒฅ GPIO ํ•€์„ ์ฃผ๋ณ€์žฅ์น˜ ๊ธฐ๋Šฅ(USART, SPI ๋“ฑ)์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“œ์ด๋‹ค.

์ด ๋ชจ๋“œ๋กœ ์„ค์ •ํ•œ ํ›„์—๋Š” ๊ด€๋ จ๋œ ๋‹ค๋ฅธ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ํ•€์˜ ๊ตฌ์ฒด์  ๊ธฐ๋Šฅ์„ ์ง€์ •ํ•ด ์ฃผ์–ด์•ผํ•œ๋‹ค.

Analog(11)

์ด๊ฑด GPIO ํ•€์— ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ’์„ ์•„๋‚ ๋กœ๊ทธ ํ˜•์‹์œผ๋กœ ๋ฐ›๊ธฐ ์œ„ํ•ด ์žˆ๋Š” ๋ชจ๋“œ์ด๋‹ค.

์ด๊ฒŒ ๋”ฐ๋กœ ์žˆ๋Š” ์ด์œ ๋Š” ๋””์ง€ํ„ธ ํšŒ๋กœ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Schmitt trigger ๊ตฌ์กฐ ๋•Œ๋ฌธ์— ์• ๋งคํ•œ ์ „์••๋„ ๊ฐ•์ œ๋กœ 0์ด๋‚˜ 1๋กœ ํŒ๋‹จํ•˜๊ฒŒ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๋””์ง€ํ„ธ ํšŒ๋กœ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์œผ๋ฉด ์ œ๋Œ€๋กœ๋œ ์•„๋‚ ๋กœ๊ทธ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์—†๊ธฐ๋•Œ๋ฌธ์— ๋””์ง€ํ„ธ ํšŒ๋กœ์™€์˜ ์—ฐ๊ฒฐ์„ open์‹œํ‚ค๊ณ , ADCํšŒ๋กœ์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋”ฐ๋กœ ๋ชจ๋“œ๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.

reference

์ฃผ์ €๋ฆฌ

์ž„๋ฒ ๋””๋“œ ๊ณต๋ถ€๋ฅผ ์ง„์งœ ์˜ค๋žœ๋งŒ์— ๋‹ค์‹œํ•˜๊ณ ์žˆ๋Š”๋ฐ ๊ณต๋ถ€ ๋‚œ์ด๋„๊ฐ€ ์ง„์งœ ๋†’์€๊ฒƒ ๊ฐ™๋‹ค.

๋‚ด์šฉ์ด ์–ด๋ ต๋‹ค๊ธฐ ๋ณด๋‹ค๋Š” ์ •๋ณด๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ์ •๋ง ์–ด๋ ต๋‹ค. (ํŠนํžˆ ํ•œ๊ตญ์–ด ์ž๋ฃŒ๋Š”..)

๊ทธ๋ž˜์„œ ์ด๋ ‡๊ฒŒ ์ •๋ฆฌํ•˜๋ฉด์„œ ์Šค์Šค๋กœ ํ‹€์„ ์žก์•„๊ฐ€๋Š”๊ฒŒ ์ •๋ง ์ค‘์š”ํ•˜๋‹ค๊ณ  ๋А๋ผ๊ณ  ์žˆ๋‹ค.

์•ž์œผ๋กœ๋„ ์—ด์‹ฌํžˆ ์ •๋ฆฌํ•˜๊ณ  ๊พธ์ค€ํžˆ ํšŒ๊ณ ํ•ด์•ผ๊ฒ ๋‹ค.

ํƒœ๊ทธ: , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ