๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ

ะ’ ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„ ๋‚˜๋Š” Arduino ๋ฐ”์ง€์—์„œ ์ž๋ž€ ์ทจ๋ฏธ ์ „์ž ์—”์ง€๋‹ˆ์–ด์—๊ฒŒ ๋งˆ์ดํฌ๋กœ ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์‹œํŠธ์™€ ๊ธฐํƒ€ ๋ฌธ์„œ๋ฅผ ์ฝ์–ด์•ผ ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ด์œ ๋ฅผ ์•Œ๋ ค์ฃผ๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…์ŠคํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๋ณ„๋„์˜ ๊ธฐ์‚ฌ์—์„œ ์‹ค์ œ ์‚ฌ๋ก€๋ฅผ ๋ณด์—ฌ ์ฃผ๊ธฐ๋กœ ์•ฝ์†ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธ€์Ž„, ๊ทธ๋Š” ์ž์‹ ์„ ์šฐ์œ  ๋ฒ„์„ฏ์ด๋ผ๊ณ  ๋ถˆ๋ €์Šต๋‹ˆ๋‹ค ...

์˜ค๋Š˜์€ ๋ฐ์ดํ„ฐ์‹œํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค์šฐ ๊ฐ„๋‹จํ•˜์ง€๋งŒ STM32(Blue Pill) ๋ฐ STM8 ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•œ ๋งŽ์€ ํ”„๋กœ์ ํŠธ ์ž‘์—…์— ํ•„์š”ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐ๋ชจ ํ”„๋กœ์ ํŠธ๋Š” ์ œ๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” LED ์ „์šฉ์ด๋ฉฐ, ์ด๋ฅผ ๋Œ€๋Ÿ‰์œผ๋กœ ์กฐ๋ช…ํ•  ์˜ˆ์ •์ด๋ฉฐ ์ด๋ฅผ ์œ„ํ•ด ๋ชจ๋“  ์ข…๋ฅ˜์˜ ํฅ๋ฏธ๋กœ์šด ์ฃผ๋ณ€ ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ๊ฐ€ ๋‹ค์‹œ ๊ฑฐ๋Œ€ํ•ด์กŒ์œผ๋ฏ€๋กœ ํŽธ์˜๋ฅผ ์œ„ํ•ด ๋‚ด์šฉ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

STM32 Blue Pill: DM16 ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํฌํ•จ๋œ 634๊ฐœ์˜ LED
STM8: XNUMX๊ฐœ์˜ PWM ํ•€ ์„ค์ •
STM8: 8๊ฐœ ํ•€์— XNUMX๊ฐœ์˜ RGB LED, ์ธํ„ฐ๋ŸฝํŠธ

๋ฉด์ฑ…์กฐํ•ญ: ์ €๋Š” ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์ „์ž๊ณตํ•™์— ๋Œ€ํ•œ ๊นŠ์€ ์ง€์‹์„ ๊ฐ–๊ณ  ์žˆ๋Š” ์ฒ™ํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ๋Š” ์ €์™€ ๊ฐ™์€ ์•„๋งˆ์ถ”์–ด๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ €๋Š” XNUMX๋…„ ์ „๋ถ€ํ„ฐ ์ €๋ฅผ ํƒ€๊ฒŸ์ธต์œผ๋กœ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์นฉ์˜ ๋ฐ์ดํ„ฐ์‹œํŠธ๊ฐ€ ์ฝ๊ธฐ์— ๋ฌด์„ญ์ง€ ์•Š๋‹ค๊ณ  ๋งํ•ด์ฃผ์—ˆ๋‹ค๋ฉด ๋‚˜๋Š” ์ธํ„ฐ๋„ท์—์„œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ์ฐพ๊ณ  ๊ฐ€์œ„์™€ ์ ‘์ฐฉ ํ…Œ์ดํ”„๋กœ ๋ชฉ๋ฐœ์„ ๋งŒ๋“œ๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜์ง€ ์•Š์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ์‚ฌ์˜ ์ดˆ์ ์€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ์‹œํŠธ์— ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ๊ฐ€ ๋งค์šฐ ๊น”๋”ํ•˜์ง€ ์•Š๊ณ  ์ข…์ข… ๋นก๋นกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ž์ฒด๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜์ง€๋งŒ ์ƒˆ ์นฉ์„ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๊ธฐ์‚ฌ๊ฐ€ ๋น„์Šทํ•œ ์ทจ๋ฏธ ๋ชฐ์ž… ๋‹จ๊ณ„์— ์žˆ๋Š” ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

STM32

DM16 ๋ฐ SPI๋ฅผ ๊ฐ–์ถ˜ 634๊ฐœ์˜ LED

Blue Pill(STM32F103C8T6) ๋ฐ DM634 LED ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์‹œํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋“œ๋ผ์ด๋ฒ„, STM IO ํฌํŠธ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  SPI๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

DM634

16๊ฐœ์˜ 16๋น„ํŠธ PWM ์ถœ๋ ฅ์„ ๊ฐ–์ถ˜ ๋Œ€๋งŒ ์นฉ์€ ์ฒด์ธ์œผ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตญ๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ ๋ณด๊ธ‰ํ˜• 12๋น„ํŠธ ๋ชจ๋ธ์ด ์•Œ๋ ค์ง ๋ผ์ดํŠธํŒฉ. ํ•œ๋•Œ DM63x์™€ ์ž˜ ์•Œ๋ ค์ง„ TLC5940 ์ค‘์—์„œ ์„ ํƒํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ DM์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. 1) Aliexpress์˜ TLC๋Š” ํ™•์‹คํžˆ ๊ฐ€์งœ์ด์ง€๋งŒ ์ด๊ฒƒ์€ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 2) DM์—๋Š” ์ž์ฒด ์ฃผํŒŒ์ˆ˜ ์ƒ์„ฑ๊ธฐ๋ฅผ ๊ฐ–์ถ˜ ์ž์œจ PWM์ด ์žˆ์Šต๋‹ˆ๋‹ค. 3) ์•Œ๋ฆฌ์—์„œ ์†Œํฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋ชจ์Šคํฌ๋ฐ”์—์„œ ์ €๋ ดํ•˜๊ฒŒ ๊ตฌ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฌผ๋ก , ๊ธฐ์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์นฉ์„ ์ง์ ‘ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ๋„ ํฅ๋ฏธ๋กœ์› ์Šต๋‹ˆ๋‹ค. ์นฉ์€ ์ด์ œ ์ฃผ๋กœ SSOP24 ํŒจํ‚ค์ง€๋กœ ์ œ๊ณต๋˜๋ฉฐ ์–ด๋Œ‘ํ„ฐ์— ์‰ฝ๊ฒŒ ๋‚ฉ๋•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ์กฐ์‚ฌ๊ฐ€ ๋Œ€๋งŒ์ด๋ผ์„œ ๋ฐ์ดํ„ฐ ์‹œํŠธ ์นฉ์€ ์ค‘๊ตญ์–ด ์˜์–ด๋กœ ์“ฐ์—ฌ ์žˆ์–ด์„œ ์žฌ๋ฏธ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋จผ์ € ํ•€์•„์›ƒ(ํ•€ ์—ฐ๊ฒฐ) ์–ด๋Š ๋‹ค๋ฆฌ์— ๋ฌด์—‡์„ ์—ฐ๊ฒฐํ• ์ง€ ์ดํ•ดํ•˜๊ณ  ํ•€์— ๋Œ€ํ•œ ์„ค๋ช…(ํ•€ ์„ค๋ช…). ํ•€ 16๊ฐœ:

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
DC ์‹ฑํฌ ์†Œ์Šค(์˜คํ”ˆ ๋“œ๋ ˆ์ธ)

์‹ฑํฌ๋Œ€ / ์˜คํ”ˆ ๋“œ๋ ˆ์ธ ์ถœ๋ ฅ - ๋ฌผ์„ ๋นผ๋‹ค; ์œ ์ž… ์ „๋ฅ˜ ์†Œ์Šค; ์ถœ๋ ฅ์€ ํ™œ์„ฑ ์ƒํƒœ์—์„œ ์ ‘์ง€์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. LED๋Š” ์Œ๊ทน์„ ํ†ตํ•ด ๋“œ๋ผ์ด๋ฒ„์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ „๊ธฐ์ ์œผ๋กœ ์ด๋Š” "์˜คํ”ˆ ๋“œ๋ ˆ์ธ"์ด ์•„๋‹™๋‹ˆ๋‹ค(๊ฐœ๋ฐฉํ˜• ๋ฐฐ์ˆ˜๊ตฌ), ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ์ดํ„ฐ์‹œํŠธ์—์„œ๋Š” ๋“œ๋ ˆ์ธ ๋ชจ๋“œ์˜ ํ•€์— ๋Œ€ํ•œ ์ด๋Ÿฌํ•œ ์ง€์ •์ด ์ข…์ข… ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
์ถœ๋ ฅ ์ „๋ฅ˜ ๊ฐ’์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ REXT์™€ GND ์‚ฌ์ด์˜ ์™ธ๋ถ€ ์ €ํ•ญ๊ธฐ

๊ธฐ์ค€ ์ €ํ•ญ์€ ์ถœ๋ ฅ์˜ ๋‚ด๋ถ€ ์ €ํ•ญ์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹REXT ํ•€๊ณผ ์ ‘์ง€ ์‚ฌ์ด์— ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์‹œํŠธ 9ํŽ˜์ด์ง€์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. DM634์—์„œ๋Š” ์ด ์ €ํ•ญ์„ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ์ œ์–ดํ•˜์—ฌ ์ „์ฒด ๋ฐ๊ธฐ(์ „์ฒด ๋ฐ๊ธฐ); ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์ง€ ์•Š๊ณ  ์—ฌ๊ธฐ์— 2.2 - 3kOhm ์ €ํ•ญ๊ธฐ๋งŒ ์„ค์น˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์นฉ์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋ ค๋ฉด ์žฅ์น˜ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ

๋„ค, ์—ฌ๊ธฐ ์ค‘๊ตญ์–ด ์˜์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ•œ๋‹ค๋ฉด ์ดํ•ดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์ ์œผ๋กœ ์œ ์‚ฌํ•œ TLC5940์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์ด ๋ฐ์ดํ„ฐ์‹œํŠธ์— ์–ด๋–ป๊ฒŒ ์„ค๋ช…๋˜์–ด ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
... ์žฅ์น˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋ ค๋ฉด ํ•€ XNUMX๊ฐœ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. SCLK ์‹ ํ˜ธ์˜ ์ƒ์Šน ์—์ง€๋Š” SIN ํ•€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ถ€ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋กœ๋“œ๋œ ํ›„ ์งง์€ ๋†’์€ XLAT ์‹ ํ˜ธ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ „์†ก๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ถ€ ๋ ˆ์ง€์Šคํ„ฐ์— ๋ž˜์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ๋ ˆ์ง€์Šคํ„ฐ๋Š” XLAT ์‹ ํ˜ธ ๋ ˆ๋ฒจ์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ๊ฒŒ์ดํŠธ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ์ตœ์ƒ์œ„ ๋น„ํŠธ๋ถ€ํ„ฐ ๋จผ์ € ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

๊ฑธ์‡  โ€“ ๋ž˜์น˜/๋ž˜์น˜/์ž ๊ธˆ.
๋ผ์ด์ง• ์—์ง€ โ€“ ํŽ„์Šค์˜ ์•ž์ชฝ ๊ฐ€์žฅ์ž๋ฆฌ
MSB ํผ์ŠคํŠธ โ€“ ์ตœ์ƒ์œ„(๊ฐ€์žฅ ์™ผ์ชฝ) ๋น„ํŠธ ์•ž์œผ๋กœ.
๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ณ„๋กœ โ€“ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ(๋น„ํŠธ ๋‹จ์œ„๋กœ) ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

์›Œ๋“œ ๊ฑธ์‡  ์นฉ์— ๋Œ€ํ•œ ๋ฌธ์„œ์—์„œ ์ž์ฃผ ๋ฐœ๊ฒฌ๋˜๋ฉฐ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฒˆ์—ญ๋˜๋ฏ€๋กœ ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ํ—ˆ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์†Œ๊ทœ๋ชจ ๊ต์œก ํ”„๋กœ๊ทธ๋žจLED ๋“œ๋ผ์ด๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹œํ”„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ์ž…๋‹ˆ๋‹ค. "์˜ฎ๊ธฐ๋‹ค" (๋ณ€ํ™”) ์ด๋ฆ„์—์„œ - ์žฅ์น˜ ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ ๋น„ํŠธ ๋‹จ์œ„ ์ด๋™: ๋‚ด๋ถ€์— ์‚ฝ์ž…๋œ ๊ฐ๊ฐ์˜ ์ƒˆ๋กœ์šด ๋น„ํŠธ๋Š” ์ „์ฒด ์ฒด์ธ์„ ์•ž์œผ๋กœ ๋ฐ€์–ด๋ƒ…๋‹ˆ๋‹ค. ๊ต๋Œ€ ์ค‘์— LED๊ฐ€ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ๊นœ๋ฐ•์ด๋Š” ๊ฒƒ์„ ๊ด€์ฐฐํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ์‚ฌ๋žŒ์€ ์•„๋ฌด๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์„ธ์Šค๋Š” ๋Œํผ์— ์˜ํ•ด ์ž‘๋™ ๋ ˆ์ง€์Šคํ„ฐ์™€ ๋ถ„๋ฆฌ๋œ ๋ฒ„ํผ ๋ ˆ์ง€์Šคํ„ฐ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(๊ฑธ์‡ )์€ ๋น„ํŠธ๊ฐ€ ์›ํ•˜๋Š” ์ˆœ์„œ๋กœ ๋ฐฐ์—ด๋˜์–ด ์žˆ๋Š” ์ผ์ข…์˜ ๋Œ€๊ธฐ์‹ค์ด๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ค€๋น„๋˜๋ฉด ์…”ํ„ฐ๊ฐ€ ์—ด๋ฆฌ๊ณ  ๋น„ํŠธ๊ฐ€ ์ž‘๋™ํ•˜์—ฌ ์ด์ „ ๋ฐฐ์น˜๋ฅผ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์–ด ๊ฑธ์‡  ๋ฏธ์„ธ ํšŒ๋กœ์— ๋Œ€ํ•œ ๋ฌธ์„œ์—์„œ๋Š” ์–ด๋–ค ์กฐํ•ฉ์œผ๋กœ ์‚ฌ์šฉ๋˜๋“  ์ƒ๊ด€์—†์ด ๊ฑฐ์˜ ํ•ญ์ƒ ์ด๋Ÿฌํ•œ ๋Œํผ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ DM634๋กœ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. DAI ์ž…๋ ฅ์„ ์›๊ฑฐ๋ฆฌ LED์˜ ์ตœ์ƒ์œ„ ๋น„ํŠธ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๊ณ  DCK๋ฅผ ์œ„์•„๋ž˜๋กœ ๋‹น๊น๋‹ˆ๋‹ค. DAI ์ž…๋ ฅ์„ ๋‹ค์Œ ๋น„ํŠธ์˜ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๊ณ  DCK๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋น„ํŠธ๊ฐ€ ์ „์†ก๋  ๋•Œ๊นŒ์ง€ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค(์‹œ๊ณ„), ๊ทธ ํ›„์— LAT๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋น„ํŠธ๋ฑ…), ๊ทธ๋Ÿฌ๋‚˜ STM32์— ๋‘ ๊ฐœ์˜ ์‚ฌ๋ณธ์œผ๋กœ ์ œ๊ณต๋˜๋ฏ€๋กœ ์ด๋ฅผ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ๋งž์ถคํ™”๋œ SPI ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค.

