์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 

STM32 FreeRTOS ๊ตฌํ˜„

STM32 MCU์—์„œ FreeRTOS๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ์„ธํžˆ ์„ค๋ช…ํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

(4.0) ์ˆ˜๊ฐ•ํ‰ 6๊ฐœ

์ˆ˜๊ฐ•์ƒ 174๋ช…

Thumbnail

์ดˆ๊ธ‰์ž๋ฅผ ์œ„ํ•ด ์ค€๋น„ํ•œ
[์ž„๋ฒ ๋””๋“œ ยท IoT, ๋ฐ˜๋„์ฒด] ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฑธ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”

  • STM32CubeIDE๋ฅผ ์ด์šฉํ•  fw

  • STM32 FreeRTOS ๊ตฌํ˜„

๋‹น์‹ ์ด ์ฐพ์•„ ํ—ค๋งจ RTOS ๊ฐ•์˜,
์—ฌ๊ธฐ ์žˆ์–ด์š”! ๐Ÿ˜‰

์‹ค๋ฌด๋ฅผ ์œ„ํ•œ RTOS ๋ฐฐ์›Œ๋ณด์„ธ์š” ๐Ÿ–ฅ๏ธ

์ €๋Š” MCU์—์„œ ์˜ค๋žซ๋™์•ˆ Non-OS Based Program์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ MCU์˜ ์„ฑ๋Šฅ์ด ์—…๋ฐ์ดํŠธ๋˜๊ณ , OS์—์„œ ์ œ๊ณตํ•˜๋Š” ๋งŽ์€ Library๋“ค์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด OS Based Program์ด ํ•„์š”ํ•จ์„ ๋А๋ผ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, RTOS๋Š” ๋ฐฐ์šฐ๊ณ  ์‹ถ์–ด๋„ ๋งˆ๋•…ํ•œ ์ž๋ฃŒ๊ฐ€ ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. RTOS ๊ด€๋ จ ์ž๋ฃŒ๋“ค์€ ๋Œ€๋ถ€๋ถ„ OS์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ๋งŽ๊ณ ์š”. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค๋ฌด์—์„œ ์ž˜ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, OS์— ๋Œ€ํ•œ ๊นŠ์€ ์ง€์‹๋ณด๋‹ค๋Š” ์–ด๋–ป๊ฒŒ RTOS๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€๊ฐ€ ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

โœ‹ ์ž ๊น! RTOS๋ž€?

RTOS๋Š” Real-Time Operating System ์ฆ‰, ์‹ค์‹œ๊ฐ„ ์šด์˜ ์ฒด์ œ๋ฅผ ๋งํ•ด์š”. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ฒ˜๋ฆฌ ์š”์ฒญ์„ ์ •ํ•ด์ง„ ์‹œ๊ฐ„ ๋‚ด์— ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ด๊ฐ’์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๊ณ , ์ผ์ •ํ•œ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์„ ์š”๊ตฌํ•˜๋Š” ๊ณณ์— ์‚ฌ์šฉ๋ผ์š”.