๋ธ”๋ฃจ ์•Œ์•ฝ STM32F103

์†Œ๊ฐœ: STM32 ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ฌด์„œ์šด ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ๋ณด๋‹ค Atmega328๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์—๋„ˆ์ง€ ์ ˆ์•ฝ์„ ์œ„ํ•ด ์‹œ์ž‘ ์‹œ ๊ฑฐ์˜ ๋ชจ๋“  ์ฃผ๋ณ€ ์žฅ์น˜๊ฐ€ ๊บผ์ง€๊ณ  ํด๋ก ์ฃผํŒŒ์ˆ˜๋Š” ๋‚ด๋ถ€ ์†Œ์Šค์—์„œ 8MHz์ž…๋‹ˆ๋‹ค. ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„ STM ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ์นฉ์„ "๊ณ„์‚ฐ๋œ" 72MHz๊นŒ์ง€ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๊ณ , ๋‚ด๊ฐ€ ์•„๋Š” ๋ชจ๋“  IDE ์ž‘์„ฑ์ž๋Š” ์ด๋ฅผ ์ดˆ๊ธฐํ™” ์ ˆ์ฐจ์— ํฌํ•จ์‹œ์ผฐ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ํด๋ก์„ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ์ •๋ง๋กœ ์›ํ•œ๋‹ค๋ฉด ํ•  ์ˆ˜ ์žˆ์–ด). ํ•˜์ง€๋งŒ ์ฃผ๋ณ€ ์žฅ์น˜๋ฅผ ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์„œ: Blue Pill์—๋Š” ์ธ๊ธฐ ์žˆ๋Š” STM32F103C8T6 ์นฉ์ด ์žฅ์ฐฉ๋˜์–ด ์žˆ์œผ๋ฉฐ ์ด์— ๋Œ€ํ•œ ๋‘ ๊ฐ€์ง€ ์œ ์šฉํ•œ ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ์—์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ ์‚ฌํ•ญ์— ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ•€์•„์›ƒ โ€“ ์นฉ ํ•€์•„์›ƒ โ€“ ๋ณด๋“œ๋ฅผ ์ง์ ‘ ๋งŒ๋“ค๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๊ฒฝ์šฐ
  • ๋ฉ”๋ชจ๋ฆฌ ๋งต โ€“ ํŠน์ • ์นฉ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋งต์ž…๋‹ˆ๋‹ค. ์ฐธ์กฐ ์„ค๋ช…์„œ์—๋Š” ์ „์ฒด ๋ผ์ธ์— ๋Œ€ํ•œ ์ง€๋„๊ฐ€ ์žˆ์œผ๋ฉฐ ์šฐ๋ฆฌ ์ œํ’ˆ์—๋Š” ์—†๋Š” ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์–ธ๊ธ‰๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•€ ์ •์˜ ํ‘œ - ํ•€์˜ ์ฃผ์š” ๊ธฐ๋Šฅ๊ณผ ๋Œ€์ฒด ๊ธฐ๋Šฅ์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. "ํŒŒ๋ž€ ์•Œ์•ฝ"์˜ ๊ฒฝ์šฐ ํ•€ ๋ชฉ๋ก๊ณผ ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ ๋” ํŽธ๋ฆฌํ•œ ์‚ฌ์ง„์„ ์ธํ„ฐ๋„ท์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์ฆ‰์‹œ Blue Pill ํ•€์•„์›ƒ์„ Google์— ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ด ์‚ฌ์ง„์„ ๊ฐ€๊นŒ์ด์— ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
์ฃผ์˜: ์ธํ„ฐ๋„ท ์‚ฌ์ง„์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ“๊ธ€์— ์–ธ๊ธ‰๋œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ง„์€ ๊ต์ฒด๋˜์—ˆ์ง€๋งŒ ์ด๋Š” ๊ตํ›ˆ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์‹œํŠธ๊ฐ€ ์•„๋‹Œ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์‹œํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ฐธ์กฐ ๋งค๋‰ด์–ผ์„ ์—ด๊ณ  ์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” ๊ทธ๊ฒƒ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ ˆ์ฐจ: ํ‘œ์ค€ ์ž…๋ ฅ/์ถœ๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , SPI๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ํ•„์š”ํ•œ ์ฃผ๋ณ€ ์žฅ์น˜๋ฅผ ์ผญ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ

Atmega328์—์„œ๋Š” I/O๊ฐ€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„๋˜๋ฏ€๋กœ STM32 ์˜ต์…˜์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๋Š” ๊ฒฐ๋ก ๋งŒ ํ•„์š”ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—๋„ ๋„ค ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
์˜คํ”ˆ ๋“œ๋ ˆ์ธ, ํ‘ธ์‹œํ’€, ๋Œ€์ฒด ํ‘ธ์‹œํ’€, ๋Œ€์ฒด ์˜คํ”ˆ ๋“œ๋ ˆ์ธ

"ํ’€-ํ‘ธ์‹œ"(ํ‘ธ์‹œ ํ’€)๋Š” Arduino์˜ ์ผ๋ฐ˜์ ์ธ ์ถœ๋ ฅ์ด๋ฉฐ ํ•€์€ HIGH ๋˜๋Š” LOW ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ "์˜คํ”ˆ๋“œ๋ ˆ์ธ"์—๋Š” ๋ณต์žก์„ฑ, ์‹ค์ œ๋กœ ์—ฌ๊ธฐ์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
์ถœ๋ ฅ ๊ตฌ์„ฑ / ํฌํŠธ๊ฐ€ ์ถœ๋ ฅ์— ํ• ๋‹น๋œ ๊ฒฝ์šฐ: / ์ถœ๋ ฅ ๋ฒ„ํผ ํ™œ์„ฑํ™”๋จ: / โ€“ ์˜คํ”ˆ ๋“œ๋ ˆ์ธ ๋ชจ๋“œ: ์ถœ๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ์˜ "0"์€ N-MOS๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ , ์ถœ๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ์˜ "1"์€ ํฌํŠธ๋ฅผ Hi-Z ๋ชจ๋“œ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค( P-MOS๊ฐ€ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์Œ) / โ€“ ํ‘ธ์‹œํ’€ ๋ชจ๋“œ: ์ถœ๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ์˜ "0"์€ N-MOS๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ , ์ถœ๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ์˜ "1"์€ P-MOS๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์˜คํ”ˆ๋“œ๋ ˆ์ธ์˜ ๋ชจ๋“  ์ฐจ์ด์ (๊ฐœ๋ฐฉํ˜• ๋ฐฐ์ˆ˜๊ตฌ) "ํ‘ธ์‹œ-ํ’€"(ํ‘ธ์‹œ ํ’€)๋Š” ์ฒซ ๋ฒˆ์งธ ํ•€์ด HIGH ์ƒํƒœ๋ฅผ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ถœ๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ์— ํ•˜๋‚˜๋ฅผ ์“ฐ๋ฉด ๋†’์€ ์ €ํ•ญ ๋ชจ๋“œ๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค(๊ณ  ์ž„ํ”ผ๋˜์Šค, ํ•˜์ด-์ง€). XNUMX์„ ์“ฐ๋ฉด ํ•€์€ ๋…ผ๋ฆฌ์ ์œผ๋กœ๋‚˜ ์ „๊ธฐ์ ์œผ๋กœ ๋‘ ๋ชจ๋“œ ๋ชจ๋‘์—์„œ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ์ถœ๋ ฅ ๋ชจ๋“œ์—์„œ ํ•€์€ ๋‹จ์ˆœํžˆ ์ถœ๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ์˜ ๋‚ด์šฉ์„ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. "๋Œ€์ฒด"์—์„œ๋Š” ํ•ด๋‹น ์ฃผ๋ณ€ ์žฅ์น˜์— ์˜ํ•ด ์ œ์–ด๋ฉ๋‹ˆ๋‹ค(9.1.4 ์ฐธ์กฐ).

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
ํฌํŠธ ๋น„ํŠธ๊ฐ€ ๋Œ€์ฒด ๊ธฐ๋Šฅ ํ•€์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉด ํ•€ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜๊ณ  ํ•€์ด ์ฃผ๋ณ€ ์žฅ์น˜ ํ•€์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๊ฐ ํ•€์˜ ๋Œ€์ฒด ๊ธฐ๋Šฅ์€ ๋‹ค์Œ ํ•ญ๋ชฉ์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•€ ์ •์˜ ๋ฐ์ดํ„ฐ์‹œํŠธ๋Š” ๋‹ค์šด๋กœ๋“œํ•œ ์ด๋ฏธ์ง€์— ์žˆ์Šต๋‹ˆ๋‹ค. ํ•€์— ์—ฌ๋Ÿฌ ๋Œ€์ฒด ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต์€ ๋ฐ์ดํ„ฐ์‹œํŠธ์˜ ๊ฐ์ฃผ์— ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
์—ฌ๋Ÿฌ ์ฃผ๋ณ€ ์žฅ์น˜๊ฐ€ ๋™์ผํ•œ ํ•€์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋Œ€์ฒด ๊ธฐ๋Šฅ ๊ฐ„์˜ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ฃผ๋ณ€ ์žฅ์น˜๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ์ฃผ๋ณ€ ์žฅ์น˜ ํด๋Ÿญ ํ™œ์„ฑํ™” ๋น„ํŠธ(ํ•ด๋‹น RCC ๋ ˆ์ง€์Šคํ„ฐ์— ์žˆ์Œ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ถœ๋ ฅ ๋ชจ๋“œ์˜ ํ•€์—๋„ ํด๋Ÿญ ์†๋„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋˜ ๋‹ค๋ฅธ ์—๋„ˆ์ง€ ์ ˆ์•ฝ ๊ธฐ๋Šฅ์œผ๋กœ, ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ์ตœ๋Œ€๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์žŠ์–ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” SPI๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‘ ๊ฐœ์˜ ํ•€(๋ฐ์ดํ„ฐ ๋ฐ ํด๋Ÿญ ์‹ ํ˜ธ ํฌํ•จ)์ด "๋Œ€์ฒด ํ‘ธ์‹œ-ํ’€ ๊ธฐ๋Šฅ"์ด์–ด์•ผ ํ•˜๊ณ  ๋‹ค๋ฅธ ํ•€(LAT)์€ "์ผ๋ฐ˜ ํ‘ธ์‹œ-ํ’€"์ด์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ• ๋‹นํ•˜๊ธฐ ์ „์— SPI๋ฅผ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค.

SPI

๋˜ ๋‹ค๋ฅธ ์†Œ๊ทœ๋ชจ ๊ต์œก ํ”„๋กœ๊ทธ๋žจ

SPI ๋˜๋Š” ์ง๋ ฌ ์ฃผ๋ณ€ ์žฅ์น˜ ์ธํ„ฐํŽ˜์ด์Šค(์ง๋ ฌ ์ฃผ๋ณ€ ์žฅ์น˜ ์ธํ„ฐํŽ˜์ด์Šค)๋Š” MK๋ฅผ ๋‹ค๋ฅธ MK ๋ฐ ์™ธ๋ถ€ ์„ธ๊ณ„์™€ ์ผ๋ฐ˜์ ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ„๋‹จํ•˜๊ณ  ๋งค์šฐ ํšจ๊ณผ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์ž‘๋™ ์›๋ฆฌ๋Š” ์ค‘๊ตญ LED ๋“œ๋ผ์ด๋ฒ„์— ๋Œ€ํ•ด ์ด๋ฏธ ์œ„์—์„œ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค(์ฐธ์กฐ ๋งค๋‰ด์–ผ, ์„น์…˜ 25 ์ฐธ์กฐ). SPI๋Š” ๋งˆ์Šคํ„ฐ("๋งˆ์Šคํ„ฐ") ๋ฐ ์Šฌ๋ ˆ์ด๋ธŒ("์Šฌ๋ ˆ์ด๋ธŒ") ๋ชจ๋“œ์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SPI์—๋Š” XNUMX๊ฐœ์˜ ๊ธฐ๋ณธ ์ฑ„๋„์ด ์žˆ์ง€๋งŒ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

  • MOSI, ๋งˆ์Šคํ„ฐ ์ถœ๋ ฅ/์Šฌ๋ ˆ์ด๋ธŒ ์ž…๋ ฅ: ์ด ํ•€์€ ๋งˆ์Šคํ„ฐ ๋ชจ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ  ์Šฌ๋ ˆ์ด๋ธŒ ๋ชจ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.
  • MISO, ๋งˆ์Šคํ„ฐ ์ž…๋ ฅ/์Šฌ๋ ˆ์ด๋ธŒ ์ถœ๋ ฅ: ๋ฐ˜๋Œ€๋กœ ๋งˆ์Šคํ„ฐ์—์„œ ์ˆ˜์‹ ํ•˜๊ณ  ์Šฌ๋ ˆ์ด๋ธŒ์—์„œ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  • SCK, Serial Clock: ๋งˆ์Šคํ„ฐ์—์„œ ๋ฐ์ดํ„ฐ ์ „์†ก ์ฃผํŒŒ์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์Šฌ๋ ˆ์ด๋ธŒ์—์„œ ํด๋Ÿญ ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ์งˆ์ ์œผ๋กœ ๋น„ํŠธ๋ฅผ ์น˜๋Š” ๊ฒƒ;
  • SS, ์Šฌ๋ ˆ์ด๋ธŒ ์„ ํƒ: ์ด ์ฑ„๋„์˜ ๋„์›€์œผ๋กœ ์Šฌ๋ ˆ์ด๋ธŒ๋Š” ์ž์‹ ์ด ์›ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. STM32์—์„œ๋Š” NSS๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ N = ์Œ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ์ฑ„๋„์— ์ ‘์ง€๊ฐ€ ์žˆ์œผ๋ฉด ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์˜คํ”ˆ ๋“œ๋ ˆ์ธ ์ถœ๋ ฅ ๋ชจ๋“œ์™€ ์ž˜ ๊ฒฐํ•ฉ๋˜์ง€๋งŒ ์ด๋Š” ๋˜ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ STM32์˜ SPI๋Š” ๊ธฐ๋Šฅ์ด ํ’๋ถ€ํ•˜์—ฌ ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ๋‹ค์†Œ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด SPI๋ฟ๋งŒ ์•„๋‹ˆ๋ผ I2S ์ธํ„ฐํŽ˜์ด์Šค์—์„œ๋„ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฌธ์„œ์— ํ•ด๋‹น ์„ค๋ช…์ด ํ˜ผํ•ฉ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ ์‹œ์— ์ดˆ๊ณผ๋ถ„์„ ์ฐจ๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์ž‘์—…์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. MOSI์™€ SCK๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์„น์…˜ 25.3.4(๋ฐ˜์ด์ค‘ ํ†ต์‹ , ๋ฐ˜์ด์ค‘ ํ†ต์‹ )๋กœ ์ด๋™ํ•˜์—ฌ ๋‹ค์Œ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ํด๋ก 1๊ฐœ ๋ฐ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ์™€์ด์–ด 1๊ฐœ (ํด๋Ÿญ ์‹ ํ˜ธ 1๊ฐœ ๋ฐ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ 1๊ฐœ):

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
์ด ๋ชจ๋“œ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ „์†ก ์ „์šฉ ๋˜๋Š” ์ˆ˜์‹  ์ „์šฉ ๋ชจ๋“œ์—์„œ SPI๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. / ์ „์†ก ์ „์šฉ ๋ชจ๋“œ๋Š” ์ด์ค‘ ๋ชจ๋“œ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ์ „์†ก ํ•€(๋งˆ์Šคํ„ฐ ๋ชจ๋“œ์—์„œ๋Š” MOSI, ์Šฌ๋ ˆ์ด๋ธŒ ๋ชจ๋“œ์—์„œ๋Š” MISO)์„ ํ†ตํ•ด ์ „์†ก๋˜๊ณ , ์ˆ˜์‹  ํ•€(๊ฐ๊ฐ MISO ๋˜๋Š” MOSI)์€ ์ผ๋ฐ˜ I/O ํ•€์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. . ์ด ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Rx ๋ฒ„ํผ๋งŒ ๋ฌด์‹œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. (์ฝ๋Š” ๊ฒฝ์šฐ ๊ฑฐ๊ธฐ์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

์ข‹์Šต๋‹ˆ๋‹ค. MISO ํ•€์€ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค. LAT ์‹ ํ˜ธ๋ฅผ ์—ฐ๊ฒฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. STM32์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด ๋งค์šฐ ํŽธ๋ฆฌํ•œ Slave Select๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์„น์…˜ 25.3.1 SPI ์ผ๋ฐ˜ ์„ค๋ช…์—์„œ ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋‹จ๋ฝ์„ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
์†Œํ”„ํŠธ์›จ์–ด ์ œ์–ด NSS(SSM = 1) / ์Šฌ๋ ˆ์ด๋ธŒ ์„ ํƒ ์ •๋ณด๋Š” SPI_CR1 ๋ ˆ์ง€์Šคํ„ฐ์˜ SSI ๋น„ํŠธ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ NSS ํ•€์€ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์œ„ํ•ด ๋ฌด๋ฃŒ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์ด์ œ ๋ ˆ์ง€์Šคํ„ฐ์— ์“ธ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ์ €๋Š” SPI2๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์‹œํŠธ์˜ 3.3 ๋ฉ”๋ชจ๋ฆฌ ๋งต ์„น์…˜์—์„œ ๊ธฐ๋ณธ ์ฃผ์†Œ๋ฅผ ์ฐพ์•„๋ณด์„ธ์š”.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ

์ž, ์‹œ์ž‘ํ•ด ๋ด…์‹œ๋‹ค:

#define _SPI2_(mem_offset) (*(volatile uint32_t *)(0x40003800 + (mem_offset)))

"๋งˆ์Šคํ„ฐ ๋ชจ๋“œ์—์„œ SPI ๊ตฌ์„ฑ"์ด๋ผ๋Š” ์ œ๋ชฉ์œผ๋กœ ์„น์…˜ 25.3.3์„ ์—ฝ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ

1. SPI_CR2 ๋ ˆ์ง€์Šคํ„ฐ์˜ ๋น„ํŠธ BR[0:1]์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง๋ ฌ ํด๋ก ์ฃผํŒŒ์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ์ง€์Šคํ„ฐ๋Š” ๋™์ผํ•œ ์ด๋ฆ„์˜ ์ฐธ์กฐ ๋งค๋‰ด์–ผ ์„น์…˜์— ์ˆ˜์ง‘๋ฉ๋‹ˆ๋‹ค. ์ฃผ์†Œ ์ด๋™(์ฃผ์†Œ ์˜คํ”„์…‹) CR1 โ€“ 0x00์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๋น„ํŠธ๊ฐ€ ์ง€์›Œ์ง‘๋‹ˆ๋‹ค(์žฌ์„ค์ • ๊ฐ’ 0x0000):

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ

BR ๋น„ํŠธ๋Š” ์ปจํŠธ๋กค๋Ÿฌ ํด๋Ÿญ ๋ถ„๋ฐฐ๊ธฐ๋ฅผ ์„ค์ •ํ•˜์—ฌ SPI๊ฐ€ ์ž‘๋™ํ•  ์ฃผํŒŒ์ˆ˜๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์‹œํŠธ์— ๋”ฐ๋ฅด๋ฉด STM32 ์ฃผํŒŒ์ˆ˜๋Š” 72MHz์ด๊ณ  LED ๋“œ๋ผ์ด๋ฒ„๋Š” ์ตœ๋Œ€ 25MHz์˜ ์ฃผํŒŒ์ˆ˜๋กœ ์ž‘๋™ํ•˜๋ฏ€๋กœ 2๋กœ ๋‚˜๋ˆ„์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(BR[0:001] = XNUMX).

#define _SPI_CR1 0x00

#define BR_0        0x0008
#define BR_1        0x0010
#define BR_2        0x0020

_SPI2_ (_SPI_CR1) |= BR_0;// pclk/4

2. CPOL ๋ฐ CPHA ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ „์†ก๊ณผ ์ง๋ ฌ ํด๋Ÿญ ํƒ€์ด๋ฐ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค(240ํŽ˜์ด์ง€ ๋‹ค์ด์–ด๊ทธ๋žจ ์ฐธ์กฐ).

์—ฌ๊ธฐ์„œ๋Š” ํšŒ๋กœ๋„๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ์‹œํŠธ๋ฅผ ์ฝ๊ณ  ์žˆ์œผ๋ฏ€๋กœ 704ํŽ˜์ด์ง€(SPI ์ผ๋ฐ˜ ์„ค๋ช…)์˜ CPOL ๋ฐ CPHA ๋น„ํŠธ์— ๋Œ€ํ•œ ํ…์ŠคํŠธ ์„ค๋ช…์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
ํด๋ก ์œ„์ƒ ๋ฐ ๊ทน์„ฑ
SPI_CR1 ๋ ˆ์ง€์Šคํ„ฐ์˜ CPOL ๋ฐ CPHA ๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ XNUMX๊ฐœ์˜ ํƒ€์ด๋ฐ ๊ด€๊ณ„๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CPOL(ํด๋Ÿญ ๊ทน์„ฑ) ๋น„ํŠธ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋˜์ง€ ์•Š์„ ๋•Œ ํด๋Ÿญ ์‹ ํ˜ธ์˜ ์ƒํƒœ๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ด ๋น„ํŠธ๋Š” ๋งˆ์Šคํ„ฐ ๋ฐ ์Šฌ๋ ˆ์ด๋ธŒ ๋ชจ๋“œ๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. CPOL์ด ์žฌ์„ค์ •๋˜๋ฉด SCK ํ•€์€ ํœด์ง€ ๋ชจ๋“œ์—์„œ ๋กœ์šฐ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. CPOL ๋น„ํŠธ๊ฐ€ ์„ค์ •๋˜๋ฉด ํœด์ง€ ๋ชจ๋“œ ๋™์•ˆ SCK ํ•€์ด ํ•˜์ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
CPHA(ํด๋Ÿญ ์œ„์ƒ) ๋น„ํŠธ๊ฐ€ ์„ค์ •๋˜๋ฉด ๋†’์€ ๋น„ํŠธ ํŠธ๋žฉ ์ŠคํŠธ๋กœ๋ธŒ๋Š” SCK ์‹ ํ˜ธ์˜ ๋‘ ๋ฒˆ์งธ ์—์ง€์ž…๋‹ˆ๋‹ค(CPOL์ด ํด๋ฆฌ์–ด๋˜๋ฉด ํ•˜๋ฝ, CPOL์ด ์„ค์ •๋˜๋ฉด ์ƒ์Šน). ๋ฐ์ดํ„ฐ๋Š” ํด๋ก ์‹ ํ˜ธ์˜ ๋‘ ๋ฒˆ์งธ ๋ณ€ํ™”์— ์˜ํ•ด ์บก์ฒ˜๋ฉ๋‹ˆ๋‹ค. CPHA ๋น„ํŠธ๊ฐ€ ํด๋ฆฌ์–ด๋œ ๊ฒฝ์šฐ ํ•˜์ด ๋น„ํŠธ ํŠธ๋žฉ ์ŠคํŠธ๋กœ๋ธŒ๋Š” SCK ์‹ ํ˜ธ์˜ ์ƒ์Šน ์—์ง€์ž…๋‹ˆ๋‹ค(CPOL์ด ์„ค์ •๋œ ๊ฒฝ์šฐ ํ•˜๊ฐ• ์—์ง€, CPOL์ด ํด๋ฆฌ์–ด๋œ ๊ฒฝ์šฐ ์ƒ์Šน ์—์ง€). ๋ฐ์ดํ„ฐ๋Š” ํด๋Ÿญ ์‹ ํ˜ธ๊ฐ€ ์ฒ˜์Œ ๋ณ€๊ฒฝ๋  ๋•Œ ์บก์ฒ˜๋ฉ๋‹ˆ๋‹ค.

์ด ์ง€์‹์„ ํก์ˆ˜ํ•œ ํ›„ ์šฐ๋ฆฌ๋Š” ๋‘ ๋น„ํŠธ๊ฐ€ ๋ชจ๋‘ XNUMX์œผ๋กœ ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒฐ๋ก ์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ SCK ์‹ ํ˜ธ๊ฐ€ ๋‚ฎ๊ฒŒ ์œ ์ง€๋˜๊ณ  ํŽ„์Šค์˜ ์ƒ์Šน ์—์ง€์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆผ XNUMX ์ฐธ์กฐ). ๋ผ์ด์ง• ์—์ง€ DM634 ๋ฐ์ดํ„ฐ์‹œํŠธ ์ฐธ์กฐ).

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์ฒ˜์Œ์œผ๋กœ ST ๋ฐ์ดํ„ฐ์‹œํŠธ์—์„œ ์–ดํœ˜์˜ ํŠน์ง•์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” "๋น„ํŠธ๋ฅผ XNUMX์œผ๋กœ ์žฌ์„ค์ •"์ด๋ผ๋Š” ๋ฌธ๊ตฌ๊ฐ€ ๊ธฐ๋ก๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ๊ธˆ ์žฌ์„ค์ •ํ•˜๋ ค๋ฉด์•„๋‹ˆ๋ผ ์กฐ๊ธˆ ํด๋ฆฌ์–ดํ•˜๋‹ค, ์˜ˆ๋ฅผ ๋“ค์–ด Atmega์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

3. DFF ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์ด 8๋น„ํŠธ ํ˜•์‹์ธ์ง€ 16๋น„ํŠธ ํ˜•์‹์ธ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” DM16์ฒ˜๋Ÿผ 634๋น„ํŠธ PWM ๋ฐ์ดํ„ฐ ์ „์†ก์— ๋ฐฉํ•ด๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ํŠน๋ณ„ํžˆ 12๋น„ํŠธ DM633๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. DFF๋ฅผ XNUMX๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