๋ณธ ๊ฐ•์˜๋Š” ์ €์™€ ๊ฐ™์ด Non-OS์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ํ•ด์™”๋˜ ๊ฐœ๋ฐœ์ž๋“ค์ด OS Based์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์นœ์ ˆํ•˜๊ฒŒ ์„ค๋ช…ํ•ด ์ฃผ๋Š” ์ž…๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. ST์˜ STM32์—์„œ FreeRTOS๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋‚ด์šฉ์„ ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ•์˜๋ฅผ ๋”ฐ๋ผ๊ฐ€๋‹ค ๋ณด๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ OS Based Program์„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ST์—์„œ ๋ฌด๋ฃŒ๋กœ ์ œ๊ณตํ•˜๋Š” ํˆด์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ˆ„๊ตฌ๋‚˜ FreeRTOS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ST์˜ MCU๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ถ„๋“ค๋„ ๊ฐ•์˜ ๋‚ด์šฉ์„ ์Šต๋“ํ•˜๋ฉด ST์˜ MCU๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. FreeRTOS๋ฅผ ๊ฒฝํ—˜ํ•ด ๋ณด๊ณ  ์‹ถ์€ ๋ถ„๋“ค์—๊ฒŒ ๋งŽ์€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๊ธธ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ•์˜์—์„œ ์ดํ•ด๊ฐ€ ์•ˆ ๋˜๋Š” ๋ถ€๋ถ„์€ ์ธํ”„๋Ÿฐ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋˜๋Š” ์ œ๊ฐ€ ์šด์˜ํ•˜๋Š” ์นดํŽ˜๋ฅผ ํ†ตํ•˜์—ฌ ์งˆ๋ฌธ์„ ์˜ฌ๋ ค์ฃผ์‹œ๋ฉด ๋‹ต๋ณ€ํ•ด ๋“œ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ข ์ˆ˜๊ฐ• ์ „ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•ด์ฃผ์„ธ์š”!

  • ๋ณธ ๊ฐ•์˜๋Š” ์ „์ž๋ฌธ์„œ ํ˜•์‹์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ…์ŠคํŠธ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค. ๋ณธ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜์‹œ๋Š” ๋ถ„๋“ค์—๊ฒŒ๋Š” ๊ฐ•์˜์— ์„ค๋ช…๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ์†Œ์Šค ํŒŒ์ผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ค์Šต์€ ST์‚ฌ์˜ NUCLEO-F411RE ๊ฐœ๋ฐœ ๋ณด๋“œ์—์„œ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ํˆด์€ STM32CubeIDE v1.9.0์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜์‹œ๊ธฐ ์ „์— ๋ฏธ๋ฆฌ ๊ฐœ๋ฐœ ํˆด(๋ฌด๋ฃŒ)์„ ์„ค์น˜ํ•ด ์ฃผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.
  • ๊ฐ•์˜ ์ž๋ฃŒ๋Š” '์„น์…˜ 0 - ์ž๋ฃŒ ๊ณต์œ  ๋งํฌ - ์ฒจ๋ถ€ํŒŒ์ผ'์—์„œ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ถ„๊ป˜ ์ถ”์ฒœํ•ด์š” ๐Ÿ™‹โ€โ™€๏ธ

ST์˜ MCU์— ๊ด€์‹ฌ ์žˆ๋Š” ๋ถ„

RTOS๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋ถ„

C ์–ธ์–ด์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์žˆ๋Š” ๋ถ„


์ปค๋ฆฌํ˜๋Ÿผ ๐Ÿ“š

  1. ๊ฐœ์š” (2)
  2. HW ๊ตฌ์„ฑ (3)
    1. FW ๋‹ค์šด๋กœ๋“œ ํ•€๋งต (4)
    2. ์ „์› ํ•€๋งต  (4)
    3. UART ํ•€๋งต  (4)
    4. ํ”„๋กœ๊ทธ๋žจ ๋‹ค์šด๋กœ๋“œ (5)
      1. ST-LINK FW ์—…๋ฐ์ดํŠธ (5)
      2. ๋ณด๋“œ ์—ฐ๊ฒฐ (7)
  3. FreeRTOS (8)
    1. Thread (9)
    2. ๋ฐ์ดํ„ฐ ๊ณต์œ  (10)
  4. ์ฝ”๋“œ ๊ตฌํ˜„ (11)
    1. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ (11)
    2. Configuration (13)
      1. SYS, RCC (14)
      2. Clock Configuration (15)
      3. UART ์„ค์ • (16)
      4. GPIO ์„ค์ • (17)
      5. FREERTOS ์„ค์ • (19)
    3. ์ฝ”๋“œ ๊ตฌํ˜„ (21)
      1. printf ์„ค์ • (24)
      2. Signal Event ๊ตฌํ˜„ (27)
      3. Message Queue ๊ตฌํ˜„ (35)
      4. Semaphore ๊ตฌํ˜„ (40)
      5. SW Timer ๊ตฌํ˜„ (45)
      6. UART RX๋ฅผ ์œ„ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ QUEUE ๊ตฌํ˜„ (47)
  5. ์ฐธ๊ณ ์ž๋ฃŒ (51)
  6. Revision History (52)

์˜ˆ์ƒ ์งˆ๋ฌธ Q&A ๐Ÿ’ฌ

Q. ๊ฐ•์˜๋ฅผ ๋“ฃ๊ธฐ ์œ„ํ•ด ์ค€๋น„ํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ด ์žˆ๋‚˜์š”?

๋ณธ ๊ฐ•์˜๋Š” ์‹ค์Šต๋ณด๋“œ NUCLEO-F411RE์—์„œ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ณด๋“œ๊ฐ€ ์ค€๋น„๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋จผ์ € ๋‚ด์šฉ์„ ๋ณด์‹œ๊ณ  ๋‚˜์ค‘์— ๋ณด๋“œ๋ฅผ ๊ตฌ์ž…ํ•ด์„œ ๋ณด๋“œ ์ƒ์—์„œ ํ™•์ธํ•ด ๋ณด์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Q. ํ”„๋กœ๊ทธ๋žจ ํˆด์€ ๋ฌด์—‡์„ ์‚ฌ์šฉํ•˜๋‚˜์š”?