#define DFF         0x0800

_SPI2_ (_SPI_CR1) |= DFF; // 16-bit mode

4. SPI_CR1 ๋ ˆ์ง€์Šคํ„ฐ์˜ LSBFIRST ๋น„ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ๋ธ”๋ก ํ˜•์‹์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

LSBFIRST๋Š” ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ตœํ•˜์œ„ ๋น„ํŠธ๋ฅผ ๋จผ์ € ์‚ฌ์šฉํ•˜์—ฌ ์ „์†ก์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ DM634๋Š” ์ตœ์ƒ์œ„ ๋น„ํŠธ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์žฌ์„ค์ •๋œ ์ƒํƒœ๋กœ ๋‘ก๋‹ˆ๋‹ค.

5. ํ•˜๋“œ์›จ์–ด ๋ชจ๋“œ์—์„œ NSS ํ•€์˜ ์ž…๋ ฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ „์ฒด ๋ฐ”์ดํŠธ ์ „์†ก ์‹œํ€€์Šค ๋™์•ˆ NSS ํ•€์— ๋†’์€ ์‹ ํ˜ธ๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. NSS ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“œ์—์„œ๋Š” SPI_CR1 ๋ ˆ์ง€์Šคํ„ฐ์— SSM ๋ฐ SSI ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. NSS ํ•€์„ ์ถœ๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด SSOE ๋น„ํŠธ๋งŒ ์„ค์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

NSS ํ•˜๋“œ์›จ์–ด ๋ชจ๋“œ๋ฅผ ์žŠ์–ด๋ฒ„๋ฆฌ๋ ค๋ฉด SSM ๋ฐ SSI๋ฅผ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค.

#define SSI         0x0100
#define SSM         0x0200

_SPI2_ (_SPI_CR1) |= SSM | SSI; //enable software control of SS, SS high

6. MSTR ๋ฐ SPE ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(NSS ์‹ ํ˜ธ๊ฐ€ ๋†’์„ ๊ฒฝ์šฐ์—๋งŒ ์„ค์ •๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋จ).

์‹ค์ œ๋กœ ์ด๋Ÿฌํ•œ ๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SPI๋ฅผ ๋งˆ์Šคํ„ฐ๋กœ ์ง€์ •ํ•˜๊ณ  ์ผญ๋‹ˆ๋‹ค.

#define MSTR        0x0004
#define SPE         0x0040

_SPI2_ (_SPI_CR1) |= MSTR; //SPI master
//ะบะพะณะดะฐ ะฒัะต ะณะพั‚ะพะฒะพ, ะฒะบะปัŽั‡ะฐะตะผ SPI
_SPI2_ (_SPI_CR1) |= SPE;

SPI๊ฐ€ ๊ตฌ์„ฑ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋“œ๋ผ์ด๋ฒ„์— ๋ฐ”์ดํŠธ๋ฅผ ๋ณด๋‚ด๋Š” ํ•จ์ˆ˜๋ฅผ ์ฆ‰์‹œ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณ„์† ์ฝ๊ธฐ 25.3.3 โ€œ๋งˆ์Šคํ„ฐ ๋ชจ๋“œ์—์„œ SPI ๊ตฌ์„ฑโ€:

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
๋ฐ์ดํ„ฐ ์ „์†ก ์ˆœ์„œ
Tx ๋ฒ„ํผ์— ๋ฐ”์ดํŠธ๊ฐ€ ๊ธฐ๋ก๋˜๋ฉด ์ „์†ก์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ ๋ฐ”์ดํŠธ๋Š” ์‹œํ”„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ์— ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ํ‰ํ–‰ ์ฒซ ๋ฒˆ์งธ ๋น„ํŠธ๋ฅผ ์ „์†กํ•˜๋Š” ๋™์•ˆ ๋ชจ๋“œ(๋‚ด๋ถ€ ๋ฒ„์Šค์—์„œ), ๊ทธ ํ›„ ๋‹ค์Œ์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์ž‡๋‹ฌ์•„ ์ผ์–ด๋‚˜๋Š” MOSI ํ•€ ๋ชจ๋“œ, CPI_CR1 ๋ ˆ์ง€์Šคํ„ฐ์˜ LSBFIRST ๋น„ํŠธ ์„ค์ •์— ๋”ฐ๋ผ ์ฒซ ๋ฒˆ์งธ ๋˜๋Š” ๋งˆ์ง€๋ง‰ ๋น„ํŠธ ์ „๋‹ฌ. TXE ํ”Œ๋ž˜๊ทธ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก ํ›„์— ์„ค์ •๋ฉ๋‹ˆ๋‹ค. Tx ๋ฒ„ํผ์—์„œ ์‹œํ”„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋กœ, CPI_CR1 ๋ ˆ์ง€์Šคํ„ฐ์˜ TXEIE ๋น„ํŠธ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋„ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

STM ์ปจํŠธ๋กค๋Ÿฌ์˜ SPI ๊ตฌํ˜„ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์— ์ฃผ์˜๋ฅผ ๋Œ๊ธฐ ์œ„ํ•ด ๋ฒˆ์—ญ์—์„œ ๋ช‡ ๋‹จ์–ด๋ฅผ ๊ฐ•์กฐํ–ˆ์Šต๋‹ˆ๋‹ค. Atmega์—์„œ๋Š” TXE ํ”Œ๋ž˜๊ทธ(์†ก์‹ ์ด ๋น„์–ด ์žˆ์Œ, Tx๋Š” ๋น„์–ด ์žˆ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์Œ)๋Š” ์ „์ฒด ๋ฐ”์ดํŠธ๊ฐ€ ์ „์†ก๋œ ํ›„์—๋งŒ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋ฐ–. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ ์ด ํ”Œ๋ž˜๊ทธ๋Š” ๋ฐ”์ดํŠธ๊ฐ€ ๋‚ด๋ถ€ ์‹œํ”„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ์— ์‚ฝ์ž…๋œ ํ›„์— ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋น„ํŠธ๊ฐ€ ๋™์‹œ์—(๋ณ‘๋ ฌ๋กœ) ํ‘ธ์‹œ๋œ ๋‹ค์Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ „์†ก๋˜๋ฏ€๋กœ TXE๋Š” ๋ฐ”์ดํŠธ๊ฐ€ ์™„์ „ํžˆ ์ „์†ก๋˜๊ธฐ ์ „์— ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ค‘์š”ํ•œ ์ด์œ ๋Š” LED ๋“œ๋ผ์ด๋ฒ„์˜ ๊ฒฝ์šฐ ์ „์†ก ํ›„ LAT ํ•€์„ ๋‹น๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ, ์ฆ‰ TXE ํ”Œ๋ž˜๊ทธ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋Š” ๋˜ ๋‹ค๋ฅธ ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 25.3.7 - "์ƒํƒœ ํ”Œ๋ž˜๊ทธ"๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
<โ€ฆ>
๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
BUSY ํ”Œ๋ž˜๊ทธ
BSY ํ”Œ๋ž˜๊ทธ๋Š” ํ•˜๋“œ์›จ์–ด์— ์˜ํ•ด ์„ค์ •๋˜๊ณ  ์ง€์›Œ์ง‘๋‹ˆ๋‹ค(๊ธฐ๋กํ•ด๋„ ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค). BSY ํ”Œ๋ž˜๊ทธ๋Š” SPI ํ†ต์‹  ๊ณ„์ธต์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์ด ์žฌ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
์ „์†ก์ด ์™„๋ฃŒ๋œ ๊ฒฝ์šฐ(์ „์†ก์ด ์—ฐ์†๋˜๋Š” ๊ฒฝ์šฐ ๋งˆ์Šคํ„ฐ ๋ชจ๋“œ ์ œ์™ธ)
SPI๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ
๋งˆ์Šคํ„ฐ ๋ชจ๋“œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ(MODF=1)
์ „์†ก์ด ์—ฐ์†์ ์ด์ง€ ์•Š์œผ๋ฉด ๊ฐ ๋ฐ์ดํ„ฐ ์ „์†ก ์‚ฌ์ด์— BSY ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ง€์›Œ์ง‘๋‹ˆ๋‹ค.

์ข‹์•„์š”, ์ด๊ฒŒ ๋„์›€์ด ๋  ๊ฑฐ์˜ˆ์š”. Tx ๋ฒ„ํผ๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด "SPI ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ"๋ฅผ ์ฝ์œผ์‹ญ์‹œ์˜ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
๋น„ํŠธ 15:0 DR[15:0] ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ
์ˆ˜์‹ ๋œ ๋ฐ์ดํ„ฐ ๋˜๋Š” ์ „์†กํ•  ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ๋Š” ๋‘ ๊ฐœ์˜ ๋ฒ„ํผ๋กœ ๋‚˜๋ˆ„์–ด์ง‘๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ์“ฐ๊ธฐ์šฉ(์ „์†ก ๋ฒ„ํผ)์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์ฝ๊ธฐ์šฉ(์ˆ˜์‹  ๋ฒ„ํผ)์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ์— ์“ฐ๋ฉด Tx ๋ฒ„ํผ์— ์“ฐ๊ณ , ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ์—์„œ ์ฝ์œผ๋ฉด Rx ๋ฒ„ํผ์— ํฌํ•จ๋œ ๊ฐ’์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  TXE ๋ฐ BSY ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ๋Š” ์ƒํƒœ ๋ ˆ์ง€์Šคํ„ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ

์šฐ๋ฆฌ๋Š” ์“ด๋‹ค:

#define _SPI_DR  0x0C
#define _SPI_SR  0x08

#define BSY         0x0080
#define TXE         0x0002

void dm_shift16(uint16_t value)
{
    _SPI2_(_SPI_DR) = value; //send 2 bytes
    while (!(_SPI2_(_SPI_SR) & TXE)); //wait until they're sent
}

LED ๋“œ๋ผ์ด๋ฒ„ ์ถœ๋ ฅ ์ˆ˜์— ๋”ฐ๋ผ 16๋ฐ”์ดํŠธ์˜ XNUMX๋ฐฐ๋ฅผ ์ „์†กํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

void sendLEDdata()
{
    LAT_low();
    uint8_t k = 16;
    do
    {   k--;
        dm_shift16(leds[k]);
    } while (k);

    while (_SPI2_(_SPI_SR) & BSY); // finish transmission

    LAT_pulse();
}

ํ•˜์ง€๋งŒ ์•„์ง LAT ํ•€์„ ์–ด๋–ป๊ฒŒ ๋ฝ‘๋Š”์ง€ ๋ชจ๋ฅด๋ฏ€๋กœ I/O๋กœ ๋Œ์•„๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ•€ ํ• ๋‹น

STM32F1์—์„œ ํ•€ ์ƒํƒœ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋Š” ๋งค์šฐ ํŠน์ดํ•ฉ๋‹ˆ๋‹ค. Atmega๋ณด๋‹ค ๋” ๋งŽ์€ ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ STM ์นฉ๊ณผ๋„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์„น์…˜ 9.1 GPIO์˜ ์ผ๋ฐ˜ ์„ค๋ช…:

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
๊ฐ ๋ฒ”์šฉ I/O ํฌํŠธ (GPIO) 32๊ฐœ์˜ 32๋น„ํŠธ ๊ตฌ์„ฑ ๋ ˆ์ง€์Šคํ„ฐ(GPIOx_CRL ๋ฐ GPIOx_CRH), 32๊ฐœ์˜ 16๋น„ํŠธ ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ(GPIOx_IDR ๋ฐ GPIOx_ODR), 32๋น„ํŠธ ์„ค์ •/์žฌ์„ค์ • ๋ ˆ์ง€์Šคํ„ฐ(GPIOx_BSRR), XNUMX๋น„ํŠธ ์žฌ์„ค์ • ๋ ˆ์ง€์Šคํ„ฐ(GPIOx_BRR) ๋ฐ XNUMX๋น„ํŠธ ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„ํŠธ ์ฐจ๋‹จ ๋ ˆ์ง€์Šคํ„ฐ(GPIOx_LCKR).

์ฒ˜์Œ ๋‘ ๊ฐœ์˜ ๋ ˆ์ง€์Šคํ„ฐ๋Š” ํŠน์ดํ•˜๊ณ  ๋งค์šฐ ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค. 16๊ฐœ์˜ ํฌํŠธ ํ•€์ด "ํ˜•์ œ๋‹น XNUMX๋น„ํŠธ" ํ˜•์‹์œผ๋กœ ๋ถ„์‚ฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ €๊ฒƒ๋“ค. ํ•€ XNUMX~XNUMX์€ CRL์— ์žˆ๊ณ  ๋‚˜๋จธ์ง€๋Š” CRH์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ๋‚˜๋จธ์ง€ ๋ ˆ์ง€์Šคํ„ฐ์—๋Š” ํฌํŠธ์˜ ๋ชจ๋“  ํ•€ ๋น„ํŠธ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ํฌํ•จ๋˜๋ฉฐ, ์ข…์ข… ์ ˆ๋ฐ˜์ด "์˜ˆ์•ฝ"๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ˆœํ™”๋ฅผ ์œ„ํ•ด ๋ชฉ๋ก์˜ ๋๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฐจ๋‹จ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„ค์ • ๋ฐ ์žฌ์„ค์ • ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์„œ๋กœ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ณต์ œ๋œ๋‹ค๋Š” ์ ์—์„œ ๋งค์šฐ ์žฌ๋ฏธ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์„ BSRR์—๋งŒ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ƒ์œ„ 16๋น„ํŠธ๋Š” ํ•€์„ 1์œผ๋กœ ์žฌ์„ค์ •ํ•˜๊ณ  ํ•˜์œ„ ๋น„ํŠธ๋Š” 16๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. BRR์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ํ•˜์œ„ XNUMX๋น„ํŠธ๋Š” ํ•€๋งŒ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‘ ๋ฒˆ์งธ ์˜ต์…˜์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ ˆ์ง€์Šคํ„ฐ๋Š” ํ•€์— ๋Œ€ํ•œ ์›์ž์  ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
์›์ž ์„ค์ • ๋˜๋Š” ์žฌ์„ค์ •
๋น„ํŠธ ์ˆ˜์ค€์—์„œ GPIOx_ODR์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ๋•Œ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ์›์ž ์“ฐ๊ธฐ ์ž‘์—… APB2๋กœ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋น„ํŠธ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๋น„ํŠธ์˜ ์„ค์ •/์žฌ์„ค์ • ๋ ˆ์ง€์Šคํ„ฐ(GPIOx_BSRR ๋˜๋Š” ์žฌ์„ค์ •์˜ ๊ฒฝ์šฐ GPIOx_BRR)์— "1"์„ ๊ธฐ๋กํ•จ์œผ๋กœ์จ ๋‹ฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋น„ํŠธ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ์—๋Š” ์„ค๋ช…์ด ๋งค์šฐ ํ•„์š”ํ•œ ์ด๋ฆ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. IDR = ์ž…๋ ฅ ๋ฐฉํ–ฅ ๋ ˆ์ง€์Šคํ„ฐ, ์ž…๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ; ODR = ์‚ฐ์ถœ ๋ฐฉํ–ฅ ๋ ˆ์ง€์Šคํ„ฐ, ์ถœ๋ ฅ ๋ ˆ์ง€์Šคํ„ฐ. ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ œ์–ด ๋ ˆ์ง€์Šคํ„ฐ์ž…๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ SPI ํ•€์ธ PB13, PB14 ๋ฐ PB15์— ๊ด€์‹ฌ์ด ์žˆ์œผ๋ฏ€๋กœ ์ฆ‰์‹œ CRH๋ฅผ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” 20์—์„œ 31๊นŒ์ง€์˜ ๋น„ํŠธ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ํ•€์—์„œ ์›ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์ด๋ฏธ ์•Œ์•„๋ƒˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ๋Š” ์Šคํฌ๋ฆฐ์ƒท์„ ์ƒ๋žตํ•˜๊ณ  MODE๊ฐ€ ๋ฐฉํ–ฅ(๋‘ ๋น„ํŠธ๊ฐ€ ๋ชจ๋‘ 0์œผ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ์ž…๋ ฅ)๊ณผ ํ•€ ์†๋„(50MHz๊ฐ€ ํ•„์š”ํ•จ, ์ฆ‰ 1MHz๊ฐ€ ํ•„์š”ํ•จ)๋ฅผ ์ง€์ •ํ•œ๋‹ค๊ณ ๋งŒ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‘ ํ•€ ๋ชจ๋‘ "00"๋กœ ์„ค์ •), CNF๋Š” ๋ชจ๋“œ๋ฅผ ์ผ๋ฐ˜ "ํ‘ธ์‹œ-ํ’€" - 10, "๋Œ€์ฒด" - 0์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์œ„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ชจ๋“  ํ•€์—๋Š” ์•„๋ž˜์—์„œ ์„ธ ๋ฒˆ์งธ ๋น„ํŠธ(CNFXNUMX)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“œ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค ๋ถ€๋™ ์ž…๋ ฅ.

์ด ์นฉ์œผ๋กœ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๊ณ„ํš์ด๋ฏ€๋กœ ๋‹จ์ˆœํ™”๋ฅผ ์œ„ํ•ด ํ•˜์œ„ ๋ฐ ์ƒ์œ„ ์ œ์–ด ๋ ˆ์ง€์Šคํ„ฐ ๋ชจ๋‘์— ๋Œ€ํ•ด ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  MODE ๋ฐ CNF ๊ฐ’์„ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์Œ, ๊ทธ๋Ÿฐ ๊ฒƒ

#define CNF0_0 0x00000004
#define CNF0_1 0x00000008
#define CNF1_0 0x00000040
#define CNF1_1 0x00000080
#define CNF2_0 0x00000400
#define CNF2_1 0x00000800
#define CNF3_0 0x00004000
#define CNF3_1 0x00008000
#define CNF4_0 0x00040000
#define CNF4_1 0x00080000
#define CNF5_0 0x00400000
#define CNF5_1 0x00800000
#define CNF6_0 0x04000000
#define CNF6_1 0x08000000
#define CNF7_0 0x40000000
#define CNF7_1 0x80000000
#define CNF8_0 0x00000004
#define CNF8_1 0x00000008
#define CNF9_0 0x00000040
#define CNF9_1 0x00000080
#define CNF10_0 0x00000400
#define CNF10_1 0x00000800
#define CNF11_0 0x00004000
#define CNF11_1 0x00008000
#define CNF12_0 0x00040000
#define CNF12_1 0x00080000
#define CNF13_0 0x00400000
#define CNF13_1 0x00800000
#define CNF14_0 0x04000000
#define CNF14_1 0x08000000
#define CNF15_0 0x40000000
#define CNF15_1 0x80000000

#define MODE0_0 0x00000001
#define MODE0_1 0x00000002
#define MODE1_0 0x00000010
#define MODE1_1 0x00000020
#define MODE2_0 0x00000100
#define MODE2_1 0x00000200
#define MODE3_0 0x00001000
#define MODE3_1 0x00002000
#define MODE4_0 0x00010000
#define MODE4_1 0x00020000
#define MODE5_0 0x00100000
#define MODE5_1 0x00200000
#define MODE6_0 0x01000000
#define MODE6_1 0x02000000
#define MODE7_0 0x10000000
#define MODE7_1 0x20000000
#define MODE8_0 0x00000001
#define MODE8_1 0x00000002
#define MODE9_0 0x00000010
#define MODE9_1 0x00000020
#define MODE10_0 0x00000100
#define MODE10_1 0x00000200
#define MODE11_0 0x00001000
#define MODE11_1 0x00002000
#define MODE12_0 0x00010000
#define MODE12_1 0x00020000
#define MODE13_0 0x00100000
#define MODE13_1 0x00200000
#define MODE14_0 0x01000000
#define MODE14_1 0x02000000
#define MODE15_0 0x10000000
#define MODE15_1 0x20000000

ํ•€์€ ํฌํŠธ B(๊ธฐ๋ณธ ์ฃผ์†Œ โ€“ 0x40010C00)์— ์žˆ์œผ๋ฉฐ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

#define _PORTB_(mem_offset) (*(volatile uint32_t *)(0x40010C00 + (mem_offset)))

#define _BRR  0x14
#define _BSRR 0x10
#define _CRL  0x00
#define _CRH  0x04

//ะธัะฟะพะปัŒะทัƒะตะผ ัั‚ะฐะฝะดะฐั€ั‚ะฝั‹ะน SPI2: MOSI ะฝะฐ B15, CLK ะฝะฐ B13
//LAT ะฟัƒัั‚ัŒ ะฑัƒะดะตั‚ ะฝะฐ ะฝะตะธัะฟะพะปัŒะทัƒะตะผะพะผ MISO โ€“ B14

//ะพั‡ะธั‰ะฐะตะผ ะดะตั„ะพะปั‚ะฝั‹ะน ะฑะธั‚, ะพะฝ ะฝะฐะผ ั‚ะพั‡ะฝะพ ะฝะต ะฝัƒะถะตะฝ
_PORTB_ (_CRH) &= ~(CNF15_0 | CNF14_0 | CNF13_0 | CNF12_0);

//ะฐะปัŒั‚ะตั€ะฝะฐั‚ะธะฒะฝั‹ะต ั„ัƒะฝะบั†ะธะธ ะดะปั MOSI ะธ SCK
_PORTB_ (_CRH) |= CNF15_1 | CNF13_1;

//50 ะœะ“ั†, MODE = 11
_PORTB_ (_CRH) |= MODE15_1 | MODE15_0 | MODE14_1 | MODE14_0 | MODE13_1 | MODE13_0;

๋”ฐ๋ผ์„œ BRR ๋ฐ BSRR ๋ ˆ์ง€์Šคํ„ฐ์— ์˜ํ•ด ํŠธ์œ„์นญ๋˜๋Š” LAT์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

/*** LAT pulse โ€“ high, then low */
#define LAT_pulse() _PORTB_(_BSRR) = (1<<14); _PORTB_(_BRR) = (1<<14)

#define LAT_low() _PORTB_(_BRR) = (1<<14)

(๊ด€์„ฑ์— ์˜ํ•œ LAT_low, ํ•ญ์ƒ ๊ทธ๋ž˜์™”์œผ๋‹ˆ ๊ทธ๋Œ€๋กœ ๋‘์„ธ์š”)

์ด์ œ ๋ชจ๋“  ๊ฒƒ์ด ํ›Œ๋ฅญํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. STM32์ด๊ธฐ ๋•Œ๋ฌธ์— ์ „๋ ฅ์„ ์ ˆ์•ฝํ•˜๋ฏ€๋กœ ํ•„์š”ํ•œ ์ฃผ๋ณ€ ์žฅ์น˜์˜ ํด๋กœํ‚น์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๊ณ„ ์ผœ๊ธฐ

์‹œ๊ณ„๋ผ๊ณ ๋„ ์•Œ๋ ค์ง„ ์‹œ๊ณ„๋Š” ์‹œ๊ฐ„ ์ธก์ •์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ RCC๋ผ๋Š” ์•ฝ์–ด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ์—์„œ ์ด๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์žฌ์„ค์ • ๋ฐ ์‹œ๊ณ„ ์ œ์–ด์ž…๋‹ˆ๋‹ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„ ์‹œ๊ณ„ ์ธก์ • ์ฃผ์ œ ์ค‘ ๊ฐ€์žฅ ์–ด๋ ค์šด ๋ถ€๋ถ„์€ STM ์ง์›์ด ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ๋งค์šฐ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. (๋‹ค์‹œ ํ•œ ๋ฒˆ ๋งํฌ๋ฅผ ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋”” ํ• ํŠธ์˜ ์›น์‚ฌ์ดํŠธ์ฃผ์†Œ, ์–ผ๋งˆ๋‚˜ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด์ง€ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด). ์ฃผ๋ณ€ ์žฅ์น˜ ํด๋Ÿญ ํ™œ์„ฑํ™”๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ(์ฃผ๋ณ€ ์žฅ์น˜ ์‹œ๊ณ„ ํ™œ์„ฑํ™” ๋ ˆ์ง€์Šคํ„ฐ)๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € RCC์˜ ๊ธฐ๋ณธ ์ฃผ์†Œ๋ฅผ ์ฐพ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Š” "๋ฉ”๋ชจ๋ฆฌ ๋งต"์˜ ๋งจ ์ฒ˜์Œ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ

#define _RCC_(mem_offset) (*(volatile uint32_t *)(0x40021000 + (mem_offset)))

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ”Œ๋ ˆ์ดํŠธ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ฐพ์œผ๋ ค๋Š” ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ ํ›จ์”ฌ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ์„น์…˜์—์„œ ํ™œ์„ฑํ™” ๋ ˆ์ง€์Šคํ„ฐ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ ˆ์ง€์Šคํ„ฐ ํ™œ์„ฑํ™”. RCC_APB1ENR ๋ฐ RCC_APB2ENR์„ ์ฐพ์„ ์œ„์น˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ

๋”ฐ๋ผ์„œ ์—ฌ๊ธฐ์—๋Š” SPI2, IOPB(I/O ํฌํŠธ B) ๋ฐ ๋Œ€์ฒด ๊ธฐ๋Šฅ(AFIO)์˜ ํด๋Ÿฌํ‚น์„ ํฌํ•จํ•˜๋Š” ๋น„ํŠธ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

#define _APB2ENR 0x18
#define _APB1ENR 0x1C

#define IOPBEN 0x0008
#define SPI2EN 0x4000
#define AFIOEN 0x0001

//ะฒะบะปัŽั‡ะฐะตะผ ั‚ะฐะบั‚ะธั€ะพะฒะฐะฝะธะต ะฟะพั€ั‚ะฐ B ะธ ะฐะปัŒั‚. ั„ัƒะฝะบั†ะธะน
_RCC_(_APB2ENR) |= IOPBEN | AFIOEN;

//ะฒะบะปัŽั‡ะฐะตะผ  ั‚ะฐะบั‚ะธั€ะพะฒะฐะฝะธะต SPI2
_RCC_(_APB1ENR) |= SPI2EN;

์ตœ์ข… ์ฝ”๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์—ฌ๊ธฐ์—.

ํ…Œ์ŠคํŠธํ•  ๊ธฐํšŒ์™€ ์š•๊ตฌ๊ฐ€ ์žˆ๋‹ค๋ฉด DM634๋ฅผ DAI๋ฅผ PB15์—, DCK๋ฅผ PB13์—, LAT๋ฅผ PB14์— ์—ฐ๊ฒฐํ•˜์‹ญ์‹œ์˜ค. ์šฐ๋ฆฌ๋Š” 5V์—์„œ ๋“œ๋ผ์ด๋ฒ„์— ์ „์›์„ ๊ณต๊ธ‰ํ•˜๋ฉฐ ์ ‘์ง€๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ

STM8 PWM

STM8์˜ PWM