ST ์‚ฌ์—์„œ ๋ฌด๋ฃŒ๋กœ ์ œ๊ณตํ•˜๋Š” STMCubeIDE v1.9.0์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๊ฐ• ์ „์— ์„ค์น˜ํ•ด ์ฃผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.


์ง€์‹๊ณต์œ ์ž ์†Œ๊ฐœ โœ’๏ธ

์ด๋ ฅ ์‚ฌํ•ญ

์ €๋Š” 20์—ฌ ๋…„ ๋™์•ˆ ๋Œ€๊ธฐ์—…, ์ค‘์†Œ๊ธฐ์—…์—์„œ ๊ฐœ๋ฐœ์ž๋กœ ์ผํ•ด์™”๊ณ  ํ˜„์žฌ๋Š” ์ž‘์€ ๊ธฐ์—…์„ ์šด์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. CCTV์šฉ ISP(Image Signal Processing) ASIC์„ ๊ฐœ๋ฐœํ•˜์˜€๊ณ  OLED ๊ฒ€์‚ฌ ์žฅ๋น„, DAQ (Data Acquisition System) ๋“ฑ FPGA๋ฅผ ์ด์šฉํ•œ ๋งŽ์€ ์ œํ’ˆ์„ ๊ฐœ๋ฐœํ•˜์˜€์Šต๋‹ˆ๋‹ค. FPGA๋ฟ๋งŒ ์•„๋‹ˆ๋ผ FW ๊ฐœ๋ฐœ (STM32, PIC32, AVR, ATMEGA ๋“ฑ), ํšŒ๋กœ ์„ค๊ณ„, Windows Program ๋“ฑ ๋งŽ์€ ๊ฒฝํ—˜์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”!

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • STM32๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋ถ„

  • RTOS๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‹ถ์œผ์‹  ๋ถ„

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • C ์–ธ์–ด

์•ˆ๋…•ํ•˜์„ธ์š”
alex์ž…๋‹ˆ๋‹ค.

1,518

๋ช…

์ˆ˜๊ฐ•์ƒ

55

๊ฐœ

์ˆ˜๊ฐ•ํ‰

119

๊ฐœ

๋‹ต๋ณ€

4.8

์ 

๊ฐ•์˜ ํ‰์ 

17

๊ฐœ

๊ฐ•์˜

์ €๋Š” ์ง€๋‚œ 20์—ฌ๋…„ ๋™์•ˆ ๋Œ€๊ธฐ์—…, ์ค‘์†Œ๊ธฐ์—…์—์„œ ๊ฐœ๋ฐœ์ž๋กœ ์ผํ•ด์™”๊ณ 

ํ˜„์žฌ๋Š” ์ž‘์€ ๊ธฐ์—…์˜ ๋Œ€ํ‘œ๋กœ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ฒฝ๋ ฅ์‚ฌํ•ญ์€

  • Verilog HDL์„ ์ด์šฉํ•œ FPGA ์„ค๊ณ„

    • CCTV์šฉ ISP ASIC ๊ฐœ๋ฐœ (์•ฝ 10๋…„)

    • OLED Display ๊ฒ€์‚ฌ์žฅ๋น„ ๊ฐœ๋ฐœ (์•ฝ 3๋…„)

    • FPGA๋ฅผ ์ด์šฉํ•œ ์žฅ๋น„ ๊ฐœ๋ฐœ

  • MCU FW

    • STM32

    • PIC32

    • AVR, ATMEGA

    • DSP (TI)

  • Windows Application Program

    • Visual Studio MFC, C++

์ž…๋‹ˆ๋‹ค.

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

53๊ฐœ

ํ•ด๋‹น ๊ฐ•์˜์—์„œ ์ œ๊ณต:

์ˆ˜์—…์ž๋ฃŒ
๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์•„์ง ์ถฉ๋ถ„ํ•œ ํ‰๊ฐ€๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.
๋ชจ๋‘์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์ˆ˜๊ฐ•ํ‰์˜ ์ฃผ์ธ๊ณต์ด ๋˜์–ด์ฃผ์„ธ์š”!