์ œ๊ฐ€ ์ด ๊ธฐ์‚ฌ๋ฅผ ๊ธฐํšํ•  ๋‹น์‹œ, ์ €๋Š” ๋ถ€์ธ  ์—†์ด ์‹ ๋ฐœ์„ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ์ด ๋˜์ง€ ์•Š๋„๋ก ๋ฐ์ดํ„ฐ์‹œํŠธ๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์นฉ์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. STM8์€ ์ด ์—ญํ• ์— ์ด์ƒ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, STM8S103์ด ํฌํ•จ๋œ ์ค‘๊ตญ ๋ณด๋“œ ๋‘ ๊ฐœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๊ณ  ๋‘˜์งธ, ๊ทธ๋‹ค์ง€ ์ธ๊ธฐ๊ฐ€ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐ๋„ท์—์„œ ์†”๋ฃจ์…˜์„ ์ฝ๊ณ  ์ฐพ๊ณ  ์‹ถ์€ ์œ ํ˜น์€ ๋ฐ”๋กœ ์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜์ด ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์นฉ์—๋Š” ๋˜ํ•œ ๋ฐ์ดํ„ฐ ์‹œํŠธ ะธ ์ฐธ์กฐ ๋งค๋‰ด์–ผ RM0016, ์ฒซ ๋ฒˆ์งธ์—๋Š” ํ•€์•„์›ƒ ๋ฐ ๋ ˆ์ง€์Šคํ„ฐ ์ฃผ์†Œ๊ฐ€ ์žˆ๊ณ  ๋‘ ๋ฒˆ์งธ์—๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. STM8์€ ๋”์ฐํ•œ IDE์—์„œ C๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ST ๋น„์ฃผ์–ผ ๋””๋ฒจ๋กญ.

ํด๋Ÿฌํ‚น ๋ฐ I/O

๊ธฐ๋ณธ์ ์œผ๋กœ STM8์€ 2MHz์˜ ์ฃผํŒŒ์ˆ˜์—์„œ ์ž‘๋™ํ•˜๋ฏ€๋กœ ์ฆ‰์‹œ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
HSI(๊ณ ์† ๋‚ด๋ถ€) ํด๋ก
HSI ํด๋ก ์‹ ํ˜ธ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅํ•œ ๋ถ„๋ฐฐ๊ธฐ(16~1)๊ฐ€ ์žˆ๋Š” ๋‚ด๋ถ€ 8MHz RC ๋ฐœ์ง„๊ธฐ์—์„œ ํŒŒ์ƒ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํด๋Ÿญ ๋ถ„๋ฐฐ๊ธฐ ๋ ˆ์ง€์Šคํ„ฐ(CLK_CKDIVR)์— ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
์ฐธ๊ณ : ์ฒ˜์Œ์—๋Š” ๋ถ„๋ฐฐ๊ธฐ๊ฐ€ 8์ธ HSI RC ๋ฐœ์ง„๊ธฐ๊ฐ€ ํด๋ก ์‹ ํ˜ธ์˜ ์ฃผ์š” ์†Œ์Šค๋กœ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ์—์„œ ๋ ˆ์ง€์Šคํ„ฐ ์ฃผ์†Œ๋ฅผ ์ฐพ๊ณ  refman์—์„œ ์„ค๋ช…์„ ์ฐพ์•„ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ง€์›Œ์•ผ ํ•จ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

#define CLK_CKDIVR *(volatile uint8_t *)0x0050C6

CLK_CKDIVR &= ~(0x18);

PWM์„ ์‹คํ–‰ํ•˜๊ณ  LED๋ฅผ ์—ฐ๊ฒฐํ•  ๊ฒƒ์ด๋ฏ€๋กœ ํ•€์•„์›ƒ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ

์นฉ์€ ์ž‘๊ณ  ๋งŽ์€ ๊ธฐ๋Šฅ์ด ๋™์ผํ•œ ํ•€์— ์ •์ง€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๊ด„ํ˜ธ ์•ˆ์˜ ๋‚ด์šฉ์€ "๋Œ€์ฒด ๊ธฐ๋Šฅ"์ด๋ฉฐ "์˜ต์…˜ ๋ฐ”์ดํŠธ"(์˜ต์…˜ ๋ฐ”์ดํŠธ) โ€“ Atmega ํ“จ์ฆˆ์™€ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์€ ์žฌ๋ถ€ํŒ… ํ›„์—๋งŒ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐ”์ดํŠธ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ST Visual Programmer(Visual Development์™€ ํ•จ๊ป˜ ๋‹ค์šด๋กœ๋“œ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. ํ•€์•„์›ƒ์€ ์ฒซ ๋ฒˆ์งธ ํƒ€์ด๋จธ์˜ CH1 ๋ฐ CH2 ํ•€์ด ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ์ˆจ๊ฒจ์ ธ ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. STVP์—์„œ AFR1 ๋ฐ AFR0 ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•˜๋ฉฐ ๋‘ ๋ฒˆ์งธ ๋น„ํŠธ๋Š” ๋‘ ๋ฒˆ์งธ ํƒ€์ด๋จธ์˜ CH1 ์ถœ๋ ฅ๋„ PD4์—์„œ PC5๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ 6๊ฐœ์˜ ํ•€์ด LED๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํƒ€์ด๋จธ์˜ ๊ฒฝ์šฐ PC6, PC7 ๋ฐ PC3, ๋‘ ๋ฒˆ์งธ ํƒ€์ด๋จธ์˜ ๊ฒฝ์šฐ PC5, PD3 ๋ฐ PA3์ž…๋‹ˆ๋‹ค.

STM8์—์„œ I/O ํ•€ ์ž์ฒด๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ STM32๋ณด๋‹ค ๋” ๊ฐ„๋‹จํ•˜๊ณ  ๋…ผ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

  • Atmega DDR ๋ฐ์ดํ„ฐ ๋ฐฉํ–ฅ ๋ ˆ์ง€์Šคํ„ฐ(๋ฐ์ดํ„ฐ ๋ฐฉํ–ฅ ๋ ˆ์ง€์Šคํ„ฐ): 1 = ์ถœ๋ ฅ;
  • ์ฒซ ๋ฒˆ์งธ ์ œ์–ด ๋ ˆ์ง€์Šคํ„ฐ CR1์€ ์ถœ๋ ฅ ์‹œ ํ‘ธ์‹œํ’€ ๋ชจ๋“œ(1) ๋˜๋Š” ์˜คํ”ˆ ๋“œ๋ ˆ์ธ(0)์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. LED๋ฅผ ์Œ๊ทน์œผ๋กœ ์นฉ์— ์—ฐ๊ฒฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—๋Š” XNUMX์„ ๋‚จ๊ฒจ ๋‘ก๋‹ˆ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ์ œ์–ด ๋ ˆ์ง€์Šคํ„ฐ CR2๋Š” ์ถœ๋ ฅ ์‹œ ํด๋Ÿญ ์†๋„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. 1 = 10MHz

#define PA_DDR     *(volatile uint8_t *)0x005002
#define PA_CR2     *(volatile uint8_t *)0x005004
#define PD_DDR     *(volatile uint8_t *)0x005011
#define PD_CR2     *(volatile uint8_t *)0x005013
#define PC_DDR     *(volatile uint8_t *)0x00500C
#define PC_CR2     *(volatile uint8_t *)0x00500E

PA_DDR = (1<<3); //output
PA_CR2 |= (1<<3); //fast
PD_DDR = (1<<3); //output
PD_CR2 |= (1<<3); //fast
PC_DDR = ((1<<3) | (1<<5) | (1<<6) | (1<<7)); //output
PC_CR2 |= ((1<<3) | (1<<5) | (1<<6) | (1<<7)); //fast

PWM ์„ค์ •

๋จผ์ € ์šฉ์–ด๋ฅผ ์ •์˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • PWM ์ฃผํŒŒ์ˆ˜ โ€“ ํƒ€์ด๋จธ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋นˆ๋„;
  • ์ž๋™ ์žฌ์žฅ์ „, AR โ€“ ํƒ€์ด๋จธ๊ฐ€ ๊ณ„์‚ฐ๋˜๋Š” ์ž๋™ ๋กœ๋“œ ๊ฐ€๋Šฅ ๊ฐ’(ํŽ„์Šค ์ฃผ๊ธฐ)
  • ์—…๋ฐ์ดํŠธ ์ด๋ฒคํŠธ, UEV โ€“ ํƒ€์ด๋จธ๊ฐ€ AR๊นŒ์ง€ ์นด์šดํŠธ๋˜์—ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ;
  • PWM ๋“€ํ‹ฐ ์‚ฌ์ดํด โ€“ ํ”ํžˆ "๋“€ํ‹ฐ ํŒฉํ„ฐ"๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” PWM ๋“€ํ‹ฐ ์‚ฌ์ดํด
  • ๊ฐ’ ์บก์ฒ˜/๋น„๊ต โ€“ ํƒ€์ด๋จธ๊ฐ€ ๊ณ„์‚ฐํ•œ ์บก์ฒ˜/๋น„๊ต ๊ฐ’ ๋ญ”๊ฐ€ ํ•  ๊ฒƒ์ด๋‹ค (PWM์˜ ๊ฒฝ์šฐ ์ถœ๋ ฅ ์‹ ํ˜ธ๋ฅผ ๋ฐ˜์ „์‹œํ‚ต๋‹ˆ๋‹ค.)
  • ์˜ˆ์•• ๊ฐ’ โ€“ ๋ฏธ๋ฆฌ ๋กœ๋“œ๋œ ๊ฐ’. ๊ฐ€์น˜ ๋น„๊ต ํƒ€์ด๋จธ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋™์•ˆ์—๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด PWM ์‚ฌ์ดํด์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒˆ๋กœ์šด ์ „์†ก๋œ ๊ฐ’์€ ๋ฒ„ํผ์— ๋ฐฐ์น˜๋˜๊ณ  ํƒ€์ด๋จธ๊ฐ€ ์นด์šดํŠธ๋‹ค์šด์˜ ๋์— ๋„๋‹ฌํ•˜์—ฌ ์žฌ์„ค์ •๋  ๋•Œ ๊บผ๋‚ด์ง‘๋‹ˆ๋‹ค.
  • ๊ฐ€์žฅ์ž๋ฆฌ ์ •๋ ฌ ะธ ์ค‘์•™ ์ •๋ ฌ ๋ชจ๋“œ โ€“ ๊ฒฝ๊ณ„์„ ๊ณผ ์ค‘์•™์— ์ •๋ ฌ, Atmel๊ณผ ๋™์ผ ๋น ๋ฅธ PWM ะธ ์œ„์ƒ์ฐจ PWM.
  • OCiREF, ์ถœ๋ ฅ ๋น„๊ต ์ฐธ์กฐ ์‹ ํ˜ธ โ€“ ์‹ค์ œ๋กœ PWM ๋ชจ๋“œ์—์„œ ํ•ด๋‹น ํ•€์— ๋‚˜ํƒ€๋‚˜๋Š” ์ฐธ์กฐ ์ถœ๋ ฅ ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค.

ํ•€์•„์›ƒ์—์„œ ์ด๋ฏธ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๋‘ ๊ฐœ์˜ ํƒ€์ด๋จธ์—๋Š” ์ฒซ ๋ฒˆ์งธ์™€ ๋‘ ๋ฒˆ์งธ์˜ PWM ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค 16๋น„ํŠธ์ด๊ณ , ์ฒซ ๋ฒˆ์งธ๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค(ํŠนํžˆ ์œ„์•„๋ž˜๋กœ ์นด์šดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). ์šฐ๋ฆฌ๋Š” ๋‘˜ ๋‹ค ๋™๋“ฑํ•˜๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฑฐ๊ธฐ์— ์—†๋Š” ๊ฒƒ์„ ์‹ค์ˆ˜๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๋ถ„๋ช…ํžˆ ๋” ์—ด์•…ํ•œ ๋‘ ๋ฒˆ์งธ ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๋Š” ์ฐธ์กฐ ๋งค๋‰ด์–ผ์˜ ๋ชจ๋“  ํƒ€์ด๋จธ์˜ PWM ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ์ฒซ ๋ฒˆ์งธ ํƒ€์ด๋จธ(17.5.7 PWM ๋ชจ๋“œ)์— ๋Œ€ํ•œ ์žฅ์— ์žˆ์œผ๋ฏ€๋กœ ํ•ญ์ƒ ๋ฌธ์„œ ์ „์ฒด์—์„œ ์•ž๋’ค๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

STM8์˜ PWM์€ Atmega์˜ PWM์— ๋น„ํ•ด ์ค‘์š”ํ•œ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
๊ฒฝ๊ณ„ ์ •๋ ฌ PWM
์•„๋ž˜์—์„œ ์œ„๋กœ ๊ณ„์ • ๊ตฌ์„ฑ
TIM_CR1 ๋ ˆ์ง€์Šคํ„ฐ์˜ DIR ๋น„ํŠธ๊ฐ€ ์ง€์›Œ์ง€๋ฉด ์ƒํ–ฅ์‹ ์นด์šดํŒ…์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.
์˜ˆ
์ด ์˜ˆ์—์„œ๋Š” ์ฒซ ๋ฒˆ์งธ PWM ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. PWM ๊ธฐ์ค€ ์‹ ํ˜ธ OCiREF๋Š” TIM1_CNT < TIM1_CCRi์ธ ๋™์•ˆ ๋†’๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‚ฎ์€ ์ˆ˜์ค€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. TIM1_CCRi ๋ ˆ์ง€์Šคํ„ฐ์˜ ๋น„๊ต ๊ฐ’์ด ์ž๋™ ๋กœ๋“œ ๊ฐ’(TIM1_ARR ๋ ˆ์ง€์Šคํ„ฐ)๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ OCiREF ์‹ ํ˜ธ๋Š” 1๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๋น„๊ต๊ฐ’์ด 0์ด๋ฉด OCiREF๋Š” XNUMX์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค....

๋™์•ˆ STM8 ํƒ€์ด๋จธ ์—…๋ฐ์ดํŠธ ์ด๋ฒคํŠธ ๋จผ์ € ํ™•์ธ ๊ฐ’์„ ๋น„๊ตํ•˜๋‹ค, ๊ทธ๋Ÿฐ ๋‹ค์Œ์—๋งŒ ์ฐธ์กฐ ์‹ ํ˜ธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. Atmega์˜ ํƒ€์ด๋จธ๋Š” ๋จผ์ € ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ ๋‹ค์Œ ๋น„๊ตํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. compare value == 0 ์ถœ๋ ฅ์€ ์–ด๋–ป๊ฒŒ๋“  ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š” ๋ฐ”๋Š˜์ž…๋‹ˆ๋‹ค(์˜ˆ: ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๋…ผ๋ฆฌ๋ฅผ ๋ฐ˜์ „ํ•˜์—ฌ).

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์€: 8๋น„ํŠธ PWM(AR == 255), ์•„๋ž˜์—์„œ ์œ„๋กœ ๊ณ„์‚ฐํ•˜๊ณ  ํ…Œ๋‘๋ฆฌ๋ฅผ ๋”ฐ๋ผ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. ์ „๊ตฌ๋Š” ์Œ๊ทน์œผ๋กœ ์นฉ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ PWM์€ ๋‹ค์Œ์ด ๋  ๋•Œ๊นŒ์ง€ 0(LED ์ผœ์ง)์„ ์ถœ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์„ ๋น„๊ตํ•˜๋‹ค ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ดํ›„ 1๊ฐœ.

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ผ๋ถ€ ๋‚ด์šฉ์„ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค. PWM ๋ชจ๋“œ, ๋”ฐ๋ผ์„œ ์ฐธ์กฐ ๋งค๋‰ด์–ผ์—์„œ ์ด ๋ฌธ๊ตฌ(18.6.8 - TIMx_CCMR1)๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋‘ ๋ฒˆ์งธ ํƒ€์ด๋จธ์˜ ํ•„์ˆ˜ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
110: ์ฒซ ๋ฒˆ์งธ PWM ๋ชจ๋“œ โ€“ ์•„๋ž˜์—์„œ ์œ„๋กœ ๊ณ„์‚ฐํ•  ๋•Œ TIMx_CNT < TIMx_CCR1์ธ ๋™์•ˆ ์ฒซ ๋ฒˆ์งธ ์ฑ„๋„์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ฒซ ๋ฒˆ์งธ ์ฑ„๋„์ด ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. [์ถ”๊ฐ€ ๋ฌธ์„œ์—๋Š” ํƒ€์ด๋จธ 1์—์„œ ์ž˜๋ชป๋œ ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.] 111: ๋‘ ๋ฒˆ์งธ PWM ๋ชจ๋“œ โ€“ ์•„๋ž˜์—์„œ ์œ„๋กœ ๊ณ„์‚ฐํ•  ๋•Œ TIMx_CNT < TIMx_CCR1 ๋™์•ˆ ์ฒซ ๋ฒˆ์งธ ์ฑ„๋„์ด ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ฒซ ๋ฒˆ์งธ ์ฑ„๋„์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.

LED๋Š” ์Œ๊ทน์œผ๋กœ MK์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋‘ ๋ฒˆ์งธ ๋ชจ๋“œ๊ฐ€ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค(์ฒซ ๋ฒˆ์งธ ๋ชจ๋“œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ง€๋งŒ ์•„์ง์€ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค).

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
๋น„ํŠธ 3 OC1PE: ํ•€ 1 ์˜ˆ์•• ํ™œ์„ฑํ™”
0: TIMx_CCR1์˜ ์‚ฌ์ „ ๋กœ๋“œ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ์–ธ์ œ๋“ ์ง€ TIMx_CCR1์— ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ฐ’์€ ์ฆ‰์‹œ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
1: TIMx_CCR1์˜ ์‚ฌ์ „ ๋กœ๋“œ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ž‘์—…์€ ์‚ฌ์ „ ๋กœ๋“œ ๋ ˆ์ง€์Šคํ„ฐ์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ ๋กœ๋“œ๋œ ๊ฐ’ TIMx_CCR1์€ ๊ฐ ์—…๋ฐ์ดํŠธ ์ด๋ฒคํŠธ ์ค‘์— ์„€๋„์šฐ ๋ ˆ์ง€์Šคํ„ฐ์— ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.
*์ฐธ๊ณ : PWM ๋ชจ๋“œ๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ ค๋ฉด ์‚ฌ์ „ ๋กœ๋“œ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ์ผ ์‹ ํ˜ธ ๋ชจ๋“œ์—์„œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(OPM ๋น„ํŠธ๋Š” TIMx_CR1 ๋ ˆ์ง€์Šคํ„ฐ์— ์„ค์ •๋จ).

์ข‹์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ํƒ€์ด๋จธ์˜ ์„ธ ์ฑ„๋„์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์ผœ๊ฒ ์Šต๋‹ˆ๋‹ค.

#define TIM2_CCMR1 *(volatile uint8_t *)0x005307
#define TIM2_CCMR2 *(volatile uint8_t *)0x005308
#define TIM2_CCMR3 *(volatile uint8_t *)0x005309

#define PWM_MODE2   0x70 //PWM mode 2, 0b01110000
#define OCxPE       0x08 //preload enable

TIM2_CCMR1 = (PWM_MODE2 | OCxPE);
TIM2_CCMR2 = (PWM_MODE2 | OCxPE);
TIM2_CCMR3 = (PWM_MODE2 | OCxPE);

AR์€ ๋‘ ๊ฐœ์˜ XNUMX๋น„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

#define TIM2_ARRH  *(volatile uint8_t *)0x00530F
#define TIM2_ARRL  *(volatile uint8_t *)0x005310

TIM2_ARRH = 0;
TIM2_ARRL = 255;

๋‘ ๋ฒˆ์งธ ํƒ€์ด๋จธ๋Š” ์•„๋ž˜์—์„œ ์œ„๋กœ๋งŒ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ…Œ๋‘๋ฆฌ๋ฅผ ๋”ฐ๋ผ ์ •๋ ฌ๋˜๋ฏ€๋กœ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผํŒŒ์ˆ˜ ๋ถ„๋ฐฐ๊ธฐ๋ฅผ 256์œผ๋กœ ์„ค์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ํƒ€์ด๋จธ์˜ ๊ฒฝ์šฐ ๋ถ„๋ฐฐ๊ธฐ๋Š” TIM2_PSCR ๋ ˆ์ง€์Šคํ„ฐ์— ์„ค์ •๋˜๋ฉฐ XNUMX์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์ž…๋‹ˆ๋‹ค.

#define TIM2_PSCR  *(volatile uint8_t *)0x00530E

TIM2_PSCR = 8;

๋‚จ์€ ๊ฒƒ์€ ๊ฒฐ๋ก ๊ณผ ๋‘ ๋ฒˆ์งธ ํƒ€์ด๋จธ ์ž์ฒด๋ฅผ ์ผœ๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์บก์ฒ˜/๋น„๊ต ์‚ฌ์šฉ: 1, XNUMX๊ฐœ์˜ ์ฑ„๋„์ด ๋น„๋Œ€์นญ์œผ๋กœ ํฉ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์‹ ํ˜ธ์˜ ๊ทน์„ฑ์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›์น™์ ์œผ๋กœ PWM ๋ชจ๋“œ XNUMX์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

#define TIM2_CCER1 *(volatile uint8_t *)0x00530A
#define TIM2_CCER2 *(volatile uint8_t *)0x00530B

#define CC1E  (1<<0) // CCER1
#define CC2E  (1<<4) // CCER1
#define CC3E  (1<<0) // CCER2

TIM2_CCER1 = (CC1E | CC2E);
TIM2_CCER2 = CC3E;

๋งˆ์ง€๋ง‰์œผ๋กœ TIMx_CR1 ๋ ˆ์ง€์Šคํ„ฐ์—์„œ ํƒ€์ด๋จธ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ

#define TIM2_CR1   *(volatile uint8_t *)0x005300

TIM2_CR1 |= 1;

๋น„๊ต๋ฅผ ์œ„ํ•ด ์‹ค์ œ ๊ฐ’์„ ํƒ€์ด๋จธ๋กœ ์ „์†กํ•˜๋Š” AnalogWrite()์˜ ๊ฐ„๋‹จํ•œ ์•„๋‚ ๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ ˆ์ง€์Šคํ„ฐ ์ด๋ฆ„์€ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ์บก์ฒ˜/๋น„๊ต ๋ ˆ์ง€์Šคํ„ฐ, ๊ฐ ์ฑ„๋„๋งˆ๋‹ค ๋‘ ๊ฐœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค: TIM8_CCRxL์˜ ํ•˜์œ„ 2๋น„ํŠธ์™€ TIM2_CCRxH์˜ ์ƒ์œ„ 8๋น„ํŠธ. XNUMX๋น„ํŠธ PWM์„ ์ƒ์„ฑํ–ˆ์œผ๋ฏ€๋กœ ์ตœํ•˜์œ„ ๋น„ํŠธ๋งŒ ์“ฐ๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

#define TIM2_CCR1L *(volatile uint8_t *)0x005312
#define TIM2_CCR2L *(volatile uint8_t *)0x005314
#define TIM2_CCR3L *(volatile uint8_t *)0x005316

void setRGBled(uint8_t r, uint8_t g, uint8_t b)
{
    TIM2_CCR1L = r;
    TIM2_CCR2L = g;
    TIM2_CCR3L = b;
}

์„ธ์‹ฌํ•œ ๋…์ž๋ผ๋ฉด 100% ์ฑ„์›€์„ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋Š” ์•ฝ๊ฐ„ ๊ฒฐํ•จ์ด ์žˆ๋Š” PWM์ด ์žˆ์Œ์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ตœ๋Œ€ ๊ฐ’ 255์—์„œ ์‹ ํ˜ธ๋Š” ํ•œ ํƒ€์ด๋จธ ์ฃผ๊ธฐ ๋™์•ˆ ๋ฐ˜์ „๋ฉ๋‹ˆ๋‹ค). LED์˜ ๊ฒฝ์šฐ ์ด๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์„ธ์‹ฌํ•œ ๋…์ž๋Š” ์ด๋ฏธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ถ”์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ํƒ€์ด๋จธ์˜ PWM์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํƒ€์ด๋จธ๋กœ ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ํƒ€์ด๋จธ๋Š” ๋™์ผํ•œ ๋ ˆ์ง€์Šคํ„ฐ์— ์ •ํ™•ํžˆ ๋™์ผํ•œ ๋น„ํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(๋‘ ๋ฒˆ์งธ ํƒ€์ด๋จธ์— "์˜ˆ์•ฝ"๋œ ์ƒํƒœ๋กœ ๋‚จ์•„ ์žˆ๋Š” ๋น„ํŠธ๋Š” ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๊ณ ๊ธ‰ ์ž‘์—…์„ ์œ„ํ•ด ์ฒซ ๋ฒˆ์งธ ํƒ€์ด๋จธ์—์„œ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค). ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ์‹œํŠธ์—์„œ ๋™์ผํ•œ ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ์ฐพ์•„ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์Œ, ์ฃผํŒŒ์ˆ˜ ๋ถ„๋ฐฐ๊ธฐ์˜ ๊ฐ’์„ ๋ฐ”๊พธ์„ธ์š”. ์™œ๋ƒ๋ฉด... ์ฒซ ๋ฒˆ์งธ ํƒ€์ด๋จธ๋Š” 16์˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์ด ์•„๋‹Œ ๋‘ ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ •ํ™•ํ•œ XNUMX๋น„ํŠธ ๊ฐ’์„ ์ˆ˜์‹ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ฆฌ์Šค์ผ€์ผ๋Ÿฌ ๋†’์Œ ะธ ๋‚ฎ์€. ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค ํ•˜๋Š”๋ฐ... ์ฒซ ๋ฒˆ์งธ ํƒ€์ด๋จธ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌด์Šจ ์ผ์ด์•ผ?

๋ฌธ์ œ๋Š” ํƒ€์ด๋จธ 1์˜ ์ œ์–ด ๋ ˆ์ง€์Šคํ„ฐ์— ๋Œ€ํ•œ ์ „์ฒด ์„น์…˜์„ ์‚ดํŽด๋ด„์œผ๋กœ์จ๋งŒ ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋‘ ๋ฒˆ์งธ ํƒ€์ด๋จธ์— ์—†๋Š” ๊ฒƒ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ์žˆ์„ ๊ฒƒ์ด๋‹ค 17.7.30 ๋ธŒ๋ ˆ์ดํฌ ๋ ˆ์ง€์Šคํ„ฐ(TIM1_BKR), ์—ฌ๊ธฐ์— ๋‹ค์Œ ๋น„ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
๋ฉ”์ธ ์ถœ๋ ฅ ํ™œ์„ฑํ™”

#define TIM1_BKR   *(volatile uint8_t *)0x00526D

TIM1_BKR = (1<<7);

์ด์ œ ํ™•์‹คํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ibid.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ

STM8 ๋ฉ€ํ‹ฐํ”Œ๋ ‰์Šค

STM8์˜ ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ

์„ธ ๋ฒˆ์งธ ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋Š” XNUMX๊ฐœ์˜ RGB LED๋ฅผ ๋‘ ๋ฒˆ์งธ ํƒ€์ด๋จธ์— PWM ๋ชจ๋“œ๋กœ ์—ฐ๊ฒฐํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ์ƒ‰์ƒ์„ ๋ณด์ด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Š” LED ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ์˜ ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, LED๋ฅผ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ผœ๊ณ  ๋„๋ฉด LED๊ฐ€ ๊ณ„์† ์ผœ์ ธ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค(๋น„์ „์˜ ์ง€์†์„ฑ, ์‹œ๊ฐ์  ์ธ์‹์˜ ๊ด€์„ฑ). ๋‚˜๋„ ํ•œ๋•Œ ๊ทธ๋žฌ์–ด Arduino์—์„œ ์ด์™€ ๊ฐ™์€ ๊ฒƒ.

์ž‘์—… ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ RGB LED์˜ ์–‘๊ทน์„ ์—ฐ๊ฒฐํ•˜๊ณ ;
  • ๋ถˆ์„ ์ผœ๊ณ  ํ•„์š”ํ•œ ์‹ ํ˜ธ๋ฅผ ์Œ๊ทน์— ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • PWM ์‚ฌ์ดํด์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ์Šต๋‹ˆ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ RGB LED์˜ ์–‘๊ทน์„ ์—ฐ๊ฒฐํ•˜๊ณ ;
  • ๋ถˆ์„ ๋ถ™์˜€๋‹ค...

๊ธ€์Ž„์š”. ๋ฌผ๋ก , ์•„๋ฆ„๋‹ค์šด ์ž‘๋™์„ ์œ„ํ•ด์„œ๋Š” ์–‘๊ทน์ด ์—ฐ๊ฒฐ๋˜๊ณ  ๋™์‹œ์— LED๊ฐ€ "์ ๋“ฑ"๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธ€์Ž„, ์•„๋‹ˆ๋ฉด ๊ฑฐ์˜. ์–ด์จŒ๋“  ๋‘ ๋ฒˆ์งธ ํƒ€์ด๋จธ์˜ XNUMX๊ฐœ ์ฑ„๋„์— ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ  UEV์— ๋„๋‹ฌํ•˜๋ฉด ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋™์‹œ์— ํ˜„์žฌ ํ™œ์„ฑํ™”๋œ RGB LED๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

LED ์ „ํ™˜์€ ์ž๋™์ด๋ฏ€๋กœ ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•  "๋น„๋””์˜ค ๋ฉ”๋ชจ๋ฆฌ"๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ„๋‹จํ•œ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค:

uint8_t colors[8][3];

ํŠน์ • LED์˜ ์ƒ‰์ƒ์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์ด ๋ฐฐ์—ด์— ํ•„์š”ํ•œ ๊ฐ’์„ ์“ฐ๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ณ€์ˆ˜๋Š” ํ™œ์„ฑ LED์˜ ์ˆ˜๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

uint8_t cnt;

๋””๋จน์Šค

์ ์ ˆํ•œ ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ์„ ์œ„ํ•ด์„œ๋Š” ์ด์ƒํ•˜๊ฒŒ๋„ CD74HC238 ๋””๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋””๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ - ํ•˜๋“œ์›จ์–ด์—์„œ ์—ฐ์‚ฐ์ž๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์นฉ <<. 0๊ฐœ์˜ ์ž…๋ ฅ ํ•€(๋น„ํŠธ 1, 2, XNUMX)์„ ํ†ตํ•ด XNUMX๋น„ํŠธ ์ˆซ์ž X๋ฅผ ๊ณต๊ธ‰ํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ถœ๋ ฅ ์ˆซ์ž(1<<X). ์นฉ์˜ ๋‚˜๋จธ์ง€ ์ž…๋ ฅ์€ ์ „์ฒด ์„ค๊ณ„๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ ์œ  ํ•€ ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹ค์ˆ˜๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ LED๋ฅผ ์ผœ์ง€ ์•Š๊ณ  MK๋ฅผ ํƒœ์šฐ์ง€ ์•Š๋„๋ก ์•ˆ์ „์„ ์œ„ํ•ด์„œ๋„์ด ์นฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์นฉ์˜ ๊ฐ€๊ฒฉ์€ XNUMXํŽ˜๋‹ˆ์ด๋ฉฐ ํ•ญ์ƒ ๊ฐ€์ •์˜ ์•ฝ์žฅ์— ๋ณด๊ด€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CD74HC238์€ ์›ํ•˜๋Š” LED์˜ ์–‘๊ทน์— ์ „์••์„ ๊ณต๊ธ‰ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ๊ฒฉ์ ์ธ ๋ฉ€ํ‹ฐํ”Œ๋ ‰์Šค์—์„œ๋Š” P-MOSFET์„ ํ†ตํ•ด ์—ด์— ์ „์••์„ ๊ณต๊ธ‰ํ•˜์ง€๋งŒ ์ด ๋ฐ๋ชจ์—์„œ๋Š” ์ง์ ‘ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์— ๋”ฐ๋ฅด๋ฉด 20mA๋ฅผ ์†Œ๋ชจํ•ฉ๋‹ˆ๋‹ค. ์ ˆ๋Œ€ ์ตœ๋Œ€ ๋“ฑ๊ธ‰ ๋ฐ์ดํ„ฐ ์‹œํŠธ์—์„œ. ์—์„œ ๋ฐ์ดํ„ฐ์‹œํŠธ CD74HC238 ํ•€์•„์›ƒ๊ณผ ์ด ์น˜ํŠธ ์‹œํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
H = ๋†’์€ ์ „์•• ๋ ˆ๋ฒจ, L = ๋‚ฎ์€ ์ „์•• ๋ ˆ๋ฒจ, X โ€“ ์ƒ๊ด€ ์—†์Œ

E2์™€ E1์„ ์ ‘์ง€์— ์—ฐ๊ฒฐํ•˜๊ณ  E3, A0, A1 ๋ฐ A3์„ STM5์˜ PD3, PC4, PC5 ๋ฐ PC8 ํ•€์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ํ‘œ์—๋Š” ๋กœ์šฐ ๋ ˆ๋ฒจ๊ณผ ํ•˜์ด ๋ ˆ๋ฒจ์ด ๋ชจ๋‘ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ํ•€์„ ํ‘ธ์‹œํ’€ ํ•€์œผ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

PWM

๋‘ ๋ฒˆ์งธ ํƒ€์ด๋จธ์˜ PWM์€ ์ด์ „ ์ด์•ผ๊ธฐ์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜์ง€๋งŒ ๋‘ ๊ฐ€์ง€ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ €, ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ ์ด๋ฒคํŠธ (UEV) ํ™œ์„ฑ LED๋ฅผ ์ „ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋น„ํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ ์ธํ„ฐ๋ŸฝํŠธ ํ™œ์„ฑํ™” ์ด๋ฆ„์„ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ก๋ถ€์—

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
์ธํ„ฐ๋ŸฝํŠธ ํ™œ์„ฑํ™” ๋ ˆ์ง€์Šคํ„ฐ

#define TIM2_IER   *(volatile uint8_t *)0x005303

//enable interrupt
TIM2_IER = 1;

๋‘ ๋ฒˆ์งธ ์ฐจ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค์ค‘ํ™” ํ˜„์ƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ ์ŠคํŠธ โ€“ ๋‹ค์ด์˜ค๋“œ์˜ ๊ธฐ์ƒ ๋ฐœ๊ด‘. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ UEV์—์„œ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ํƒ€์ด๋จธ๊ฐ€ ๊ณ„์† ํ‹ฑํ•˜๊ณ  ํƒ€์ด๋จธ๊ฐ€ ํ•€์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์“ฐ๊ธฐ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ LED๋ฅผ ์ „ํ™˜ํ•  ์‹œ๊ฐ„์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋…ผ๋ฆฌ๋ฅผ ๋ฐ˜์ „ํ•˜๊ณ (0 = ์ตœ๋Œ€ ๋ฐ๊ธฐ, 255 = ์•„๋ฌด๊ฒƒ๋„ ์ผœ์ง€์ง€ ์•Š์Œ) ๊ทน๋‹จ์ ์ธ ๋“€ํ‹ฐ ์‚ฌ์ดํด ๊ฐ’์„ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ €๊ฒƒ๋“ค. UEV ์ดํ›„ LED๊ฐ€ ํ•œ ๋ฒˆ์˜ PWM ์‚ฌ์ดํด ๋™์•ˆ ์™„์ „ํžˆ ๊บผ์ง€๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๊ทน์„ฑ ๋ณ€๊ฒฝ:

//set polarity 
    TIM2_CCER1 |= (CC1P | CC2P);
    TIM2_CCER2 |= CC3P;

r, g, b๋ฅผ 255๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ณ  ์‚ฌ์šฉํ•  ๋•Œ ์ด๋ฅผ ๋ฐ˜์ „์‹œํ‚ค๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ธํ„ฐ๋ŸฝํŠธ

์ธํ„ฐ๋ŸฝํŠธ์˜ ๋ณธ์งˆ์€ ํŠน์ • ์ƒํ™ฉ์—์„œ ์นฉ์ด ๊ธฐ๋ณธ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์„ ์ค‘์ง€ํ•˜๊ณ  ์ผ๋ถ€ ์™ธ๋ถ€ ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํƒ€์ด๋จธ๋ฅผ ํฌํ•จํ•œ ์™ธ๋ถ€ ๋˜๋Š” ๋‚ด๋ถ€ ์˜ํ–ฅ์œผ๋กœ ์ธํ•ด ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ST Visual Development์—์„œ ์ฒ˜์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ–ˆ์„ ๋•Œ, main.c ์šฐ๋ฆฌ๋Š” ์‹ ๋น„ํ•œ ํŒŒ์ผ์ด ์žˆ๋Š” ์ฐฝ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค stm8_interrupt_vector.c, ํ”„๋กœ์ ํŠธ์— ์ž๋™์œผ๋กœ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์—์„œ๋Š” ๊ฐ ์ธํ„ฐ๋ŸฝํŠธ์— ๊ธฐ๋Šฅ์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. NonHandledInterrupt. ํ•จ์ˆ˜๋ฅผ ์›ํ•˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ์— ๋ฐ”์ธ๋”ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ์—๋Š” ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ ํ…Œ์ด๋ธ”์ด ์žˆ์œผ๋ฉฐ ์—ฌ๊ธฐ์„œ ํ•„์š”ํ•œ ํ•ญ๋ชฉ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ
13 TIM2 ์—…๋ฐ์ดํŠธ/์˜ค๋ฒ„ํ”Œ๋กœ
14 TIM2 ์บก์ฒ˜/๋น„๊ต

UEV์—์„œ LED๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ธํ„ฐ๋ŸฝํŠธ #13์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋จผ์ € ํŒŒ์ผ์—์„œ stm8_interrupt_vector.c 13๋ฒˆ ์ธํ„ฐ๋ŸฝํŠธ(IRQ13)๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ ์ด๋ฆ„์„ ์›ํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

{0x82, TIM2_Overflow}, /* irq13 */

๋‘ ๋ฒˆ์งธ๋กœ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. main.h ๋‹ค์Œ ๋‚ด์šฉ์œผ๋กœ:

#ifndef __MAIN_H
#define __MAIN_H

@far @interrupt void TIM2_Overflow (void);
#endif

๋งˆ์ง€๋ง‰์œผ๋กœ ์ด ํ•จ์ˆ˜๋ฅผ main.c:

@far @interrupt void TIM2_Overflow (void)
{
    PD_ODR &= ~(1<<5); // ะฒั‹ั€ัƒะฑะฐะตะผ ะดะตะผัƒะปัŒั‚ะธะฟะปะตะบัะพั€
    PC_ODR = (cnt<<3); // ะทะฐะฟะธัั‹ะฒะฐะตะผ ะฒ ะดะตะผัƒะปัŒั‚ะธะฟะปะตะบัะพั€ ะฝะพะฒะพะต ะทะฝะฐั‡ะตะฝะธะต
    PD_ODR |= (1<<5); // ะฒะบะปัŽั‡ะฐะตะผ ะดะตะผัƒะปัŒั‚ะธะฟะปะตะบัะพั€

    TIM2_SR1 = 0; // ัะฑั€ะฐัั‹ะฒะฐะตะผ ั„ะปะฐะณ Update Interrupt Pending

    cnt++; 
    cnt &= 7; // ะดะฒะธะณะฐะตะผ ัั‡ะตั‚ั‡ะธะบ LED

    TIM2_CCR1L = ~colors[cnt][0]; // ะฟะตั€ะตะดะฐะตะผ ะฒ ะฑัƒั„ะตั€ ะธะฝะฒะตั€ั‚ะธั€ะพะฒะฐะฝะฝั‹ะต ะทะฝะฐั‡ะตะฝะธั
    TIM2_CCR2L = ~colors[cnt][1]; // ะดะปั ัะปะตะดัƒัŽั‰ะตะณะพ ั†ะธะบะปะฐ ะจะ˜ะœ
    TIM2_CCR3L = ~colors[cnt][2]; // 

    return;
}

๋‚จ์€ ๊ฒƒ์€ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์–ด์…ˆ๋ธ”๋Ÿฌ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. rim - ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ์ฐพ์•„์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋งค๋‰ด์–ผ:

//enable interrupts
_asm("rim");

๋˜ ๋‹ค๋ฅธ ์–ด์…ˆ๋ธ”๋Ÿฌ ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. sim โ€“ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋•๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ฐ’์ด "๋น„๋””์˜ค ๋ฉ”๋ชจ๋ฆฌ"์— ๊ธฐ๋ก๋˜๋Š” ๋™์•ˆ์—๋Š” ๊บผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์•ผ ์ž˜๋ชป๋œ ์ˆœ๊ฐ„์— ๋ฐœ์ƒํ•œ ์ธํ„ฐ๋ŸฝํŠธ๋กœ ์ธํ•ด ์–ด๋ ˆ์ด๊ฐ€ ์†์ƒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์ฝ”๋“œ - GitHub์—์„œ.

๋ฐ์ดํ„ฐ์‹œํŠธ 2 ์ฝ๊ธฐ: STM32์˜ SPI; STM8์˜ PWM, ํƒ€์ด๋จธ ๋ฐ ์ธํ„ฐ๋ŸฝํŠธ

๋ˆ„๊ตฐ๊ฐ€ ์ด ๊ธ€์ด ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด, ์ œ๊ฐ€ ์ด ๊ธ€์„ ํ—›๋˜์ด ์“ด ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ์˜๊ฒฌ๊ณผ ๋ฐœ์–ธ์„ ๊ธฐ๊บผ์ด ๋ฐ›์•„๋“ค์ด๊ณ  ๋ชจ๋“  ๊ฒƒ์— ๋‹ต๋ณ€ํ•˜๋„๋ก ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€