ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8

ะ’ ื”ื—ืœืง ื”ืจืืฉื•ืŸ ื ื™ืกื™ืชื™ ืœืกืคืจ ืœืžื”ื ื“ืกื™ ืืœืงื˜ืจื•ื ื™ืงื” ืœืชื—ื‘ื™ื‘ ืฉื’ื“ืœื• ืžืžื›ื ืกื™ ืืจื“ื•ืื™ื ื• ืื™ืš ื•ืœืžื” ืขืœื™ื”ื ืœืงืจื•ื ื’ืœื™ื•ื ื•ืช ื ืชื•ื ื™ื ื•ืชื™ืขื•ื“ ืื—ืจ ืขื‘ื•ืจ ืžื™ืงืจื•-ื‘ืงืจื™ื. ื”ื˜ืงืกื˜ ื”ืชื‘ืจืจ ื›ื’ื“ื•ืœ, ืื– ื”ื‘ื˜ื—ืชื™ ืœื”ืฆื™ื’ ื“ื•ื’ืžืื•ืช ืžืขืฉื™ื•ืช ื‘ืžืืžืจ ื ืคืจื“. ื•ื‘ื›ืŸ, ื”ื•ื ืงืจื ืœืขืฆืžื• ืคื˜ืจื™ื™ืช ื—ืœื‘...

ื”ื™ื•ื ืื ื™ ืืจืื” ืœืš ืื™ืš ืœื”ืฉืชืžืฉ ื‘ื’ื™ืœื™ื•ื ื•ืช ื ืชื•ื ื™ื ื›ื“ื™ ืœืคืชื•ืจ ื“ื™ ืคืฉื•ื˜, ืื‘ืœ ื”ื›ืจื—ื™ ืขื‘ื•ืจ ืคืจื•ื™ืงื˜ื™ื ืจื‘ื™ื, ืžืฉื™ืžื•ืช ืขืœ STM32 (ื’ืœื•ืœื” ื›ื—ื•ืœื”) ื•ื‘ืงืจื™ STM8. ื›ืœ ืคืจื•ื™ืงื˜ื™ ื”ื”ื“ื’ืžื” ืžื•ืงื“ืฉื™ื ืœืœื“ื™ื ื”ืื”ื•ื‘ื™ื ืขืœื™, ื ื“ืœื™ืง ืื•ืชื ื‘ื›ืžื•ื™ื•ืช ื’ื“ื•ืœื•ืช, ืœืฉื ื›ืš ื ืฆื˜ืจืš ืœื”ืฉืชืžืฉ ื‘ื›ืœ ืžื™ื ื™ ืฆื™ื•ื“ ื”ื™ืงืคื™ ืžืขื ื™ื™ืŸ.

ื”ื˜ืงืกื˜ ืฉื•ื‘ โ€‹โ€‹ื”ืชื‘ืจืจ ื›ืขืฆื•ื, ืื– ืžื˜ืขืžื™ ื ื•ื—ื•ืช ืื ื™ ืžื›ื™ืŸ ืืช ื”ืชื•ื›ืŸ:

STM32 Blue Pill: 16 ื ื•ืจื™ื•ืช LED ืขื ื“ืจื™ื™ื‘ืจ DM634
STM8: ื”ื’ื“ืจืช ืฉื™ืฉื” ืคื™ื ื™ื PWM
STM8: 8 ื ื•ืจื™ื•ืช RGB ืขืœ ืฉืœื•ืฉื” ืคื™ื ื™ื, ืžืคืจื™ืขื™ื

ื›ืชื‘ ื•ื™ืชื•ืจ: ืื ื™ ืœื ืžื”ื ื“ืก, ืื ื™ ืœื ืžืชื™ื™ืžืจ ืœื”ื™ื•ืช ื‘ืขืœ ื™ื“ืข ืžืขืžื™ืง ื‘ืืœืงื˜ืจื•ื ื™ืงื”, ื”ืžืืžืจ ืžื™ื•ืขื“ ืœื—ื•ื‘ื‘ื ื™ื ื›ืžื•ื ื™. ืœืžืขืฉื”, ืจืื™ืชื™ ืืช ืขืฆืžื™ ืœืคื ื™ ืฉื ืชื™ื™ื ื›ืงื”ืœ ื”ื™ืขื“. ืื ืžื™ืฉื”ื• ื”ื™ื” ืื•ืžืจ ืœื™ ืื– ืฉื’ืœื™ื•ื ื•ืช ื ืชื•ื ื™ื ืขืœ ืฉื‘ื‘ ืœื ืžื•ื›ืจ ืื™ื ื ืžืคื—ื™ื“ื™ื ืœืงืจื™ืื”, ืœื ื”ื™ื™ืชื™ ืžื‘ืœื” ื–ืžืŸ ืจื‘ ื‘ื—ื™ืคื•ืฉ ืื—ืจ ื›ืžื” ืคื™ืกื•ืช ืงื•ื“ ื‘ืื™ื ื˜ืจื ื˜ ื•ืžืžืฆื™ื ืงื‘ื™ื™ื ืขื ืžืกืคืจื™ื™ื ื•ืกืจื˜ ื“ื‘ื™ืง.

ื”ืžื™ืงื•ื“ ืฉืœ ืžืืžืจ ื–ื” ื”ื•ื ืขืœ ื’ื™ืœื™ื•ื ื•ืช ื ืชื•ื ื™ื, ืœื ืคืจื•ื™ืงื˜ื™ื, ื›ืš ืฉื”ืงื•ื“ ืขืฉื•ื™ ืœื”ื™ื•ืช ืœื ืžืื•ื“ ืžืกื•ื“ืจ ื•ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืฆืคื•ืฃ. ื”ืคืจื•ื™ืงื˜ื™ื ืขืฆืžื ืคืฉื•ื˜ื™ื ืžืื•ื“, ืื ื›ื™ ืžืชืื™ืžื™ื ืœื”ื™ื›ืจื•ืช ืจืืฉื•ื ื” ืขื ื”ืฉื‘ื‘ ื”ื—ื“ืฉ.

ืื ื™ ืžืงื•ื•ื” ืฉื”ืžืืžืจ ืฉืœื™ ื™ืขื–ื•ืจ ืœืžื™ืฉื”ื• ื‘ืฉืœื‘ ื“ื•ืžื” ืฉืœ ื”ืชืขืžืงื•ืช ื‘ืชื—ื‘ื™ื‘.

STM32

16 ื ื•ืจื™ื•ืช LED ืขื DM634 ื•-SPI

ืคืจื•ื™ืงื˜ ืงื˜ืŸ ื‘ืืžืฆืขื•ืช ื›ื“ื•ืจ ื›ื—ื•ืœ (STM32F103C8T6) ื•ืžื ื”ืœ ื”ืชืงืŸ LED DM634. ื‘ืืžืฆืขื•ืช ื’ืœื™ื•ื ื•ืช ื ืชื•ื ื™ื, ื ื‘ื™ืŸ ืืช ืžื ื”ืœ ื”ื”ืชืงืŸ, ื™ืฆื™ืื•ืช STM IO ื•ื ืงื‘ืข ืืช ื”ื”ื’ื“ืจื” ืฉืœ SPI.

DM634

ืฉื‘ื‘ ื˜ื™ื™ื•ื•ืื ื™ ืขื 16 ื™ืฆื™ืื•ืช PWM 16 ืกื™ื‘ื™ื•ืช, ื ื™ืชืŸ ืœื—ื‘ืจ ื‘ืฉืจืฉืจืื•ืช. ื“ื’ื ื”-12 ืกื™ื‘ื™ื•ืช ื”ื ืžื•ืš ืžื•ื›ืจ ืžืคืจื•ื™ืงื˜ ืžืงื•ืžื™ Lightpack. ื‘ืฉืœื‘ ืžืกื•ื™ื, ื‘ื‘ื—ื™ืจื” ื‘ื™ืŸ ื”-DM63x ืœื‘ื™ืŸ ื”-TLC5940 ื”ื™ื“ื•ืข, ื‘ื—ืจืชื™ ื‘-DM ืžื›ืžื” ืกื™ื‘ื•ืช: 1) TLC ื‘-Aliexpress ื”ื•ื ื‘ื”ื—ืœื˜ ืžื–ื•ื™ืฃ, ืื‘ืœ ื–ื” ืœื; 2) ืœ-DM ื™ืฉ PWM ืื•ื˜ื•ื ื•ืžื™ ืขื ืžื—ื•ืœืœ ืชื“ืจื™ื ืžืฉืœื•; 3) ืืคืฉืจ ืœืงื ื•ืช ืื•ืชื• ื‘ื–ื•ืœ ื‘ืžื•ืกืงื‘ื”, ื‘ืžืงื•ื ืœื—ื›ื•ืช ืœื—ื‘ื™ืœื” ืžืืœื™. ื•ื›ืžื•ื‘ืŸ, ื”ื™ื” ืžืขื ื™ื™ืŸ ืœืœืžื•ื“ ื›ื™ืฆื“ ืœืฉืœื•ื˜ ื‘ืฉื‘ื‘ ื‘ืขืฆืžืš, ื‘ืžืงื•ื ืœื”ืฉืชืžืฉ ื‘ืกืคืจื™ื™ื” ืžื•ื›ื ื”. ื”ืฉื‘ื‘ื™ื ืžื•ืฆื’ื™ื ื›ืขืช ื‘ืขื™ืงืจ ื‘ื—ื‘ื™ืœืช SSOP24; ืงืœ ืœื”ืœื—ื™ื ืื•ืชื ืœืžืชืื.

ืžื›ื™ื•ื•ืŸ ืฉื”ื™ืฆืจืŸ ื”ื•ื ื˜ื™ื™ื•ื•ืื ื™, ื˜ื•ืคืก ืžื™ื“ืข ื”ืฉื‘ื‘ ื›ืชื•ื‘ ื‘ืื ื’ืœื™ืช ืกื™ื ื™ืช, ืžื” ืฉืื•ืžืจ ืฉื™ื”ื™ื” ื›ื™ืฃ. ืจืืฉื™ืช ืื ื• ืžืกืชื›ืœื™ื ืขืœ ืคื™ื ืืื•ื˜ (ื—ื™ื‘ื•ืจ ืคื™ื ื™ื) ื›ื“ื™ ืœื”ื‘ื™ืŸ ืœืื™ื–ื• ืจื’ืœ ืœื—ื‘ืจ ืœืžื”, ื•ืชื™ืื•ืจ ืฉืœ ื”ืคื™ื ื™ื (ืชื™ืื•ืจ ืกื™ื›ื”). 16 ืกื™ื›ื•ืช:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ืžืงื•ืจื•ืช ื›ื™ื•ืจ DC (ืคืชื— ื ื™ืงื•ื–)

ื›ึผึดื™ื•ึนืจ / ืคืœื˜ ื ื™ืงื•ื– ืคืชื•ื— - ืœื ืงื–; ืžืงื•ืจ ื”ื–ืจื ื”ื ื›ื ืก; ื”ืคืœื˜ ืžื—ื•ื‘ืจ ืœืื“ืžื” ื‘ืžืฆื‘ ืคืขื™ืœ - ื”ื ื•ืจื™ื•ืช ืžื—ื•ื‘ืจื•ืช ืœื“ืจื™ื™ื‘ืจ ื‘ืืžืฆืขื•ืช ืงืชื•ื“ื•ืช. ืžื‘ื—ื™ื ื” ื—ืฉืžืœื™ืช, ื–ื”, ื›ืžื•ื‘ืŸ, ืœื "ื ื™ืงื•ื– ืคืชื•ื—" (ื ื™ืงื•ื– ืคืชื•ื—), ืืš ื‘ื’ื™ืœื™ื•ื ื•ืช ื ืชื•ื ื™ื ื™ื™ืขื•ื“ ื–ื” ืขื‘ื•ืจ ืคื™ื ื™ื ื‘ืžืฆื‘ ื ื™ืงื•ื– ื ืžืฆื ืœืขืชื™ื ืงืจื•ื‘ื•ืช.

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ื ื’ื“ื™ื ื—ื™ืฆื•ื ื™ื™ื ื‘ื™ืŸ REXT ืœ-GND ื›ื“ื™ ืœืงื‘ื•ืข ืืช ืขืจืš ื–ืจื ื”ืคืœื˜

ื‘ื™ืŸ ืคื™ืŸ REXT ืœืื“ืžื” ืžื•ืชืงืŸ ื ื’ื“ ื™ื™ื—ื•ืก, ื”ืฉื•ืœื˜ ื‘ื”ืชื ื’ื“ื•ืช ื”ืคื ื™ืžื™ืช ืฉืœ ื”ื™ืฆื™ืื•ืช, ืจืื” ื”ื’ืจืฃ ื‘ืขืžื•ื“ 9 ืฉืœ ื’ื™ืœื™ื•ืŸ ื”ื ืชื•ื ื™ื. ื‘-DM634, ื ื™ืชืŸ ืœืฉืœื•ื˜ ื‘ื”ืชื ื’ื“ื•ืช ื–ื• ื’ื ื‘ืืžืฆืขื•ืช ืชื•ื›ื ื”, ืœื”ื’ื“ื™ืจ ืืช ื”ื‘ื”ื™ืจื•ืช ื”ื›ื•ืœืœืช (ื‘ื”ื™ืจื•ืช ืขื•ืœืžื™ืช); ืื ื™ ืœื ืื›ื ืก ืœืคืจื˜ื™ื ื‘ืžืืžืจ ื–ื”, ืื ื™ ืจืง ืืฉื™ื ื›ืืŸ ื ื’ื“ ืฉืœ 2.2 - 3 ืงื™ืœื• ืื•ื”ื.

ื›ื“ื™ ืœื”ื‘ื™ืŸ ื›ื™ืฆื“ ืœืฉืœื•ื˜ ื‘ืฉื‘ื‘, ื”ื‘ื” ื ืกืชื›ืœ ืขืœ ื”ืชื™ืื•ืจ ืฉืœ ืžืžืฉืง ื”ืžื›ืฉื™ืจ:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8

ื›ืŸ, ื”ื ื”, ืื ื’ืœื™ืช ืกื™ื ื™ืช ื‘ืžืœื•ื ืชืคืืจืชื”. ืชืจื’ื•ื ื–ื” ื‘ืขื™ื™ืชื™, ืืชื” ื™ื›ื•ืœ ืœื”ื‘ื™ืŸ ืืช ื–ื” ืื ืชืจืฆื”, ืื‘ืœ ื™ืฉ ื“ืจืš ืื—ืจืช - ืชืจืื” ืื™ืš ืžืชื•ืืจ ื”ื—ื™ื‘ื•ืจ ืœ-TLC5940 ื”ื“ื•ืžื” ืžื‘ื—ื™ื ื” ืคื•ื ืงืฆื™ื•ื ืœื™ืช ื‘ื’ื™ืœื™ื•ืŸ ื”ื ืชื•ื ื™ื:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
... ื ื“ืจืฉื™ื ืจืง ืฉืœื•ืฉื” ืคื™ื ื™ื ื›ื“ื™ ืœื”ื–ื™ืŸ ื ืชื•ื ื™ื ืœืžื›ืฉื™ืจ. ื”ืงืฆื” ื”ืขื•ืœื” ืฉืœ ืื•ืช SCLK ืžืขื‘ื™ืจ ืืช ื”ื ืชื•ื ื™ื ืžืคื™ืŸ ื”-SIN ืœืื’ืจ ื”ืคื ื™ืžื™. ืœืื—ืจ ื˜ืขื™ื ืช ื›ืœ ื”ื ืชื•ื ื™ื, ืื•ืช XLAT ืงืฆืจ ื’ื‘ื•ื” ืชื•ืคืก ืืช ื”ื ืชื•ื ื™ื ื”ืžื•ืขื‘ืจื™ื ื‘ืจืฆืฃ ืœืชื•ืš ื”ืื•ื’ืจื™ื ื”ืคื ื™ืžื™ื™ื. ืื•ื’ืจื™ื ืคื ื™ืžื™ื™ื ื”ื ืฉืขืจื™ื ื”ืžื•ืคืขืœื™ื ืขืœ ื™ื“ื™ ืจืžืช ื”ืื•ืช XLAT. ื›ืœ ื”ื ืชื•ื ื™ื ืžื•ืขื‘ืจื™ื ืชื—ื™ืœื” ื”ืกื™ื‘ื™ืช ื”ืžืฉืžืขื•ืชื™ืช ื‘ื™ื•ืชืจ.

ื‘ึผึฐืจึดื™ื—ึท โ€“ ืชืคืก/ื‘ืจื™ื—/ื ืขื™ืœื”.
ืงืฆื” ืขื•ืœื” - ืงืฆื” ืžื•ื‘ื™ืœ ืฉืœ ื”ื“ื•ืคืง
MSB ืจืืฉื•ืŸ โ€“ ื”ื›ื™ ืžืฉืžืขื•ืชื™ (ื”ื›ื™ ืฉืžืืœื™) ืงืฆืช ืงื“ื™ืžื”.
ืœืฉืขื•ืŸ ื ืชื•ื ื™ื - ื”ืขื‘ืจืช ื ืชื•ื ื™ื ื‘ืจืฆืฃ (ื‘ื™ื˜ ืื—ืจ ื‘ื™ื˜).

ืžืœื” ื‘ึผึฐืจึดื™ื—ึท ื ืžืฆื ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื‘ืชื™ืขื•ื“ ืœืฆ'ื™ืคื™ื ื•ืžืชื•ืจื’ื ื‘ื“ืจื›ื™ื ืฉื•ื ื•ืช, ืื– ืœืžืขืŸ ื”ื”ื‘ื ื” ืืจืฉื” ืœืขืฆืžื™

ืชื•ื›ื ื™ืช ื—ื™ื ื•ื›ื™ืช ืงื˜ื ื”ืžื ื”ืœ ื”-LED ื”ื•ื ื‘ืขืฆื ืื•ื’ืจ ืžืฉืžืจื•ืช. "Shift" (ืžืฉืžืจืช) ื‘ืฉื - ืชื ื•ืขื” ืกื™ื‘ื™ืช ืฉืœ ื ืชื•ื ื™ื ื‘ืชื•ืš ื”ืžื›ืฉื™ืจ: ื›ืœ ื‘ื™ื˜ ื—ื“ืฉ ืฉื ื“ื—ืฃ ืคื ื™ืžื” ื“ื•ื—ืฃ ืืช ื›ืœ ื”ืฉืจืฉืจืช ืงื“ื™ืžื” ืœืคื ื™ื•. ืžื›ื™ื•ื•ืŸ ืฉืืฃ ืื—ื“ ืœื ืจื•ืฆื” ืœืจืื•ืช ื”ื‘ื”ื•ื‘ ื›ืื•ื˜ื™ ืฉืœ ื ื•ืจื™ื•ืช ื”ืœื“ ื‘ืžื”ืœืš ื”ืžืฉืžืจืช, ื”ืชื”ืœื™ืš ืžืชืจื—ืฉ ื‘ืื•ื’ืจื™ ื—ื™ืฅ ื”ืžื•ืคืจื“ื™ื ืžื”ืื•ื’ืจื™ื ื”ืคื•ืขืœื™ื ืขืœ ื™ื“ื™ ืžื ื—ืช (ื‘ึผึฐืจึดื™ื—ึท) ื”ื•ื ืžืขื™ืŸ ื—ื“ืจ ื”ืžืชื ื” ืฉื‘ื• ื”ื‘ื™ื˜ื™ื ืžืกื•ื“ืจื™ื ื‘ืจืฆืฃ ื”ืจืฆื•ื™. ื›ืฉื”ื›ืœ ืžื•ื›ืŸ, ื”ืชืจื™ืก ื ืคืชื— ื•ื”ื‘ื™ื˜ื™ื ื™ื•ืฆืื™ื ืœืขื‘ื•ื“ื”, ืžื—ืœื™ืคื™ื ืืช ื”ืืฆื•ื•ื” ื”ืงื•ื“ืžืช. ืžึดืœึธื” ื‘ึผึฐืจึดื™ื—ึท ื‘ืชื™ืขื•ื“ ืขื‘ื•ืจ microcircuits ื›ืžืขื˜ ืชืžื™ื“ ืžืจืžื– ืขืœ ืžื ื—ืช ื›ื–ื”, ืœื ืžืฉื ื” ื‘ืื™ืœื• ืฉื™ืœื•ื‘ื™ื ื”ื•ื ืžืฉืžืฉ.

ืื–, ื”ืขื‘ืจืช ื ืชื•ื ื™ื ืœ-DM634 ืžืชื‘ืฆืขืช ื›ืš: ื”ื’ื“ืจ ืืช ืงืœื˜ DAI ืœืขืจืš ืฉืœ ื”ืกื™ื‘ื™ืช ื”ืžืฉืžืขื•ืชื™ืช ื‘ื™ื•ืชืจ ืฉืœ ื”-LED ื”ืจื—ื•ืง, ืžืฉื•ืš DCK ืœืžืขืœื” ื•ืœืžื˜ื”; ื”ื’ื“ืจ ืืช ืงืœื˜ DAI ืœืขืจืš ืฉืœ ื”ื‘ื™ื˜ ื”ื‘ื, ืžืฉื•ืš DCK; ื•ื›ืŸ ื”ืœืื” ืขื“ ืฉื›ืœ ื”ื‘ื™ื˜ื™ื ืฉื•ื“ืจื• (ืฉืขื•ืŸ ืคื ื™ืžื”), ื•ืœืื—ืจ ืžื›ืŸ ืื ื• ืžื•ืฉื›ื™ื LAT. ื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช ื‘ืื•ืคืŸ ื™ื“ื ื™ (ื‘ื™ื˜-ื‘ืื ื’), ืืš ืขื“ื™ืฃ ืœื”ืฉืชืžืฉ ื‘ืžืžืฉืง SPI ื”ืžื•ืชืื ื‘ืžื™ื•ื—ื“ ืœื›ืš, ืžื›ื™ื•ื•ืŸ ืฉื”ื•ื ืžื•ืฆื’ ื‘- STM32 ืฉืœื ื• ื‘ืฉื ื™ ืขื•ืชืงื™ื.

ื’ืœื•ืœื” ื›ื—ื•ืœื” STM32F103

ืžื‘ื•ื: ื‘ืงืจื™ STM32 ื”ื ื”ืจื‘ื” ื™ื•ืชืจ ืžื•ืจื›ื‘ื™ื ืž-Atmega328 ืžืžื” ืฉื”ื ืขืฉื•ื™ื™ื ืœื”ื™ืจืื•ืช ืžืคื—ื™ื“ื™ื. ื™ืชืจื” ืžื›ืš, ืžื˜ืขืžื™ ื—ื™ืกื›ื•ืŸ ื‘ืื ืจื’ื™ื”, ื›ืžืขื˜ ื›ืœ ื”ืฆื™ื•ื“ ื”ื”ื™ืงืคื™ ื›ื‘ ื‘ื”ืชื—ืœื”, ื•ืชื“ืจ ื”ืฉืขื•ืŸ ื”ื•ื 8 ืžื’ื”-ื”ืจืฅ ืžื”ืžืงื•ืจ ื”ืคื ื™ืžื™. ืœืžืจื‘ื” ื”ืžื–ืœ, ืžืชื›ื ืชื™ STM ื›ืชื‘ื• ืงื•ื“ ืฉืžื‘ื™ื ืืช ื”ืฉื‘ื‘ ืœ-72 ืžื’ื”-ื”ืจืฅ ื”"ืžื—ื•ืฉื‘ื™ื", ื•ื”ืžื—ื‘ืจื™ื ืฉืœ ื›ืœ ื”-IDEs ืฉืื ื™ ืžื›ื™ืจ ื›ืœืœื• ืื•ืชื• ื‘ื”ืœื™ืš ื”ืืชื—ื•ืœ, ืื– ืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืœื‘ืฆืข ืฉืขื•ืŸ (ืื‘ืœ ืืชื” ื™ื›ื•ืœ ืื ืืชื” ื‘ืืžืช ืจื•ืฆื”). ืื‘ืœ ืชืฆื˜ืจืš ืœื”ืคืขื™ืœ ืืช ื”ืฆื™ื•ื“ ื”ื”ื™ืงืคื™.

ืชื™ืขื•ื“: Blue Pill ืžืฆื•ื™ื“ ื‘ืฉื‘ื‘ ื”ืคื•ืคื•ืœืจื™ STM32F103C8T6, ื™ืฉ ืฉื ื™ ืžืกืžื›ื™ื ืฉื™ืžื•ืฉื™ื™ื ืขื‘ื•ืจื•:

ื‘ื’ื™ืœื™ื•ืŸ ื”ื ืชื•ื ื™ื ืื•ืœื™ ื ืชืขื ื™ื™ืŸ ื‘:

  • Pinouts โ€“ chip pinouts โ€“ ืœืžืงืจื” ืฉื ื—ืœื™ื˜ ืœื”ื›ื™ืŸ ืืช ื”ืœื•ื—ื•ืช ื‘ืขืฆืžื ื•;
  • ืžืคืช ื–ื™ื›ืจื•ืŸ โ€“ ืžืคืช ื–ื™ื›ืจื•ืŸ ืœืฉื‘ื‘ ืกืคืฆื™ืคื™. ื‘ืžื“ืจื™ืš ื”ืขื–ืจ ื™ืฉ ืžืคื” ืœื›ืœ ื”ืงื•, ื•ื”ื•ื ืžื–ื›ื™ืจ ืื•ื’ืจื™ื ืฉืื™ืŸ ืœื ื•.
  • ื˜ื‘ืœืช ื”ื’ื“ืจื•ืช ืคื™ื ื™ื - ืคื™ืจื•ื˜ ื”ืคื•ื ืงืฆื™ื•ืช ื”ืขื™ืงืจื™ื•ืช ื•ื”ื—ืœื•ืคื™ื•ืช ืฉืœ ืคื™ื ื™ื; ืขื‘ื•ืจ "ื”ื’ืœื•ืœื” ื”ื›ื—ื•ืœื”" ืืชื” ื™ื›ื•ืœ ืœืžืฆื•ื ืชืžื•ื ื•ืช ื ื•ื—ื•ืช ื™ื•ืชืจ ื‘ืื™ื ื˜ืจื ื˜ ืขื ืจืฉื™ืžื” ืฉืœ ืกื™ื›ื•ืช ื•ืคื•ื ืงืฆื™ื•ืช ืฉืœื”ืŸ. ืœื›ืŸ, ืื ื• ืžื™ื“ ืžื—ืคืฉื™ื ืืช ื”-Pinout ืฉืœ Blue Pill ื•ืฉื•ืžืจื™ื ืืช ื”ืชืžื•ื ื” ื”ื–ื• ื‘ื”ื™ืฉื’ ื™ื“:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ื”ืขืจื”: ื”ื™ื™ืชื” ื˜ืขื•ืช ื‘ืชืžื•ื ื” ืžื”ืื™ื ื˜ืจื ื˜, ืฉืฆื•ื™ื ื” ื‘ืชื’ื•ื‘ื•ืช, ืชื•ื“ื” ืขืœ ื›ืš. ื”ืชืžื•ื ื” ื”ื•ื—ืœืคื”, ืื‘ืœ ื–ื” ืœืงื— - ืขื“ื™ืฃ ืœื‘ื“ื•ืง ืžื™ื“ืข ืœื ืžื’ื™ืœื™ื•ื ื•ืช ื ืชื•ื ื™ื.

ืื ื• ืžืกื™ืจื™ื ืืช ื’ื™ืœื™ื•ืŸ ื”ื ืชื•ื ื™ื, ืคื•ืชื—ื™ื ืืช ืžื“ืจื™ืš ื”ืขื–ืจ, ื•ืžืขื›ืฉื™ื• ืื ื• ืžืฉืชืžืฉื™ื ืจืง ื‘ื•.
ื ื•ื”ืœ: ืื ื• ืขื•ืกืงื™ื ื‘ืงืœื˜/ืคืœื˜ ืกื˜ื ื“ืจื˜ื™ื™ื, ืžื’ื“ื™ืจื™ื SPI, ืžืคืขื™ืœื™ื ืืช ื”ืฆื™ื•ื“ ื”ื”ื™ืงืคื™ ื”ื ื—ื•ืฅ.

ืคืœื˜ ืงืœื˜

ื‘-Atmega328, I/O ืžื™ื•ืฉื ื‘ืฆื•ืจื” ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ, ื•ื–ื• ื”ืกื™ื‘ื” ืฉืฉืคืข ื”ืืคืฉืจื•ื™ื•ืช ืฉืœ STM32 ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžื‘ืœื‘ืœ. ืขื›ืฉื™ื• ืื ื—ื ื• ืฆืจื™ื›ื™ื ืจืง ืžืกืงื ื•ืช, ืื‘ืœ ืืคื™ืœื• ืœืืœื” ื™ืฉ ืืจื‘ืข ืืคืฉืจื•ื™ื•ืช:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ื ื™ืงื•ื– ืคืชื•ื—, ื“ื—ื™ืคื”-ืžืฉื™ื›ื”, ื“ื—ื™ืคื”-ืžืฉื™ื›ื” ืืœื˜ืจื ื˜ื™ื‘ื™ืช, ื ื™ืงื•ื– ืคืชื•ื— ื—ืœื•ืคื™

"ืžืฉื•ืš ื“ื—ื•ืฃ" (ืœืžืฉื•ืš ืœื“ื—ื•ืฃ) ื”ื•ื ื”ืคืœื˜ ื”ืจื’ื™ืœ ืžื”ืืจื“ื•ืื™ื ื•, ื”ืกื™ื›ื” ื™ื›ื•ืœื” ืœืงื‘ืœ ืืช ื”ืขืจืš HIGH ืื• LOW. ืื‘ืœ ืขื "ื ื™ืงื•ื– ืคืชื•ื—" ื™ืฉ ื”ืžื•ืจื›ื‘ื•ืช, ืœืžืจื•ืช ืฉืœืžืขืฉื” ื”ื›ืœ ืคืฉื•ื˜ ื›ืืŸ:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ืชืฆื•ืจืช ืคืœื˜ / ื›ืืฉืจ ื”ื™ืฆื™ืื” ืžื•ืงืฆื™ืช ืœืคืœื˜: / ืžืื’ืจ ืคืœื˜ ืžื•ืคืขืœ: / โ€“ ืžืฆื‘ ื ื™ืงื•ื– ืคืชื•ื—: "0" ื‘ืื•ื’ืจ ื”ืคืœื˜ ืžืืคืฉืจ N-MOS, "1" ื‘ืื•ื’ืจ ื”ืคืœื˜ ืขื•ื–ื‘ ืืช ื”ื™ืฆื™ืื” ื‘ืžืฆื‘ Hi-Z ( P-MOS ืื™ื ื• ืžื•ืคืขืœ ) / โ€“ ืžืฆื‘ ื“ื—ื™ืคื”-ืžืฉื™ื›ื”: "0" ื‘ืื•ื’ืจ ื”ืคืœื˜ ืžืคืขื™ืœ ืืช N-MOS, "1" ื‘ืื•ื’ืจ ื”ืคืœื˜ ืžืคืขื™ืœ ืืช P-MOS.

ื›ืœ ื”ื”ื‘ื“ืœ ื‘ื™ืŸ ื ื™ืงื•ื– ืคืชื•ื— (ื ื™ืงื•ื– ืคืชื•ื—) ืž-"push-pull" (ืœืžืฉื•ืš ืœื“ื—ื•ืฃ) ื”ื•ื ืฉื‘ืคื™ืŸ ื”ืจืืฉื•ืŸ ืœื ื™ื›ื•ืœ ืœืงื‘ืœ ืืช ื”ืžืฆื‘ HIGH: ื›ืืฉืจ ื›ื•ืชื‘ื™ื ืื—ื“ ืœืื•ื’ืจ ื”ืคืœื˜, ื”ื•ื ืขื•ื‘ืจ ืœืžืฆื‘ ื”ืชื ื’ื“ื•ืช ื’ื‘ื•ื”ื” (ืขื›ื‘ื” ื’ื‘ื•ื”ื”, ื”ื™ื™-ื–). ื›ืฉื›ื•ืชื‘ื™ื ืืคืก, ื”ืกื™ื›ื” ืžืชื ื”ื’ืช ื–ื”ื” ื‘ืฉื ื™ ื”ืžืฆื‘ื™ื, ื’ื ืžื‘ื—ื™ื ื” ืœื•ื’ื™ืช ื•ื’ื ืžื‘ื—ื™ื ื” ื—ืฉืžืœื™ืช.

ื‘ืžืฆื‘ ืคืœื˜ ืจื’ื™ืœ, ื”ืคื™ืŸ ืคืฉื•ื˜ ืžืฉื“ืจ ืืช ื”ืชื•ื›ืŸ ืฉืœ ืื•ื’ืจ ื”ืคืœื˜. ื‘"ื—ืœื•ืคื”" ื”ื•ื ื ืฉืœื˜ ืขืœ ื™ื“ื™ ื”ืฆื™ื•ื“ ื”ื”ื™ืงืคื™ ื”ืžืงื‘ื™ืœ (ืจืื” 9.1.4):

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ืื ืกื™ื‘ื™ืช ื™ืฆื™ืื” ืžื•ื’ื“ืจืช ื›ืกื™ื›ืช ืคื•ื ืงืฆื™ื” ื—ืœื•ืคื™ืช, ืื•ื’ืจ ื”ืคื™ื ื™ื ืžื•ืฉื‘ืช ื•ื”ืคื™ืŸ ืžื—ื•ื‘ืจ ืœืคื™ืŸ ื”ื”ื™ืงืคื™.

ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื—ืœื•ืคื™ืช ืฉืœ ื›ืœ ืกื™ื›ื” ืžืชื•ืืจืช ื‘ ื”ื’ื“ืจื•ืช ืคื™ืŸ ื’ื™ืœื™ื•ืŸ ื”ื ืชื•ื ื™ื ื ืžืฆื ื‘ืชืžื•ื ื” ืฉื”ื•ืจื“ืช. ืœืฉืืœื” ืžื” ืœืขืฉื•ืช ืื ืœืกื™ื›ื” ื™ืฉ ื›ืžื” ืคื•ื ืงืฆื™ื•ืช ื—ืœื•ืคื™ื•ืช, ื”ืชืฉื•ื‘ื” ื ื™ืชื ืช ื‘ื”ืขืจืช ืฉื•ืœื™ื™ื ื‘ื’ื™ืœื™ื•ืŸ ื”ื ืชื•ื ื™ื:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ืื ืžืกืคืจ ืฆื™ื•ื“ ื”ื™ืงืคื™ ืžืฉืชืžืฉ ื‘ืื•ืชื• ืกื™ื›ื”, ื›ื“ื™ ืœืžื ื•ืข ื”ืชื ื’ืฉื•ืช ื‘ื™ืŸ ืคื•ื ืงืฆื™ื•ืช ื—ืœื•ืคื™ื•ืช, ื™ืฉ ืœื”ืฉืชืžืฉ ืจืง ื‘ืฆื™ื•ื“ ื”ื™ืงืคื™ ืื—ื“ ื‘ื›ืœ ืคืขื, ืœื”ื—ืœื™ืง ื‘ืืžืฆืขื•ืช ืกื™ื‘ื™ืช ื”ื”ืคืขืœื” ืฉืœ ื”ืฉืขื•ืŸ ื”ื”ื™ืงืคื™ (ื‘ืื•ื’ืจ RCC ื”ืžืชืื™ื).

ืœื‘ืกื•ืฃ, ืœืคื™ื ื™ื ื‘ืžืฆื‘ ืคืœื˜ ื™ืฉ ื’ื ืžื”ื™ืจื•ืช ืฉืขื•ืŸ. ื–ื•ื”ื™ ืชื›ื•ื ื” ื ื•ืกืคืช ืœื—ื™ืกื›ื•ืŸ ื‘ืื ืจื’ื™ื”; ื‘ืžืงืจื” ืฉืœื ื•, ืื ื—ื ื• ืคืฉื•ื˜ ืžื’ื“ื™ืจื™ื ืื•ืชื” ืœืžืงืกื™ืžื•ื ื•ืฉื•ื›ื—ื™ื ืื•ืชื”.

ืื–: ืื ื—ื ื• ืžืฉืชืžืฉื™ื ื‘-SPI, ืžื” ืฉืื•ืžืจ ืฉืฉื ื™ ืคื™ื ื™ื (ืขื ื ืชื•ื ื™ื ื•ืขื ืื•ืช ืฉืขื•ืŸ) ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช "ืคื•ื ืงืฆื™ื™ืช ื“ื—ื™ืคื”-ืžืฉื™ื›ื” ื—ืœื•ืคื™ืช", ื•ืื—ื“ ืื—ืจ (LAT) ืฆืจื™ืš ืœื”ื™ื•ืช "ื“ื—ื™ืคื”-ืžืฉื™ื›ื” ืจื’ื™ืœื”". ืื‘ืœ ืœืคื ื™ ืฉื ืงืฆื” ืื•ืชื, ื‘ื•ืื• ื ืชืžื•ื“ื“ ืขื SPI.

SPI

ืขื•ื“ ืชื•ื›ื ื™ืช ื—ื™ื ื•ื›ื™ืช ืงื˜ื ื”

SPI ืื• Serial Peripheral Interface (ืžืžืฉืง ื”ื™ืงืคื™ ื˜ื•ืจื™) ื”ื•ื ืžืžืฉืง ืคืฉื•ื˜ ื•ื™ืขื™ืœ ืžืื•ื“ ืœื—ื™ื‘ื•ืจ ื—ื‘ืจ ื›ื ืกืช ืขื ื—ื‘ืจื™ ื›ื ืกืช ืื—ืจื™ื ื•ื”ืขื•ืœื ื”ื—ื™ืฆื•ืŸ ื‘ื›ืœืœ. ืขืงืจื•ืŸ ืคืขื•ืœืชื• ื›ื‘ืจ ืชื•ืืจ ืœืขื™ืœ, ื”ื™ื›ืŸ ืœื’ื‘ื™ ืžื ื”ืœ ื”ืชืงืŸ LED ื”ืกื™ื ื™ (ื‘ืžื“ืจื™ืš ื”ืขื–ืจ, ืจืื” ืกืขื™ืฃ 25). SPI ื™ื›ื•ืœ ืœืคืขื•ืœ ื‘ืžืฆื‘ ืžืืกื˜ืจ ("ืžืืกื˜ืจ") ื•ืขื‘ื“ ("ืขื‘ื“"). ืœ-SPI ื™ืฉ ืืจื‘ืขื” ืขืจื•ืฆื™ื ื‘ืกื™ืกื™ื™ื, ืฉืœื ื‘ื›ื•ืœื ื ื™ืชืŸ ืœื”ืฉืชืžืฉ:

  • MOSI, ืคืœื˜ ืžืืกื˜ืจ / ื›ื ื™ืกืช ืขื‘ื“ื™ื: ืกื™ื›ื” ื–ื• ืžืฉื“ืจืช ื ืชื•ื ื™ื ื‘ืžืฆื‘ ืžืืกื˜ืจ, ื•ืžืงื‘ืœืช ื ืชื•ื ื™ื ื‘ืžืฆื‘ ืขื‘ื“;
  • MISO, Master Input / Slave Output: ืœื”ื™ืคืš, ื”ื•ื ืžืงื‘ืœ ื‘ืžืืกื˜ืจ, ื•ืžืฉื“ืจ ื‘ืขื‘ื“;
  • SCK, Serial Clock: ืžื’ื“ื™ืจ ืืช ืชื“ื™ืจื•ืช ื”ืขื‘ืจืช ื”ื ืชื•ื ื™ื ื‘ืžืืกื˜ืจ ืื• ืžืงื‘ืœ ืื•ืช ืฉืขื•ืŸ ื‘ืขื‘ื“. ื‘ืขืฆื ืœื”ื›ื•ืช ืžื›ื•ืช;
  • SS, Slave Select: ื‘ืขื–ืจืช ื”ืขืจื•ืฅ ื”ื–ื” ื”ืขื‘ื“ ื™ื•ื“ืข ืฉืจื•ืฆื™ื ืžืžื ื• ืžืฉื”ื•. ื‘-STM32 ื–ื” ื ืงืจื NSS, ื›ืืฉืจ N = ืฉืœื™ืœื™, ื›ืœื•ืžืจ. ื”ื‘ืงืจ ื”ื•ืคืš ืœืขื‘ื“ ืื ื™ืฉ ื”ืืจืงื” ื‘ืขืจื•ืฅ ื”ื–ื”. ื–ื” ืžืฉืชืœื‘ ื”ื™ื˜ื‘ ืขื ืžืฆื‘ ื”-Open Drain Output, ืื‘ืœ ื–ื” ื›ื‘ืจ ืกื™ืคื•ืจ ืื—ืจ.

ื›ืžื• ื›ืœ ื“ื‘ืจ ืื—ืจ, SPI ื‘- STM32 ืขืฉื™ืจ ื‘ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช, ืžื” ืฉืžืงืฉื” ื‘ืžืงืฆืช ืขืœ ื”ื‘ื ืชื•. ืœื“ื•ื’ืžื”, ื–ื” ื™ื›ื•ืœ ืœืขื‘ื•ื“ ืœื ืจืง ืขื SPI, ืืœื ื’ื ืขื ืžืžืฉืง I2S, ื•ื‘ืชื™ืขื•ื“ ื”ืชื™ืื•ืจื™ื ืฉืœื”ื ืžืขื•ืจื‘ื™ื, ื™ืฉ ืฆื•ืจืš ืœื ืชืง ืืช ื”ืขื•ื“ืฃ ื‘ื–ืžืŸ. ื”ืžืฉื™ืžื” ืฉืœื ื• ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ: ืื ื—ื ื• ืจืง ืฆืจื™ื›ื™ื ืœืฉืœื•ื— ื ืชื•ื ื™ื ื‘ืืžืฆืขื•ืช MOSI ื•- SCK ื‘ืœื‘ื“. ื ืขื‘ื•ืจ ืœืกืขื™ืฃ 25.3.4 (ืชืงืฉื•ืจืช ื—ืฆื™ ื“ื•ืคืœืงืก, ืชืงืฉื•ืจืช ื—ืฆื™ ื“ื•ืคืœืงืก), ืฉื ืื ื• ืžื•ืฆืื™ื ืฉืขื•ืŸ ืื—ื“ ื•ื—ื•ื˜ ื ืชื•ื ื™ื ื—ื“-ื›ื™ื•ื•ื ื™ (ืื•ืช ืฉืขื•ืŸ ืื—ื“ ื•ื–ืจื ื ืชื•ื ื™ื ื—ื“-ื›ื™ื•ื•ื ื™ ืื—ื“):

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ื‘ืžืฆื‘ ื–ื”, ื”ืืคืœื™ืงืฆื™ื” ืžืฉืชืžืฉืช ื‘-SPI ื‘ืžืฆื‘ ืฉื™ื“ื•ืจ ื‘ืœื‘ื“ ืื• ืงื‘ืœื” ื‘ืœื‘ื“. / ืžืฆื‘ ืฉื™ื“ื•ืจ ื‘ืœื‘ื“ ื“ื•ืžื” ืœืžืฆื‘ ื“ื•ืคืœืงืก: ื ืชื•ื ื™ื ืžื•ืขื‘ืจื™ื ืขืœ ืคื™ืŸ ื”ืฉื™ื“ื•ืจ (MOSI ื‘ืžืฆื‘ ืžืืกื˜ืจ ืื• MISO ื‘ืžืฆื‘ ืขื‘ื“), ื•ืคื™ืŸ ื”ืงื‘ืœื” (MISO ืื• MOSI ื‘ื”ืชืืžื”) ื™ื›ื•ืœ ืœืฉืžืฉ ื›ืกื™ื›ืช I/O ืจื’ื™ืœื” . ื‘ืžืงืจื” ื–ื”, ื”ืืคืœื™ืงืฆื™ื” ืฆืจื™ื›ื” ืจืง ืœื”ืชืขืœื ืžืžืื’ืจ Rx (ืื ื”ื•ื ื ืงืจื, ืœื ื™ื”ื™ื• ื ืชื•ื ื™ื ืžื•ืขื‘ืจื™ื ืœืฉื).

ืžืขื•ืœื”, ืคื™ืŸ MISO ืคื ื•ื™, ื‘ื•ืื• ื ื—ื‘ืจ ืืœื™ื• ืืช ืื•ืช ื”-LAT. ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ Slave Select, ืฉืขืœ ื”-STM32 ื ื™ืชืŸ ืœืฉืœื•ื˜ ื‘ืื•ืคืŸ ืชื›ื ื•ืชื™, ื•ื–ื” ืžืื•ื“ ื ื•ื—. ืงืจืื ื• ืืช ื”ืคืกืงื” ื‘ืื•ืชื• ืฉื ื‘ืกืขื™ืฃ 25.3.1 SPI ืชื™ืื•ืจ ื›ืœืœื™:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ื‘ืงืจืช ืชื•ื›ื ื” NSS (SSM = 1) / ืžื™ื“ืข ื‘ื—ื™ืจืช ืขื‘ื“ื™ื ื›ืœื•ืœ ื‘ืกื™ื‘ื™ืช SSI ืฉืœ ื”ืื•ื’ืจ SPI_CR1. ืกื™ื›ืช ื”-NSS ื”ื—ื™ืฆื•ื ื™ืช ื ืฉืืจืช ืคื ื•ื™ื” ืœืฆืจื›ื™ ื™ื™ืฉื•ืžื™ื ืื—ืจื™ื.

ื–ื” ื”ื–ืžืŸ ืœื›ืชื•ื‘ ืœืคื ืงืกื™ื. ื”ื—ืœื˜ืชื™ ืœื”ืฉืชืžืฉ ื‘-SPI2, ื—ืคืฉ ืืช ื›ืชื•ื‘ืช ื”ื‘ืกื™ืก ืฉืœื• ื‘ื’ื™ืœื™ื•ืŸ ื”ื ืชื•ื ื™ื - ื‘ืกืขื™ืฃ 3.3 ืžืคืช ื–ื™ื›ืจื•ืŸ:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8

ื•ื‘ื›ืŸ, ื‘ื•ืื• ื ืชื—ื™ืœ:

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

ืคืชื— ืืช ืกืขื™ืฃ 25.3.3 ืขื ื”ื›ื•ืชืจืช ื”ืžืกื‘ื™ืจื” ืืช ืขืฆืžื” "ื”ื’ื“ืจืช SPI ื‘ืžืฆื‘ ืžืืกื˜ืจ":

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8

1. ื”ื’ื“ืจ ืืช ืชื“ืจ ื”ืฉืขื•ืŸ ื”ื˜ื•ืจื™ ืขื ืกื™ื‘ื™ื•ืช BR[2:0] ื‘ืื•ื’ืจ SPI_CR1.

ื”ืจื™ืฉื•ืžื™ื ื ืืกืคื™ื ื‘ื—ืœืง ื”ืžื“ืจื™ืš ืœืขื™ื•ืŸ ื‘ืื•ืชื• ืฉื. ืฉื™ื ื•ื™ ื›ืชื•ื‘ืช (ื”ื™ืกื˜ ื›ืชื•ื‘ืช) ืขื‘ื•ืจ CR1 โ€“ 0x00, ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื›ืœ ื”ืกื™ื‘ื™ื•ืช ืžื ื•ืงื™ื (ืืคืก ืขืจืš 0x0000):

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8

ืกื™ื‘ื™ื•ืช BR ืžื’ื“ื™ืจื™ื ืืช ืžื—ืœืง ื”ืฉืขื•ืŸ ืฉืœ ื”ื‘ืงืจ, ื•ื‘ื›ืš ืงื•ื‘ืขื™ื ืืช ื”ืชื“ืจ ืฉื‘ื• ื”-SPI ื™ืคืขืœ. ืชื“ืจ STM32 ืฉืœื ื• ื™ื”ื™ื” 72 ืžื’ื”-ื”ืจืฅ, ื“ืจื™ื™ื‘ืจ ื”-LED, ืขืœ ืคื™ ื’ืœื™ื•ืŸ ื”ื ืชื•ื ื™ื ืฉืœื•, ืคื•ืขืœ ื‘ืชื“ืจ ืฉืœ ืขื“ 25 ืžื’ื”-ื”ืจืฅ, ื•ืœื›ืŸ ืขืœื™ื ื• ืœื—ืœืง ื‘ืืจื‘ืข (BR[2:0] = 001).

#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)

ืžื›ื™ื•ื•ืŸ ืฉืื ื• ืงื•ืจืื™ื ื’ื™ืœื™ื•ืŸ ื ืชื•ื ื™ื ื›ืืŸ ื•ืœื ืžืกืชื›ืœื™ื ืขืœ ืกื›ืžื•ืช, ื‘ื•ืื• ื ืกืชื›ืœ ืžืงืจื•ื‘ ืขืœ ืชื™ืื•ืจ ื”ื˜ืงืกื˜ ืฉืœ ืกื™ื‘ื™ื•ืช ื”-CPOL ื•ื”-CPHA ื‘ืขืžื•ื“ 704 (ืชื™ืื•ืจ ื›ืœืœื™ ืฉืœ SPI):

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ืฉืœื‘ ื”ืฉืขื•ืŸ ื•ื”ืงื•ื˜ื‘ื™ื•ืช
ื‘ืืžืฆืขื•ืช ืกื™ื‘ื™ื•ืช CPOL ื•-CPHA ืฉืœ ื”ืื•ื’ืจ SPI_CR1, ืืชื” ื™ื›ื•ืœ ืœื‘ื—ื•ืจ ื‘ืื•ืคืŸ ืชื›ื ื•ืชื™ ืืจื‘ืขื” ืงืฉืจื™ ืชื–ืžื•ืŸ. ืกื™ื‘ื™ืช ื”-CPOL (ืงื•ื˜ื‘ื™ื•ืช ืฉืขื•ืŸ) ืฉื•ืœื˜ืช ื‘ืžืฆื‘ ืื•ืช ื”ืฉืขื•ืŸ ื›ืืฉืจ ืœื ืžื•ืขื‘ืจื™ื ื ืชื•ื ื™ื. ืกื™ื‘ื™ื•ืช ื–ื• ืฉื•ืœื˜ืช ื‘ืžืฆื‘ื™ ื”ืžืืกื˜ืจ ื•ื”ืขื‘ื“. ืื CPOL ืžืื•ืคืก, ืกื™ื›ืช SCK ื ืžื•ื›ื” ื‘ืžืฆื‘ ืžื ื•ื—ื”. ืื ื‘ื™ื˜ ื”-CPOL ืžื•ื’ื“ืจ, ืคื™ืŸ ื”-SCK ื’ื‘ื•ื” ื‘ืžืฆื‘ ืžื ื•ื—ื”.
ื›ืืฉืจ ืกื™ื‘ื™ืช ื”-CPHA (ืคืื–ืช ื”ืฉืขื•ืŸ) ืžื•ื’ื“ืจืช, ืžืœื›ื•ื“ืช ื”ืกื™ื‘ื™ื•ืช ื”ื’ื‘ื•ื”ื” ื”ื™ื ื”ืงืฆื” ื”ืฉื ื™ ืฉืœ ืื•ืช SCK (ื ื•ืคืœ ืื CPOL ื‘ืจื•ืจ, ืขื•ืœื” ืื CPOL ืžื•ื’ื“ืจ). ื”ื ืชื•ื ื™ื ื ืœื›ื“ื™ื ืขืœ ื™ื“ื™ ื”ืฉื™ื ื•ื™ ื”ืฉื ื™ ื‘ืื•ืช ื”ืฉืขื•ืŸ. ืื ืกื™ื‘ื™ื•ืช ื”-CPHA ื‘ืจื•ืจื•ืช, ื”-High-Trap strobe ื”ื•ื ื”ืงืฆื” ื”ืขื•ืœื” ืฉืœ ืื•ืช SCK (ืงืฆื” ื ื•ืคืœ ืื CPOL ืžื•ื’ื“ืจ, ืงืฆื” ืขื•ืœื” ืื CPOL ืžืกื•ืœืง). ื”ื ืชื•ื ื™ื ื ืงืœื˜ื™ื ื‘ืฉื™ื ื•ื™ ื”ืจืืฉื•ืŸ ื‘ืื•ืช ื”ืฉืขื•ืŸ.

ืœืื—ืจ ืฉืงืœื˜ื ื• ืืช ื”ื™ื“ืข ื”ื–ื”, ืื ื—ื ื• ืžื’ื™ืขื™ื ืœืžืกืงื ื” ืฉืฉื ื™ ื”ื‘ื™ื˜ื™ื ื—ื™ื™ื‘ื™ื ืœื”ื™ืฉืืจ ืืคืกื™ื, ืžื›ื™ื•ื•ืŸ ืื ื• ืจื•ืฆื™ื ืฉืื•ืช SCK ื™ื™ืฉืืจ ื ืžื•ืš ื›ืืฉืจ ืื™ื ื• ื‘ืฉื™ืžื•ืฉ, ื•ืฉื”ื ืชื•ื ื™ื ื™ืฉื•ื“ืจื• ื‘ืงืฆื” ื”ืขื•ืœื” ืฉืœ ื”ื“ื•ืคืง (ืจืื” ืื™ื•ืจ. ืงืฆื” ืขื•ืœื” ื‘ื’ื™ืœื™ื•ืŸ ื”ื ืชื•ื ื™ื ืฉืœ DM634).

ืื’ื‘, ื›ืืŸ ื ืชืงืœื ื• ืœืจืืฉื•ื ื” ื‘ืชื›ื•ื ื” ืฉืœ ืื•ืฆืจ ื”ืžื™ืœื™ื ื‘ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื ืฉืœ ST: ื‘ื”ื ื ื›ืชื‘ ื”ื‘ื™ื˜ื•ื™ "ืืคืก ืืช ื”ื‘ื™ื˜ ืœืืคืก" ืœื”ืชืืคืก ืงืฆืชื•ืœื ืœื ืงื•ืช ืงืฆืช, ื›ืžื•, ืœืžืฉืœ, Atmega.

3. ื”ื’ื“ืจ ืืช ืกื™ื‘ื™ื•ืช DFF ื›ื“ื™ ืœืงื‘ื•ืข ืื ื‘ืœื•ืง ื”ื ืชื•ื ื™ื ื”ื•ื ื‘ืคื•ืจืžื˜ ืฉืœ 8 ืกื™ื‘ื™ื•ืช ืื• 16 ืกื™ื‘ื™ื•ืช

ืœืงื—ืชื™ ื‘ืžื™ื•ื—ื“ DM16 ืฉืœ 634 ืกื™ื‘ื™ื•ืช ื›ื“ื™ ืœื ืœื˜ืจื•ื— ื‘ื”ืขื‘ืจืช ื ืชื•ื ื™ PWM ืฉืœ 12 ืกื™ื‘ื™ื•ืช, ื›ืžื• ื”-DM633. ื”ื’ื™ื•ื ื™ ืœื”ื’ื“ื™ืจ ืืช DFF ืœืื—ื“:

#define DFF         0x0800

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

4. ื”ื’ื“ืจ ืืช ืกื™ื‘ื™ื•ืช LSBFIRST ื‘ืื•ื’ืจ SPI_CR1 ื›ื“ื™ ืœืงื‘ื•ืข ืืช ืคื•ืจืžื˜ ื”ื‘ืœื•ืง

LSBFIRST, ื›ืคื™ ืฉืฉืžื” ืžืจืžื–, ืžื’ื“ื™ืจ ืชืฆื•ืจื” ืฉืœ ืฉื™ื“ื•ืจ ืขื ื”ืกื™ื‘ื™ื•ืช ื”ืคื—ื•ืช ืžืฉืžืขื•ืชื™ื•ืช ืชื—ื™ืœื”. ืื‘ืœ DM634 ืจื•ืฆื” ืœืงื‘ืœ ื ืชื•ื ื™ื ื”ื—ืœ ืžื”ืกื™ื‘ื™ืช ื”ืžืฉืžืขื•ืชื™ืช ื‘ื™ื•ืชืจ. ืœื›ืŸ, ืื ื• ืžืฉืื™ืจื™ื ืื•ืชื• ืžืื•ืคืก.

5. ื‘ืžืฆื‘ ื—ื•ืžืจื”, ืื ื ื“ืจืฉืช ืงืœื˜ ืžืคื™ืŸ ื”-NSS, ื”ื—ืœ ืื•ืช ื’ื‘ื•ื” ืขืœ ืคื™ืŸ ื”-NSS ื‘ืžื”ืœืš ื›ืœ ืจืฆืฃ ื”ืขื‘ืจืช ื”ื‘ืชื™ื. ื‘ืžืฆื‘ ืชื•ื›ื ืช NSS, ื”ื’ื“ืจ ืืช ืกื™ื‘ื™ื•ืช SSM ื•-SSI ื‘ืื•ื’ืจ SPI_CR1. ืื ื™ืฉ ืœื”ืฉืชืžืฉ ื‘ืคื™ืŸ ื”-NSS ื›ืคืœื˜, ื™ืฉ ืœื”ื’ื“ื™ืจ ืจืง ืืช ืกื™ื‘ื™ื•ืช ื”-SSOE.

ื”ืชืงืŸ SSM ื•-SSI ื›ื“ื™ ืœืฉื›ื•ื— ืžืžืฆื‘ ื”ื—ื•ืžืจื” ืฉืœ NSS:

#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: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ืกื“ืจ ื”ืขื‘ืจืช ื ืชื•ื ื™ื
ื”ืฉื™ื“ื•ืจ ืžืชื—ื™ืœ ื›ืืฉืจ ื‘ื™ื™ื˜ ื ื›ืชื‘ ืœืžืื’ืจ Tx.
ื‘ื™ืช ื”ื ืชื•ื ื™ื ื ื˜ืขืŸ ืœืื•ื’ืจ ื”ืžืฉืžืจื•ืช ื‘ืฉืขื” ืžึทืงึฐื‘ึผึดื™ืœ ืžืฆื‘ (ืžื”ืื•ื˜ื•ื‘ื•ืก ื”ืคื ื™ืžื™) ื‘ืžื”ืœืš ื”ืฉื™ื“ื•ืจ ืฉืœ ื”ื‘ื™ื˜ ื”ืจืืฉื•ืŸ, ืฉืœืื—ืจื™ื• ื”ื•ื ืžื•ืขื‘ืจ ืืœ ืกึดื“ืจึธืชึดื™ ืžืฆื‘ PIN MOSI, ืกื™ื‘ื™ื•ืช ืจืืฉื•ื ื” ืื• ืื—ืจื•ื ื” ืงื“ื™ืžื” ื‘ื”ืชืื ืœื”ื’ื“ืจืช ืกื™ื‘ื™ืช LSBFIRST ื‘ืื•ื’ืจ CPI_CR1. ื“ื’ืœ TXE ืžื•ื’ื“ืจ ืœืื—ืจ ื”ืขื‘ืจืช ื ืชื•ื ื™ื ืžืžืื’ืจ Tx ืœืื•ื’ืจ ืžืฉืžืจื•ืช, ื•ื’ื ื™ื•ืฆืจ ืคืกื™ืงื” ืื ื‘ื™ื˜ TXEIE ื‘ืื•ื’ืจ CPI_CR1 ืžื•ื’ื“ืจ.

ื”ื“ื’ืฉืชื™ ื›ืžื” ืžื™ืœื™ื ื‘ืชืจื’ื•ื ื›ื“ื™ ืœืžืฉื•ืš ืชืฉื•ืžืช ืœื‘ ืœืชื›ื•ื ื” ืื—ืช ืฉืœ ื™ื™ืฉื•ื SPI ื‘ื‘ืงืจื™ STM. ื‘-Atmega ื“ื’ืœ TXE (Tx ืจื™ืง, Tx ืจื™ืง ื•ืžื•ื›ืŸ ืœืงื‘ืœ ื ืชื•ื ื™ื) ืžื•ื’ื“ืจ ืจืง ืœืื—ืจ ืฉืœื™ื—ืช ื›ืœ ื”ื‘ืชื™ื ื”ื—ื•ืฆื”. ื•ื”ื ื” ื”ื“ื’ืœ ื”ื–ื” ื ืงื‘ืข ืœืื—ืจ ืฉื”ื‘ื™ืช ื”ื•ื›ื ืก ืœืื•ื’ืจ ื”ืžืฉืžืจื•ืช ื”ืคื ื™ืžื™. ืžื›ื™ื•ื•ืŸ ืฉื”ื•ื ื ื“ื—ืฃ ืœืฉื ืขื ื›ืœ ื”ื‘ื™ื˜ื™ื ื‘ื•-ื–ืžื ื™ืช (ื‘ืžืงื‘ื™ืœ), ื•ืื– ื”ื ืชื•ื ื™ื ืžื•ืขื‘ืจื™ื ื‘ืจืฆืฃ, TXE ืžื•ื’ื“ืจ ืœืคื ื™ ืฉื”ื‘ื™ื™ื˜ ื ืฉืœื— ืœื—ืœื•ื˜ื™ืŸ. ื–ื” ื—ืฉื•ื‘ ื›ื™ ื‘ืžืงืจื” ืฉืœ ื“ืจื™ื™ื‘ืจ LED ืฉืœื ื•, ืขืœื™ื ื• ืœืžืฉื•ืš ืืช ืกื™ื›ืช ื”-LAT ืœืื—ืจ ื”ืฉืœื™ื—ื” ื›ืœ ื ืชื•ื ื™ื, ื›ืœื•ืžืจ. ื“ื’ืœ TXE ืœื‘ื“ื• ืœื ื™ืกืคื™ืง ืœื ื•.

ื–ื” ืื•ืžืจ ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ื“ื’ืœ ื ื•ืกืฃ. ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ 25.3.7 - "ื“ื’ืœื™ ืกื˜ื˜ื•ืก":

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
<...>
ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ื“ื’ืœ ืขืกื•ืง
ื“ื’ืœ BSY ืžื•ื’ื“ืจ ื•ืžื ื•ืงื” ืขืœ ื™ื“ื™ ื—ื•ืžืจื” (ืœื›ืชื™ื‘ื” ืืœื™ื• ืื™ืŸ ื”ืฉืคืขื”). ื“ื’ืœ BSY ืžืฆื™ื™ืŸ ืืช ืžืฆื‘ ืฉื›ื‘ืช ื”ืชืงืฉื•ืจืช SPI.
ื–ื” ืžืชืืคืก:
ื›ืืฉืจ ื”ื”ืขื‘ืจื” ื”ื•ืฉืœืžื” (ืœืžืขื˜ ื‘ืžืฆื‘ ืžืืกื˜ืจ ืื ื”ื”ืขื‘ืจื” ืจืฆื™ืคื”)
ื›ืืฉืจ SPI ืžื•ืฉื‘ืช
ื›ืืฉืจ ืžืชืจื—ืฉืช ืฉื’ื™ืืช ืžืฆื‘ ืžืืกื˜ืจ (MODF=1)
ืื ื”ื”ืขื‘ืจื” ืื™ื ื” ืจืฆื™ืคื”, ื“ื’ืœ ื”-BSY ื ืžื—ืง ื‘ื™ืŸ ื›ืœ ื”ืขื‘ืจืช ื ืชื•ื ื™ื

ืื•ืงื™ื™, ื–ื” ื™ื”ื™ื” ืฉื™ืžื•ืฉื™. ื‘ื•ืื• ืœื’ืœื•ืช ื”ื™ื›ืŸ ืžืžื•ืงื ืžืื’ืจ ื”-Tx. ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ืงืจื ืืช "ืžืจืฉื ื”ื ืชื•ื ื™ื ืฉืœ SPI":

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
Bits 15:0 DR[15:0] Data Register
ื ืชื•ื ื™ื ืฉื”ืชืงื‘ืœื• ืื• ื ืชื•ื ื™ื ืฉื™ืฉื•ื“ืจื•.
ืžืื’ืจ ื”ื ืชื•ื ื™ื ืžื—ื•ืœืง ืœืฉื ื™ ืžืื’ืจื™ื - ืื—ื“ ืœื›ืชื™ื‘ื” (ืžืื’ืจ ืฉื™ื“ื•ืจ) ื•ืื—ื“ ืœืงืจื™ืื” (ืžืื’ืจ ืงืœื™ื˜ื”). ื›ืชื™ื‘ื” ืœืžืื’ืจ ื”ื ืชื•ื ื™ื ื›ื•ืชื‘ืช ืœืžืื’ืจ Tx, ื•ืงืจื™ืื” ืžืžืื’ืจ ื”ื ืชื•ื ื™ื ืชื—ื–ื™ืจ ืืช ื”ืขืจืš ื”ื›ืœื•ืœ ื‘ืžืื’ืจ Rx.

ื•ื‘ื›ืŸ, ื•ืžืจืฉื ื”ืกื˜ื˜ื•ืก, ืฉื‘ื• ื ืžืฆืื™ื ื“ื’ืœื™ TXE ื•-BSY:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8

ืื ื—ื ื• ื›ื•ืชื‘ื™ื:

#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
}

ื•ื‘ื›ืŸ, ืžื›ื™ื•ื•ืŸ ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืฉื“ืจ 16 ื›ืคื•ืœ ืฉื ื™ ื‘ืชื™ื, ืœืคื™ ืžืกืคืจ ื™ืฆื™ืื•ืช ืžื ื”ืœื™ ื”ืชืงืŸ LED, ืžืฉื”ื• ื›ื–ื”:

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: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ื›ืœ ืื—ืช ืžื™ืฆื™ืื•ืช I/O ืœืฉื™ืžื•ืฉ ื›ืœืœื™ (GPIO) ื™ืฉ ืฉื ื™ ืื•ื’ืจื™ ืชืฆื•ืจื” ืฉืœ 32 ืกื™ื‘ื™ื•ืช (GPIOx_CRL ื•-GPIOx_CRH), ืฉื ื™ ืื•ื’ืจื™ ื ืชื•ื ื™ื ืฉืœ 32 ืกื™ื‘ื™ื•ืช (GPIOx_IDR ื•-GPIOx_ODR), ืื•ื’ืจ 32 ืกื™ื‘ื™ื•ืช ืœื”ื’ื“ื™ืจ/ืื™ืคื•ืก (GPIOx_BSRR), ืื•ื’ืจ ืื™ืคื•ืก ืฉืœ 16 ืกื™ื‘ื™ื•ืช (GPIOx_BRR) ื•-32- ืื•ื’ืจ ื—ืกื™ืžืช ืกื™ื‘ื™ื•ืช (GPIOx_LCKR).

ืฉื ื™ ื”ืจื’ื™ืกื˜ืจื™ื ื”ืจืืฉื•ื ื™ื ื”ื ื™ื•ืฆืื™ ื“ื•ืคืŸ, ื•ื’ื ื“ื™ ืœื ื ื•ื—ื™ื, ืžื›ื™ื•ื•ืŸ ืฉ-16 ืคื™ื ื™ ื”ื™ืฆื™ืื•ืช ืžืคื•ื–ืจื™ื ืขืœื™ื”ื ื‘ืคื•ืจืžื˜ "ืืจื‘ืขื” ื‘ื™ื˜ื™ื ืœืื—". ื”ึธื”ึตืŸ. ืคื™ื ื™ื ืืคืก ืขื“ ืฉื‘ืข ื ืžืฆืื™ื ื‘-CRL, ื•ื”ืฉืืจ ื‘-CRH. ื™ื—ื“ ืขื ื–ืืช, ื”ืจื’ื™ืกื˜ืจื™ื ื”ื ื•ืชืจื™ื ืžื›ื™ืœื™ื ื‘ื”ืฆืœื—ื” ืืช ื”ืกื™ื‘ื™ื•ืช ืฉืœ ื›ืœ ื”ืคื™ื ื™ื ืฉืœ ื”ื™ืฆื™ืื” - ืœืจื•ื‘ ื ืฉืืจื™ื ื—ืฆื™ "ืฉืžื•ืจื™ื".

ืœืฉื ื”ืคืฉื˜ื•ืช, ื ืชื—ื™ืœ ืžืกื•ืฃ ื”ืจืฉื™ืžื”.

ืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืคื ืงืก ื—ื•ืกื.

ืื•ื’ืจื™ ื”ืกื˜ ื•ื”ืื™ืคื•ืก ื“ื™ ืžืฆื—ื™ืงื™ื ื‘ื›ืš ืฉื”ื ืžืฉื›ืคืœื™ื ื–ื” ืืช ื–ื” ื—ืœืงื™ืช: ืืชื” ื™ื›ื•ืœ ืœื›ืชื•ื‘ ื”ื›ืœ ืจืง ื‘-BSRR, ื›ืืฉืจ 16 ื”ืกื™ื‘ื™ื•ืช ื”ื’ื‘ื•ื”ื•ืช ื™ื•ืชืจ ื™ืืคืกื• ืืช ื”ืคื™ืŸ ืœืืคืก, ื•ื”ืชื—ืชื•ื ื™ื ื™ื•ื’ื“ืจื• ืœ-1, ืื• ืฉืืชื” ื™ื›ื•ืœ ื’ื ื”ืฉืชืžืฉ ื‘-BRR, ืฉ-16 ื”ืกื™ื‘ื™ื•ืช ื”ืชื—ืชื•ื ื•ืช ืฉื‘ื”ืŸ ืจืง ืžืืคืกื•ืช ืืช ื”ืคื™ืŸ. ืื ื™ ืื•ื”ื‘ ืืช ื”ืืคืฉืจื•ืช ื”ืฉื ื™ื™ื”. ืจื’ื™ืกื˜ืจื™ื ืืœื” ื—ืฉื•ื‘ื™ื ืžื›ื™ื•ื•ืŸ ืฉื”ื ืžืกืคืงื™ื ื’ื™ืฉื” ืื˜ื•ืžื™ืช ืœืกื™ื›ื•ืช:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ืกื˜ ืื• ืื™ืคื•ืก ืื˜ื•ืžื™
ืื™ืŸ ืฆื•ืจืš ืœื ื˜ืจืœ ืคืกื™ืงื•ืช ื‘ืขืช ืชื›ื ื•ืช GPIOx_ODR ื‘ืจืžืช ื”ืกื™ื‘ื™ื•ืช: ื ื™ืชืŸ ืœืฉื ื•ืช ืกื™ื‘ื™ื•ืช ืื—ืช ืื• ื™ื•ืชืจ ื‘ืคืขื•ืœืช ื›ืชื™ื‘ื” ืื˜ื•ืžื™ืช ืื—ืช APB2. ื–ื” ืžื•ืฉื’ ืขืœ ื™ื“ื™ ื›ืชื™ื‘ืช "1" ืœืื’ืจ ื”ืกื˜/ืื™ืคื•ืก (GPIOx_BSRR ืื•, ืœืื™ืคื•ืก ื‘ืœื‘ื“, GPIOx_BRR) ืฉืœ ื”ื‘ื™ื˜ ืฉืฆืจื™ืš ืœืฉื ื•ืช. ื‘ื™ื˜ื™ื ืื—ืจื™ื ื™ื™ืฉืืจื• ืœืœื ืฉื™ื ื•ื™.

ืœืžืื’ืจื™ ื”ื ืชื•ื ื™ื ื™ืฉ ืฉืžื•ืช ื“ื™ ื‘ืจื•ืจื™ื - IDR = ืงึถืœึถื˜ ืžืจืฉื ื›ื™ื•ื•ืŸ, ืื•ื’ืจ ืงืœื˜; ODR = ืชึฐืคื•ึผืงึธื” ืื•ื’ืจ ื›ื™ื•ื•ืŸ, ืื•ื’ืจ ืคืœื˜. ืœื ื ืฆื˜ืจืš ืื•ืชื ื‘ืคืจื•ื™ืงื˜ ื”ื ื•ื›ื—ื™.

ื•ืœื‘ืกื•ืฃ, ืจื•ืฉืžืช ื‘ืงืจื”. ืžื›ื™ื•ื•ืŸ ืฉืื ื• ืžืขื•ื ื™ื™ื ื™ื ื‘ืคื™ื ื™ื ื”ืฉื ื™ื™ื ืฉืœ SPI, ื›ืœื•ืžืจ PB13, PB14 ื•-PB15, ืื ื• ืžื™ื“ ืžืกืชื›ืœื™ื ืขืœ CRH:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8

ื•ืื ื—ื ื• ืจื•ืื™ื ืฉื ืฆื˜ืจืš ืœื›ืชื•ื‘ ืžืฉื”ื• ื‘ืกื™ื‘ื™ื•ืช ืž-20 ืขื“ 31.

ื›ื‘ืจ ื”ื‘ื ื• ืœืžืขืœื” ืžื” ืื ื—ื ื• ืจื•ืฆื™ื ืžืกื™ื›ื•ืช, ืื– ื›ืืŸ ืื ื™ ืืขืฉื” ื‘ืœื™ ืฆื™ืœื•ื ืžืกืš, ืื ื™ ืจืง ืื’ื™ื“ ืฉ-MODUS ืžืฆื™ื™ืŸ ืืช ื”ื›ื™ื•ื•ืŸ (ื”ืงืœื˜ ืื ืฉื ื™ ื”ื‘ื™ื˜ื™ื ืžื•ื’ื“ืจื™ื ืœ-0) ื•ืืช ืžื”ื™ืจื•ืช ื”ืคื™ืŸ (ืื ื—ื ื• ืฆืจื™ื›ื™ื 50MHz, ื›ืœื•ืžืจ. ืฉื ื™ื”ื ืคื™ื ื™ื ืœ-"1"), ื•-CNF ืžื’ื“ื™ืจ ืืช ื”ืžืฆื‘: "ื“ื—ื™ืคื”-ืžืฉื™ื›ื”" ืจื’ื™ืœื” - 00, "ืืœื˜ืจื ื˜ื™ื‘ื”" - 10. ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ื›ืคื™ ืฉืื ื• ืจื•ืื™ื ืœืขื™ืœ, ืœื›ืœ ื”ืคื™ื ื™ื ื™ืฉ ืืช ื”ืกื™ื‘ื™ื•ืช ื”ืฉืœื™ืฉื™ืช ืžืœืžื˜ื” (CNF0), ื–ื” ืžื›ื•ื•ืŸ ืื•ืชื ืœืžืฆื‘ ืงืœื˜ ืฆืฃ.

ืžื›ื™ื•ื•ืŸ ืฉืื ื™ ืžืชื›ื ืŸ ืœืขืฉื•ืช ืžืฉื”ื• ืื—ืจ ืขื ื”ืฉื‘ื‘ ื”ื–ื”, ืœืžืขืŸ ื”ืคืฉื˜ื•ืช ื”ื’ื“ืจืชื™ ืืช ื›ืœ ืขืจื›ื™ 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;

ื•ื‘ื”ืชืื ืœื›ืš, ืืชื” ื™ื›ื•ืœ ืœื›ืชื•ื‘ ื”ื’ื“ืจื•ืช ืขื‘ื•ืจ LAT, ืืฉืจ ื™ืขื•ื•ืชื• ืขืœ ื™ื“ื™ ืื•ื’ืจื™ BRR ื•-BSRR:

/*** 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, ื”ื ื—ื•ืกื›ื™ื ื‘ื—ืฉืžืœ, ืžื” ืฉืื•ืžืจ ืฉืืชื” ืฆืจื™ืš ืœืืคืฉืจ ืฉืขื•ืŸ ืฉืœ ื”ืฆื™ื•ื“ ื”ื”ื™ืงืคื™ ื”ื ื“ืจืฉ.

ื”ืคืขืœ ืืช ื”ืฉืขื•ืŸ

ื”ืฉืขื•ืŸ, ื”ื™ื“ื•ืข ื’ื ื‘ืฉื Clock, ืื—ืจืื™ ืขืœ ื”ืฉืขื•ืŸ. ื•ื›ื‘ืจ ื™ื›ื•ืœื ื• ืœืฉื™ื ืœื‘ ืœืงื™ืฆื•ืจ RCC. ืื ื—ื ื• ืžื—ืคืฉื™ื ืืช ื–ื” ื‘ืชื™ืขื•ื“: ื–ื” ืื™ืคื•ืก ื•ื‘ืงืจืช ืฉืขื•ืŸ.

ื›ืคื™ ืฉื ืืžืจ ืœืžืขืœื”, ืœืžืจื‘ื” ื”ืžื–ืœ, ื”ื—ืœืง ื”ืงืฉื” ื‘ื™ื•ืชืจ ื‘ื ื•ืฉื ื”ืฉืขื•ืŸ ื ืขืฉื” ืขื‘ื•ืจื ื• ืขืœ ื™ื“ื™ ืื ืฉื™ STM, ื•ืขืœ ื›ืš ืื ื• ืžื•ื“ื™ื ืœื”ื ืžืื•ื“ (ืฉื•ื‘ ืืชืŸ ืงื™ืฉื•ืจ ืœ ื”ืืชืจ ืฉืœ ื“ื™ ื”ืืœื˜, ื›ื“ื™ ืœื”ื‘ื”ื™ืจ ื›ืžื” ื–ื” ืžื‘ืœื‘ืœ). ืื ื—ื ื• ืฆืจื™ื›ื™ื ืจืง ืื•ื’ืจื™ื ื”ืื—ืจืื™ื ืœื”ืคืขืœืช ืฉืขื•ืŸ ื”ื™ืงืคื™ (Peripheral Clock Enable Registers). ืจืืฉื™ืช, ื‘ื•ืื• ื ืžืฆื ืืช ื›ืชื•ื‘ืช ื”ื‘ืกื™ืก ืฉืœ ื”-RCC, ื”ื™ื ื ืžืฆืืช ืžืžืฉ ื‘ืชื—ื™ืœืช "ืžืคืช ื”ื–ื™ื›ืจื•ืŸ":

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8

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

ื•ืื– ืื• ืœื—ืฅ ืขืœ ื”ืงื™ืฉื•ืจ ืฉื‘ื• ืืชื” ืžื ืกื” ืœืžืฆื•ื ืžืฉื”ื• ื‘ืฆืœื—ืช, ืื•, ื”ืจื‘ื” ื™ื•ืชืจ ื˜ื•ื‘, ืœืขื‘ื•ืจ ืขืœ ื”ืชื™ืื•ืจื™ื ืฉืœ ื”ืื•ื’ืจื™ื ื”ืžืืคืฉืจื™ื ืžื”ืกืขื™ืคื™ื ืขืœ ืœืืคืฉืจ ืจื™ืฉื•ืžื™ื. ื”ื™ื›ืŸ ื ืžืฆื RCC_APB1ENR ื•-RCC_APB2ENR:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8

ื•ื”ื, ื‘ื”ืชืื, ืžื›ื™ืœื™ื ื‘ื™ื˜ื™ื ื”ื›ื•ืœืœื™ื ืืช ื”ืฉืขื•ืŸ ืฉืœ 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. ืื ื• ืžืคืขื™ืœื™ื ืืช ื”ื ื”ื’ ืž-5 ื•ื•ืœื˜, ืืœ ืชืฉื›ื— ืœื—ื‘ืจ ืืช ื”ืงืจืงืข.

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8

STM8 PWM

PWM ืขืœ STM8

ื›ืฉืจืง ืชื›ื ื ืชื™ ืืช ื”ืžืืžืจ ื”ื–ื”, ื”ื—ืœื˜ืชื™, ื›ื“ื•ื’ืžื”, ืœื ืกื•ืช ืœืฉืœื•ื˜ ื‘ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื›ืœืฉื”ื™ ืฉืœ ืฉื‘ื‘ ืœื ืžื•ื›ืจ ื‘ืืžืฆืขื•ืช ื’ื™ืœื™ื•ืŸ ื ืชื•ื ื™ื ื‘ืœื‘ื“, ื›ื“ื™ ืฉืœื ืืกื™ื™ื ืขื ืกื ื“ืœืจ ื‘ืœื™ ืžื’ืคื™ื™ื. STM8 ื”ื™ื” ืื™ื“ื™ืืœื™ ืœืชืคืงื™ื“ ื”ื–ื”: ืจืืฉื™ืช, ื”ื™ื• ืœื™ ื›ืžื” ืœื•ื—ื•ืช ืกื™ื ื™ื™ื ืขื STM8S103, ื•ืฉื ื™ืช, ื”ื•ื ืœื ืžืื•ื“ ืคื•ืคื•ืœืจื™, ื•ืœื›ืŸ ื”ืคื™ืชื•ื™ ืœืงืจื•ื ื•ืœืžืฆื•ื ืคืชืจื•ืŸ ื‘ืื™ื ื˜ืจื ื˜ ื ืฉืขืŸ ืขืœ ื”ื™ืขื“ืจ ื”ืคืชืจื•ื ื•ืช ื”ืœืœื•.

ื’ื ืœืฉื‘ื‘ ื™ืฉ ื˜ื•ืคืก ืžื™ื“ืข ะธ ืžื“ืจื™ืš ืขื–ืจ RM0016, ื‘ืจืืฉื•ืŸ ื™ืฉ pinout ื•ื›ืชื•ื‘ื•ืช ืจื™ืฉื•ื, ื‘ืฉื ื™ - ื›ืœ ื”ืฉืืจ. STM8 ืžืชื•ื›ื ืช ื‘-C ื‘-IDE ื ื•ืจื ST Visual Develop.

ืฉืขื•ืŸ ื•ืงืœื˜/ืคืœื˜

ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, STM8 ืคื•ืขืœ ื‘ืชื“ืจ ืฉืœ 2 ืžื’ื”-ื”ืจืฅ, ื™ืฉ ืœืชืงืŸ ื–ืืช ืžื™ื“.

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ืฉืขื•ืŸ HSI (High Speed โ€‹โ€‹โ€‹โ€‹Internal).
ืื•ืช ื”ืฉืขื•ืŸ HSI ื ื’ื–ืจ ืžืชื ื“ RC ืคื ื™ืžื™ ืฉืœ 16 ืžื’ื”-ื”ืจืฅ ืขื ืžื—ืœืง ื”ื ื™ืชืŸ ืœืชื›ื ื•ืช (1 ืขื“ 8). ื”ื•ื ืžื•ื’ื“ืจ ื‘ืคื ืงืก ืžื—ืœืง ื”ืฉืขื•ืŸ (CLK_CKDIVR).
ื”ืขืจื”: ื‘ื”ืชื—ืœื”, ืžืชื ื“ HSI RC ืขื ืžื—ืœืง ืฉืœ 8 ื ื‘ื—ืจ ื›ืžืงื•ืจ ื”ืžื•ื‘ื™ืœ ืฉืœ ืื•ืช ื”ืฉืขื•ืŸ.

ืื ื• ืžื•ืฆืื™ื ืืช ื›ืชื•ื‘ืช ื”ืจื™ืฉื•ื ื‘ื’ื™ืœื™ื•ืŸ ื”ื ืชื•ื ื™ื, ืืช ื”ืชื™ืื•ืจ ื‘-refman ื•ืจื•ืื™ื ืฉื™ืฉ ืœื ืงื•ืช ืืช ื”ืžืจืฉื:

#define CLK_CKDIVR *(volatile uint8_t *)0x0050C6

CLK_CKDIVR &= ~(0x18);

ืžื›ื™ื•ื•ืŸ ืฉืื ื• ื”ื•ืœื›ื™ื ืœื”ืคืขื™ืœ PWM ื•ืœื—ื‘ืจ ืืช ื ื•ืจื™ื•ืช ื”-LED, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”-pinout:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8

ื”ืฉื‘ื‘ ืงื˜ืŸ, ืคื•ื ืงืฆื™ื•ืช ืจื‘ื•ืช ืชืœื•ื™ื•ืช ืขืœ ืื•ืชืŸ ืคื™ื ื™ื. ืžื” ืฉืžื•ืคื™ืข ื‘ืกื•ื’ืจื™ื™ื ืžืจื•ื‘ืขื™ื ื”ื•ื "ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื—ืœื•ืคื™ืช", ื”ื™ื ืžืฉืชื ื” ืขืœ ื™ื“ื™ "ื‘ืชื™ื ืฉืœ ืืคืฉืจื•ื™ื•ืช" (ื‘ืชื™ื ืฉืœ ืืคืฉืจื•ืช) - ืžืฉื”ื• ื›ืžื• ื ืชื™ื›ื™ื ืฉืœ Atmega. ืืชื” ื™ื›ื•ืœ ืœืฉื ื•ืช ืืช ื”ืขืจื›ื™ื ืฉืœื”ื ื‘ืื•ืคืŸ ืชื›ื ื•ืชื™, ืื‘ืœ ื–ื” ืœื ื”ื›ืจื—ื™, ื›ื™ ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ื—ื“ืฉื” ืžื•ืคืขืœืช ืจืง ืœืื—ืจ ืืชื—ื•ืœ ืžื—ื“ืฉ. ืงืœ ื™ื•ืชืจ ืœื”ืฉืชืžืฉ ื‘-ST Visual Programmer (ื”ื•ืจื“ ืขื Visual Develop), ืฉื™ื›ื•ืœ ืœืฉื ื•ืช ื‘ืชื™ื ืืœื”. ื”-Pinout ืžืจืื” ืฉื”ืคื™ื ื™ื CH1 ื•-CH2 ืฉืœ ื”ื˜ื™ื™ืžืจ ื”ืจืืฉื•ืŸ ืžื•ืกืชืจื™ื ื‘ืกื•ื’ืจื™ื™ื ืžืจื•ื‘ืขื™ื; ื™ืฉ ืฆื•ืจืš ืœื”ื’ื“ื™ืจ ืืช ืกื™ื‘ื™ื•ืช AFR1 ื•-AFR0 ื‘-STVP, ื•ื”ืฉื ื™ ื™ืขื‘ื™ืจ ื’ื ืืช ืคืœื˜ CH1 ืฉืœ ื”ื˜ื™ื™ืžืจ ื”ืฉื ื™ ืž-PD4 ืœ-PC5.

ืœืคื™ื›ืš, 6 ืคื™ื ื™ื ื™ืฉืœื˜ื• ืขืœ ื”ื ื•ืจื™ื•ืช: PC6, PC7 ื•-PC3 ืขื‘ื•ืจ ื”ื˜ื™ื™ืžืจ ื”ืจืืฉื•ืŸ, PC5, PD3 ื•-PA3 ืขื‘ื•ืจ ื”ืฉื ื™.

ื”ื’ื“ืจืช ืคื™ื ื™ ื”ืงืœื˜/ืคืœื˜ ืขืฆืžื ื‘- STM8 ื”ื™ื ืคืฉื•ื˜ื” ื•ื”ื’ื™ื•ื ื™ืช ื™ื•ืชืจ ืžืืฉืจ ื‘- STM32:

  • ืžื•ื›ืจ ืžืื•ื’ืจ ื›ื™ื•ื•ืŸ ื”ื ืชื•ื ื™ื ืฉืœ Atmega DDR (ืจื™ืฉื•ื ื›ื™ื•ื•ืŸ ื ืชื•ื ื™ื): 1 = ืคืœื˜;
  • ืื•ื’ืจ ื”ื‘ืงืจื” ื”ืจืืฉื•ืŸ CR1, ื›ืืฉืจ ื™ื•ืฆื, ืžื’ื“ื™ืจ ืืช ืžืฆื‘ ื“ื—ื™ืคื”-ืžืฉื™ื›ื” (1) ืื• ื ื™ืงื•ื– ืคืชื•ื— (0); ืžื›ื™ื•ื•ืŸ ืฉืื ื™ ืžื—ื‘ืจ ืืช ื”ื ื•ืจื™ื•ืช ืœืฉื‘ื‘ ืขื ืงืชื•ื“ื•ืช, ืื ื™ ืžืฉืื™ืจ ื›ืืŸ ืืคืกื™ื;
  • ืื•ื’ืจ ื”ื‘ืงืจื” ื”ืฉื ื™ CR2, ื›ืืฉืจ ื™ื•ืฆื, ืžื’ื“ื™ืจ ืืช ืžื”ื™ืจื•ืช ื”ืฉืขื•ืŸ: 1 = 10 ืžื’ื”-ื”ืจืฅ

#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, Output Compare Reference Signal - ื”ืคื ื™ื” ืœืื•ืช ืคืœื˜, ืœืžืขืฉื”, ืžื” ืฉืžื•ืคื™ืข ื‘ืคื™ืŸ ื”ืžืชืื™ื ื‘ืžืฆื‘ PWM.

ื›ืคื™ ืฉื›ื‘ืจ ื‘ืจื•ืจ ืžื”-pinout, ืœืฉื ื™ ื˜ื™ื™ืžืจื™ื ื™ืฉ ื™ื›ื•ืœื•ืช PWM - ื”ืจืืฉื•ืŸ ื•ื”ืฉื ื™. ืฉื ื™ื”ื ื”ื 16 ืกื™ื‘ื™ื•ืช, ืœืจืืฉื•ืŸ ื™ืฉ ื”ืจื‘ื” ืชื›ื•ื ื•ืช ื ื•ืกืคื•ืช (ื‘ืคืจื˜, ื”ื•ื ื™ื›ื•ืœ ืœืกืคื•ืจ ื’ื ืœืžืขืœื” ื•ื’ื ืœืžื˜ื”). ืฉื ื™ื ื• ืฆืจื™ื›ื™ื ืœืขื‘ื•ื“ ื‘ืฆื•ืจื” ืฉื•ื•ื”, ืื– ื”ื—ืœื˜ืชื™ ืœื”ืชื—ื™ืœ ืขื ื”ืฉื ื™ ื”ืžืกื›ืŸ ื™ื•ืชืจ, ื›ื“ื™ ืœื ืœื”ืฉืชืžืฉ ื‘ื˜ืขื•ืช ื‘ืžืฉื”ื• ืฉืœื ืงื™ื™ื. ื‘ืขื™ื” ื›ืœืฉื”ื™ ื”ื™ื ืฉื”ืชื™ืื•ืจ ืฉืœ ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”-PWM ืฉืœ ื›ืœ ื”ื˜ื™ื™ืžืจื™ื ื‘ืžื“ืจื™ืš ื”ืขื–ืจ ื ืžืฆื ื‘ืคืจืง ืขืœ ื”ื˜ื™ื™ืžืจ ื”ืจืืฉื•ืŸ (17.5.7 PWM Mode), ื›ืš ืฉืฆืจื™ืš ืœืงืคื•ืฅ ืงื“ื™ืžื” ื•ืื—ื•ืจื” ืœืื•ืจืš ื”ืžืกืžืš ื›ืœ ื”ื–ืžืŸ.

ืœ-PWM ื‘-STM8 ื™ืฉ ื™ืชืจื•ืŸ ื—ืฉื•ื‘ ืขืœ ืคื ื™ PWM ื‘-Atmega:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
Boundary Aligned PWM
ืชืฆื•ืจืช ื—ืฉื‘ื•ืŸ ืžืœืžื˜ื” ืœืžืขืœื”
ืกืคื™ืจื” ืžืœืžื˜ื” ืœืžืขืœื” ืคืขื™ืœื” ืื ืกื™ื‘ื™ืช ื”-DIR ื‘ืื•ื’ืจ TIM_CR1 ืžื ื•ืงื”
ื“ื•ื’ืžื”
ื”ื“ื•ื’ืžื” ืžืฉืชืžืฉืช ื‘ืžืฆื‘ PWM ื”ืจืืฉื•ืŸ. ืื•ืช ื”ื”ืชื™ื™ื—ืกื•ืช PWM OCiREF ื ืฉืžืจ ื’ื‘ื•ื” ื›ืœ ืขื•ื“ TIM1_CNT < TIM1_CCRi. ืื—ืจืช ื–ื” ื“ื•ืจืฉ ืจืžื” ื ืžื•ื›ื”. ืื ืขืจืš ื”ื”ืฉื•ื•ืื” ื‘ืื•ื’ืจ TIM1_CCRi ื’ื“ื•ืœ ืžืขืจืš ื”ื˜ืขื™ื ื” ื”ืื•ื˜ื•ืžื˜ื™ืช (ืื•ื’ืจ TIM1_ARR), ื”ืื•ืช OCiREF ืžื•ื—ื–ืง ืขืœ 1. ืื ืขืจืš ื”ื”ืฉื•ื•ืื” ื”ื•ื 0, OCiREF ื ืฉืžืจ ื‘ืืคืก....

ื˜ื™ื™ืžืจ STM8 ื‘ืžื”ืœืš ืขื“ื›ื•ืŸ ืื™ืจื•ืข ื‘ื•ื“ืงื™ื ืงื•ื“ื ืœื”ืฉื•ื•ืช ืขืจืš, ื•ืจืง ืื– ืžื™ื™ืฆืจ ืื•ืช ื”ืชื™ื™ื—ืกื•ืช. ื”ื˜ื™ื™ืžืจ ืฉืœ Atmega ืžืชื‘ืจื’ ืชื—ื™ืœื” ื•ืื– ืžืฉื•ื•ื”, ื•ื›ืชื•ืฆืื” ืžื›ืš compare value == 0 ื”ืคืœื˜ ื”ื•ื ืžื—ื˜, ืฉื—ื™ื™ื‘ื™ื ืœื”ืชืžื•ื“ื“ ืื™ืชื” ืื™ื›ืฉื”ื• (ืœื“ื•ื’ืžื”, ืขืœ ื™ื“ื™ ื”ื™ืคื•ืš ืชื•ื›ื ื™ืชื™ ืฉืœ ื”ื”ื™ื’ื™ื•ืŸ).

ืื– ืžื” ืื ื—ื ื• ืจื•ืฆื™ื ืœืขืฉื•ืช: 8 ืกื™ื‘ื™ื•ืช PWM (AR == 255), ืกืคื™ืจื” ืžืœืžื˜ื” ืœืžืขืœื”, ื™ื™ืฉื•ืจ ืœืื•ืจืš ื”ื’ื‘ื•ืœ. ืžื›ื™ื•ื•ืŸ ืฉื”ื ื•ืจื•ืช ืžื—ื•ื‘ืจื•ืช ืœืฉื‘ื‘ ื‘ืืžืฆืขื•ืช ืงืชื•ื“ื•ืช, ื”-PWM ืืžื•ืจ ืœื”ื•ืฆื™ื 0 (LED ื“ื•ืœืง) ืขื“ ืœื”ืฉื•ื•ืช ืขืจืš ื•-1 ืื—ืจื™.

ื›ื‘ืจ ืงืจืื ื• ืขืœ ื›ืžื” ืžืฆื‘ PWM, ืื– ืื ื• ืžื•ืฆืื™ื ืืช ื”ืื•ื’ืจ ื”ื ื“ืจืฉ ืฉืœ ื”ื˜ื™ื™ืžืจ ื”ืฉื ื™ ืขืœ ื™ื“ื™ ื—ื™ืคื•ืฉ ื‘ืžื“ืจื™ืš ื”ืขื–ืจ ืฉืœ ื”ื‘ื™ื˜ื•ื™ ื”ื–ื” (18.6.8 - TIMx_CCMR1):

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
110: ืžืฆื‘ PWM ืจืืฉื•ืŸ - ื›ืืฉืจ ืกื•ืคืจื™ื ืžืœืžื˜ื” ืœืžืขืœื”, ื”ืขืจื•ืฅ ื”ืจืืฉื•ืŸ ืคืขื™ืœ ื‘ืขื•ื“ TIMx_CNT < TIMx_CCR1. ืื—ืจืช, ื”ืขืจื•ืฅ ื”ืจืืฉื•ืŸ ืื™ื ื• ืคืขื™ืœ. [ื‘ื”ืžืฉืš ื‘ืžืกืžืš ื™ืฉ ื”ืขืชืง-ื”ื“ื‘ืง ืฉื’ื•ื™ ืžื˜ื™ื™ืžืจ 1] 111: ืžืฆื‘ PWM ืฉื ื™ โ€“ ื›ืฉืกื•ืคืจื™ื ืžืœืžื˜ื” ืœืžืขืœื”, ื”ืขืจื•ืฅ ื”ืจืืฉื•ืŸ ืื™ื ื• ืคืขื™ืœ ื‘ืขื•ื“ TIMx_CNT < TIMx_CCR1. ืื—ืจืช, ื”ืขืจื•ืฅ ื”ืจืืฉื•ืŸ ืคืขื™ืœ.

ืžื›ื™ื•ื•ืŸ ืฉื”ื ื•ืจื™ื•ืช ืžื—ื•ื‘ืจื•ืช ืœ-MK ื‘ืืžืฆืขื•ืช ืงืชื•ื“ื•ืช, ื”ืžืฆื‘ ื”ืฉื ื™ ืžืชืื™ื ืœื ื• (ื’ื ื”ืจืืฉื•ืŸ, ืื‘ืœ ืื ื—ื ื• ืœื ื™ื•ื“ืขื™ื ืืช ื–ื” ืขื“ื™ื™ืŸ).

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
Bit 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 ืžื•ืจื›ื‘ ืžืฉื ื™ ืื•ื’ืจื™ื ืฉืœ ืฉืžื•ื ื” ืกื™ื‘ื™ื•ืช, ื”ื›ืœ ืคืฉื•ื˜:

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

TIM2_ARRH = 0;
TIM2_ARRL = 255;

ื”ื˜ื™ื™ืžืจ ื”ืฉื ื™ ื™ื›ื•ืœ ืœืกืคื•ืจ ืจืง ืžืœืžื˜ื” ืœืžืขืœื”, ื™ื™ืฉื•ืจ ืœืื•ืจืš ื”ื’ื‘ื•ืœ, ืื™ืŸ ืฆื•ืจืš ืœืฉื ื•ืช ื“ื‘ืจ. ื‘ื•ื ื ื’ื“ื™ืจ ืืช ืžื—ืœืง ื”ืชื“ืจื™ื, ืœืžืฉืœ, ืœ-256. ืขื‘ื•ืจ ื”ื˜ื™ื™ืžืจ ื”ืฉื ื™, ื”ืžื—ืœืง ืžื•ื’ื“ืจ ื‘ืื•ื’ืจ TIM2_PSCR ื•ื”ื•ื ื—ื–ืง ืฉืœ ืฉืชื™ื™ื:

#define TIM2_PSCR  *(volatile uint8_t *)0x00530E

TIM2_PSCR = 8;

ื›ืœ ืžื” ืฉื ื•ืชืจ ื”ื•ื ืœื”ืคืขื™ืœ ืืช ื”ืžืกืงื ื•ืช ื•ืืช ื”ื˜ื™ื™ืžืจ ื”ืฉื ื™ ืขืฆืžื•. ื”ื‘ืขื™ื” ื”ืจืืฉื•ื ื” ื ืคืชืจืช ืขืœ ื™ื“ื™ ืื•ื’ืจื™ื ืœื›ื™ื“ / ื”ืฉื•ื•ืื” ืืคืฉืจ: ื™ืฉื ื ืฉื ื™ื™ื, ืฉืœื•ืฉื” ืขืจื•ืฆื™ื ืžืคื•ื–ืจื™ื ืขืœื™ื”ื ื‘ืฆื•ืจื” ืืกื™ืžื˜ืจื™ืช. ื›ืืŸ ื ื•ื›ืœ ื’ื ืœืœืžื•ื“ ืฉืืคืฉืจ ืœืฉื ื•ืช ืืช ื”ืงื•ื˜ื‘ื™ื•ืช ืฉืœ ื”ืื•ืช, ื›ืœื•ืžืจ. ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ื ื™ืชืŸ ื”ื™ื” ืœื”ืฉืชืžืฉ ื‘ืžืฆื‘ PWM 1. ืื ื• ื›ื•ืชื‘ื™ื:

#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: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8

#define TIM2_CR1   *(volatile uint8_t *)0x005300

TIM2_CR1 |= 1;

ื‘ื•ืื• ื ื›ืชื•ื‘ ืื ืœื•ื’ื™ ืคืฉื•ื˜ ืฉืœ AnalogWrite(), ืฉื™ืขื‘ื™ืจ ืืช ื”ืขืจื›ื™ื ื”ืืžื™ืชื™ื™ื ืœื˜ื™ื™ืžืจ ืœืฆื•ืจืš ื”ืฉื•ื•ืื”. ื”ืจืฉืžื™ื ื ืงืจืื™ื ื‘ืื•ืคืŸ ืฆืคื•ื™ ืœื›ื™ื“ืช/ื”ืฉื•ื•ืื” ืฉืœ ืื•ื’ืจื™ื, ื™ืฉื ื ืฉื ื™ื™ื ืžื”ื ืขื‘ื•ืจ ื›ืœ ืขืจื•ืฅ: 8 ืกื™ื‘ื™ื•ืช ืžืกื“ืจ ื ืžื•ืš ื‘- TIM2_CCRxL ื•ื”- ืžืกื“ืจ ื’ื‘ื•ื” ื‘- TIM2_CCRxH. ืžื›ื™ื•ื•ืŸ ืฉื™ืฆืจื ื• PWM ืฉืœ 8 ืกื™ื‘ื™ื•ืช, ืžืกืคื™ืง ืœื›ืชื•ื‘ ืจืง ืืช ื”ื‘ื™ื˜ื™ื ื”ืคื—ื•ืช ืžืฉืžืขื•ืชื™ื™ื:

#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;
}

ื”ืงื•ืจื ื”ืงืฉื•ื‘ ื™ืฉื™ื ืœื‘ ืฉื™ืฉ ืœื ื• PWM ืžืขื˜ ืคื’ื•ื, ืฉืื™ื ื• ืžืกื•ื’ืœ ืœื™ื™ืฆืจ 100% ืžื™ืœื•ื™ (ื‘ืขืจืš ืžืจื‘ื™ ืฉืœ 255, ื”ืื•ืช ืžืชื”ืคืš ืœืžื—ื–ื•ืจ ื˜ื™ื™ืžืจ ืื—ื“). ืขื‘ื•ืจ ื ื•ืจื™ื•ืช ื–ื” ืœื ืžืฉื ื”, ื•ื”ืงื•ืจื ื”ืงืฉื•ื‘ ื›ื‘ืจ ื™ื›ื•ืœ ืœื ื—ืฉ ืื™ืš ืœืชืงืŸ ืืช ื–ื”.

PWM ื‘ื˜ื™ื™ืžืจ ื”ืฉื ื™ ืขื•ื‘ื“, ื‘ื•ืื• ื ืขื‘ื•ืจ ืœืจืืฉื•ืŸ.

ืœื˜ื™ื™ืžืจ ื”ืจืืฉื•ืŸ ื™ืฉ ื‘ื“ื™ื•ืง ืื•ืชื ืกื™ื‘ื™ื•ืช ื‘ืื•ืชื ืจื’ื™ืกื˜ืจื™ื (ืจืง ืฉื”ื‘ื™ื˜ื™ื ื”ืืœื” ืฉื ืฉืืจื• "ืฉืžื•ืจื™ื" ื‘ื˜ื™ื™ืžืจ ื”ืฉื ื™ ืžืฉืžืฉื™ื ื‘ืื•ืคืŸ ืคืขื™ืœ ื‘-16 ืœื›ืœ ืžื™ื ื™ ื“ื‘ืจื™ื ืžืชืงื“ืžื™ื). ืœื›ืŸ, ืžืกืคื™ืง ืœืžืฆื•ื ืืช ื”ื›ืชื•ื‘ื•ืช ืฉืœ ืื•ืชื ืื•ื’ืจื™ื ื‘ื’ื™ืœื™ื•ืŸ ื”ื ืชื•ื ื™ื ื•ืœื”ืขืชื™ืง ืืช ื”ืงื•ื“. ื•ื‘ื›ืŸ, ืฉื ื” ืืช ื”ืขืจืš ืฉืœ ืžื—ืœืง ื”ืชื“ืจื™ื, ื›ื™... ื”ื˜ื™ื™ืžืจ ื”ืจืืฉื•ืŸ ืจื•ืฆื” ืœืงื‘ืœ ืœื ื›ื•ื— ืฉืœ ืฉืชื™ื™ื, ืืœื ืขืจืš ืžื“ื•ื™ืง ืฉืœ XNUMX ืกื™ื‘ื™ื•ืช ื‘ืฉื ื™ ืื•ื’ืจื™ื Prescaler High ะธ ื ืžื•ืš. ืื ื—ื ื• ืขื•ืฉื™ื ื”ื›ืœ ื•... ื”ื˜ื™ื™ืžืจ ื”ืจืืฉื•ืŸ ืœื ืขื•ื‘ื“. ืžื” ื”ื‘ืขื™ื”?

ื ื™ืชืŸ ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ืจืง โ€‹โ€‹ืขืœ ื™ื“ื™ ืขื™ื•ืŸ ื‘ื›ืœ ื”ืกืขื™ืฃ ืขืœ ืื•ื’ืจื™ ื”ื‘ืงืจื” ืฉืœ ื˜ื™ื™ืžืจ 1, ืฉื ืื ื• ืžื—ืคืฉื™ื ืืช ื–ื” ืฉืื™ืŸ ืœื˜ื™ื™ืžืจ ื”ืฉื ื™. ื™ื”ื™ื” 17.7.30 ืจื™ืฉื•ื ื”ืคืกืงื” (TIM1_BKR), ืื™ืคื” ื™ืฉ ืืช ื”ืงื˜ืข ื”ื–ื”:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ืืคืฉืจ ืคืœื˜ ืจืืฉื™

#define TIM1_BKR   *(volatile uint8_t *)0x00526D

TIM1_BKR = (1<<7);

ื–ื” ื”ื›ืœ ื‘ื˜ื•ื— ืขื›ืฉื™ื•, ื”ืงื•ื“ ืฉื.

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8

STM8 Multiplex

ืจื™ื‘ื•ื™ ื‘-STM8

ื”ืžื™ื ื™-ืคืจื•ื™ืงื˜ ื”ืฉืœื™ืฉื™ ื”ื•ื ืœื—ื‘ืจ ืฉืžื•ื ื” ื ื•ืจื™ื•ืช RGB ืœื˜ื™ื™ืžืจ ื”ืฉื ื™ ื‘ืžืฆื‘ PWM ื•ืœื’ืจื•ื ืœื”ื ืœื”ืจืื•ืช ืฆื‘ืขื™ื ืฉื•ื ื™ื. ื”ื•ื ืžื‘ื•ืกืก ืขืœ ื”ืจืขื™ื•ืŸ ืฉืœ ืจื™ื‘ื•ื™ LED, ื›ืœื•ืžืจ ืฉืื ืžื“ืœื™ืงื™ื ื•ืžื›ื‘ื™ื ื ื•ืจื•ืช ืœื“ ืžืื•ื“ ืžืื•ื“ ืžื”ืจ, ื™ื™ืจืื” ืœื ื• ืฉื”ื ื›ืœ ื”ื–ืžืŸ ื“ื•ืœืงื™ื (ื”ืชืžื“ื” ื‘ืจืื™ื™ื”, ืื™ื ืจืฆื™ื” ืฉืœ ืชืคื™ืกื” ื—ื–ื•ืชื™ืช). ืคืขื ืขืฉื™ืชื™ ืžืฉื”ื• ื›ื–ื” ื‘- Arduino.

ืืœื’ื•ืจื™ืชื ื”ืขื‘ื•ื“ื” ื ืจืื” ื›ืš:

  • ื—ื™ื‘ืจ ืืช ื”ืื ื•ื“ื” ืฉืœ LED RGB ื”ืจืืฉื•ืŸ;
  • ื”ื“ืœื™ืง ืื•ืชื•, ืฉื•ืœื— ืืช ื”ืื•ืชื•ืช ื”ื“ืจื•ืฉื™ื ืœืงืชื•ื“ื•ืช;
  • ื”ืžืชื™ืŸ ืขื“ ืกื•ืฃ ืžื—ื–ื•ืจ ื”-PWM;
  • ื—ื™ื‘ืจ ืืช ื”ืื ื•ื“ื” ืฉืœ LED RGB ื”ืฉื ื™;
  • ืชื“ืœื™ืง ืืช ื–ื”...

ื•ื‘ื›ืŸ ื•ื›ื•'. ื›ืžื•ื‘ืŸ, ืœืชืคืขื•ืœ ื™ืคื” ื ื“ืจืฉ ืฉื”ืื ื•ื“ื” ืžื—ื•ื‘ืจืช ื•ื”-LED "ื ื“ืœืงืช" ื‘ื•-ื–ืžื ื™ืช. ื˜ื•ื‘, ืื• ื›ืžืขื˜. ื‘ื›ืœ ืžืงืจื”, ืขืœื™ื ื• ืœื›ืชื•ื‘ ืงื•ื“ ืฉื™ื•ืฆื™ื ืขืจื›ื™ื ื‘ืฉืœื•ืฉื” ืขืจื•ืฆื™ื ืฉืœ ื”ื˜ื™ื™ืžืจ ื”ืฉื ื™, ื™ืฉื ื” ืื•ืชื ื›ืฉืžื’ื™ืขื™ื ืœ-UEV, ื•ื‘ืžืงื‘ื™ืœ ืœืฉื ื•ืช ืืช ื”-RGB LED ื”ืคืขื™ืœื” ื›ืขืช.

ืžื›ื™ื•ื•ืŸ ืฉื”ืžื™ืชื•ื’ LED ื”ื•ื ืื•ื˜ื•ืžื˜ื™, ืขืœื™ื ื• ืœื™ืฆื•ืจ "ื–ื™ื›ืจื•ืŸ ื•ื™ื“ืื•" ืฉืžืžื ื• ื™ืงื‘ืœ ืžื˜ืคืœ ื”ื”ืคืจืขื•ืช ื ืชื•ื ื™ื. ื–ื”ื• ืžืขืจืš ืคืฉื•ื˜:

uint8_t colors[8][3];

ื›ื“ื™ ืœืฉื ื•ืช ืืช ื”ืฆื‘ืข ืฉืœ LED ืกืคืฆื™ืคื™, ื–ื” ื™ื”ื™ื” ืžืกืคื™ืง ื›ื“ื™ ืœื›ืชื•ื‘ ืืช ื”ืขืจื›ื™ื ื”ื ื“ืจืฉื™ื ืœืžืขืจืš ื–ื”. ื•ื”ืžืฉืชื ื” ื™ื”ื™ื” ืื—ืจืื™ ืขืœ ืžืกืคืจ ื”ื ื•ืจื™ืช ื”ืคืขื™ืœื”

uint8_t cnt;

Demux

ืœืฆื•ืจืš ืจื™ื‘ื•ื™ ืชืงื™ืŸ, ืื ื• ื–ืงื•ืงื™ื, ื‘ืื•ืคืŸ ืžื•ื–ืจ, ืœ-CD74HC238 demultiplexer. Demultiplexer - ืฉื‘ื‘ ื”ืžื™ื™ืฉื ืืช ื”ืžืคืขื™ืœ ื‘ื—ื•ืžืจื” <<. ื“ืจืš ืฉืœื•ืฉื” ืคื™ื ื™ ืงืœื˜ (ืกื™ื‘ื™ื•ืช 0, 1 ื•-2) ืื ื• ืžืื›ื™ืœื™ื ืื•ืชื• ื‘ืžืกืคืจ X ืฉืœ ืฉืœื•ืฉ ืกื™ื‘ื™ื•ืช, ื•ื‘ืชื’ื•ื‘ื” ื”ื•ื ืžืคืขื™ืœ ืืช ืžืกืคืจ ื”ืคืœื˜ (1<<X). ืฉืืจ ื”ื›ื ื™ืกื•ืช ืฉืœ ื”ืฉื‘ื‘ ืžืฉืžืฉื•ืช ืœื”ื’ื“ืœืช ื”ืขื™ืฆื•ื‘ ื›ื•ืœื•. ืื ื—ื ื• ืฆืจื™ื›ื™ื ืืช ื”ืฉื‘ื‘ ื”ื–ื” ืœื ืจืง ื›ื“ื™ ืœืฆืžืฆื ืืช ืžืกืคืจ ื”ืคื™ื ื™ื ื”ืชืคื•ืกื™ื ืฉืœ ื”ืžื™ืงืจื•-ื‘ืงืจ, ืืœื ื’ื ืœื‘ื˜ื™ื—ื•ืช - ื›ื“ื™ ืœื ืœื”ื“ืœื™ืง ื‘ื˜ืขื•ืช ื™ื•ืชืจ ื ื•ืจื™ื•ืช ืžื”ืืคืฉืจื™ื•ืช ื•ืœื ืœืฉืจื•ืฃ ืืช ื”-MK. ื”ืฉื‘ื‘ ืขื•ืœื” ืื’ื•ืจื” ื•ื™ืฉ ืœืฉืžื•ืจ ืื•ืชื• ืชืžื™ื“ ื‘ืืจื•ืŸ ื”ืชืจื•ืคื•ืช ื”ื‘ื™ืชื™.

ื”-CD74HC238 ืฉืœื ื• ื™ื”ื™ื” ืื—ืจืื™ ืขืœ ืืกืคืงืช ื”ืžืชื— ืœืื ื•ื“ื” ืฉืœ ื”-LED ื”ืจืฆื•ื™. ื‘ืจื™ื‘ื•ื™ ืžืœื, ื”ื•ื ื™ืกืคืง ืžืชื— ืœืขืžื•ื“ ื“ืจืš P-MOSFET, ืื‘ืœ ื‘ื”ื“ื’ืžื” ื–ื• ื–ื” ืืคืฉืจื™ ื™ืฉื™ืจื•ืช, ื›ื™ ื”ื•ื ืฉื•ืื‘ 20 mA, ืœืคื™ ื“ื™ืจื•ื’ ืžืจื‘ื™ ืžื•ื—ืœื˜ ื‘ื’ื™ืœื™ื•ืŸ ื”ื ืชื•ื ื™ื. ืž ื’ื™ืœื™ื•ืŸ ื ืชื•ื ื™ื CD74HC238 ืื ื—ื ื• ืฆืจื™ื›ื™ื pinouts ื•ืืช ื“ืฃ ื”ืฆ'ื™ื˜ ื”ื–ื”:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
H = ืจืžืช ืžืชื— ื’ื‘ื•ื”, L = ืจืžืช ืžืชื— ื ืžื•ื›ื”, X - ืœื ืื›ืคืช

ืื ื• ืžื—ื‘ืจื™ื ืืช E2 ื•-E1 ืœืื“ืžื”, E3, A0, A1 ื•-A3 ืœืคื™ื ื™ื PD5, PC3, PC4 ื•-PC5 ืฉืœ STM8. ืžื›ื™ื•ื•ืŸ ืฉื”ื˜ื‘ืœื” ืฉืœืžืขืœื” ืžื›ื™ืœื” ืจืžื•ืช ื ืžื•ื›ื•ืช ื•ื’ื‘ื•ื”ื•ืช, ืื ื• ืžื’ื“ื™ืจื™ื ืืช ื”ืคื™ื ื™ื ื”ืœืœื• ื›ืกื™ื›ื•ืช ืžืฉื™ื›ื”.

PWM

PWM ื‘ื˜ื™ื™ืžืจ ื”ืฉื ื™ ืžื•ื’ื“ืจ ื‘ืื•ืชื• ืื•ืคืŸ ื›ืžื• ื‘ืกื™ืคื•ืจ ื”ืงื•ื“ื, ืขื ืฉื ื™ ื”ื‘ื“ืœื™ื:

ืจืืฉื™ืช, ืขืœื™ื ื• ืœื”ืคืขื™ืœ ืืช ื”ื”ืคืจืขื” ืขื“ื›ืŸ ืืช ื”ืื™ืจื•ืข (UEV) ืฉืชืงืจื ืœืคื•ื ืงืฆื™ื” ืฉืชื—ืœื™ืฃ ืืช ื”-LED ื”ืคืขื™ืœื”. ื–ื” ื ืขืฉื” ืขืœ ื™ื“ื™ ืฉื™ื ื•ื™ ื”ื‘ื™ื˜ Update Interrupt Enable ื‘ืคื ืงืก ืขื ืฉื ืื•ืžืจ

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
ื”ืจืฉืžื” ืœืืคืฉืจ ื”ืคืกืงื”

#define TIM2_IER   *(volatile uint8_t *)0x005303

//enable interrupt
TIM2_IER = 1;

ื”ื”ื‘ื“ืœ ื”ืฉื ื™ ืงืฉื•ืจ ืœืชื•ืคืขืช ื”ืจื™ื‘ื•ื™, ื›ื’ื•ืŸ ghosting - ื–ื•ื”ืจ ื˜ืคื™ืœื™ ืฉืœ ื“ื™ื•ื“ื•ืช. ื‘ืžืงืจื” ืฉืœื ื•, ื–ื” ืขืฉื•ื™ ืœื”ื•ืคื™ืข ื‘ื’ืœืœ ื”ืขื•ื‘ื“ื” ืฉื”ื˜ื™ื™ืžืจ, ืœืื—ืจ ืฉื’ืจื ืœื”ืคืจืขื” ื‘-UEV, ืžืžืฉื™ืš ืœืชืงืชืง, ื•ืœืžื˜ืคืœ ื”ื”ืคืจืขื•ืช ืื™ืŸ ื–ืžืŸ ืœื”ื—ืœื™ืฃ ืืช ื”ื ื•ืจื™ืช ืœืคื ื™ ืฉื”ื˜ื™ื™ืžืจ ื™ืชื—ื™ืœ ืœื›ืชื•ื‘ ืžืฉื”ื• ืœืคื™ื ื™ื. ื›ื“ื™ ืœื”ื™ืœื—ื ื‘ื–ื”, ืชืฆื˜ืจืš ืœื”ืคื•ืš ืืช ื”ื”ื™ื’ื™ื•ืŸ (0 = ื‘ื”ื™ืจื•ืช ืžืงืกื™ืžืœื™ืช, 255 = ืฉื•ื ื“ื‘ืจ ืœื ืžื•ืืจ) ื•ืœื”ื™ืžื ืข ืžืขืจื›ื™ ืžื—ื–ื•ืจ ืขื‘ื•ื“ื” ืงื™ืฆื•ื ื™ื™ื. ื”ึธื”ึตืŸ. ื•ื“ื ืฉืื—ืจื™ UEV ื”ื ื•ืจื™ื•ืช ื™ื›ื‘ื• ืœื—ืœื•ื˜ื™ืŸ ืœืžืฉืš ืžื—ื–ื•ืจ PWM ืื—ื“.

ืฉื™ื ื•ื™ ืงื•ื˜ื‘ื™ื•ืช:

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

ื”ื™ืžื ืข ืžื”ื’ื“ืจืช r, g ื•-b ืœ-255 ื•ื–ื›ื•ืจ ืœื”ืคื•ืš ืื•ืชื ื‘ืขืช ื”ืฉื™ืžื•ืฉ ื‘ื”ื.

ืžืคืจื™ืข

ื”ืžื”ื•ืช ืฉืœ ืคืกื™ืงื” ื”ื™ื ืฉื‘ื ืกื™ื‘ื•ืช ืžืกื•ื™ืžื•ืช ื”ืฉื‘ื‘ ืžืคืกื™ืง ืœื”ืคืขื™ืœ ืืช ื”ืชื•ื›ื ื™ืช ื”ืจืืฉื™ืช ื•ืงื•ืจื ืœืคื•ื ืงืฆื™ื” ื—ื™ืฆื•ื ื™ืช ื›ืœืฉื”ื™. ื”ืคืจืขื•ืช ืžืชืจื—ืฉื•ืช ืขืงื‘ ื”ืฉืคืขื•ืช ื—ื™ืฆื•ื ื™ื•ืช ืื• ืคื ื™ืžื™ื•ืช, ื›ื•ืœืœ ื”ื˜ื™ื™ืžืจ.

ื›ืืฉืจ ื™ืฆืจื ื• ืคืจื•ื™ืงื˜ ืœืจืืฉื•ื ื” ื‘-ST Visual Develop, ื‘ื ื•ืกืฃ ืœ main.c ืงื™ื‘ืœื ื• ื—ืœื•ืŸ ืขื ืงื•ื‘ืฅ ืžืกืชื•ืจื™ stm8_interrupt_vector.c, ื ื›ืœืœ ืื•ื˜ื•ืžื˜ื™ืช ื‘ืคืจื•ื™ืงื˜. ื‘ืงื•ื‘ืฅ ื–ื”, ืžื•ืงืฆื™ืช ืคื•ื ืงืฆื™ื” ืœื›ืœ ืคืกื™ืงื” NonHandledInterrupt. ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืงืฉื•ืจ ืืช ื”ืคื•ื ืงืฆื™ื” ืฉืœื ื• ืœืคืกื™ืงื” ื”ืจืฆื•ื™ื”.

ื‘ื’ืœื™ื•ืŸ ื”ื ืชื•ื ื™ื ื™ืฉ ื˜ื‘ืœื” ืฉืœ ื•ืงื˜ื•ืจื™ ืคืกื™ืงื”, ืฉื‘ื” ืื ื• ืžื•ืฆืื™ื ืืช ืืœื” ืฉืื ื• ืฆืจื™ื›ื™ื:

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8
13 ืขื“ื›ื•ืŸ/ื”ืฆืคื” ืฉืœ TIM2
14 ืœื›ื™ื“ืช/ื”ืฉื•ื•ืื” ืฉืœ TIM2

ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืฉื ื•ืช ืืช ื”-LED ื‘-UEV, ืื– ืื ื—ื ื• ืฆืจื™ื›ื™ื ื”ืคืจืขื” ืžืก' 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;
}

ื›ืœ ืžื” ืฉื ื•ืชืจ ื”ื•ื ืœืืคืฉืจ ื”ืคืจืขื•ืช. ื–ื” ื ืขืฉื” ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” assembler rim - ืชืฆื˜ืจืš ืœื—ืคืฉ ืื•ืชื• ืžื“ืจื™ืš ืชื›ื ื•ืช:

//enable interrupts
_asm("rim");

ืคืงื•ื“ืช ืืกืžื‘ืœืจ ื ื•ืกืคืช ื”ื™ื sim - ืžื›ื‘ื” ืืช ื”ื”ืคืจืขื•ืช. ื™ืฉ ืœื›ื‘ื•ืช ืื•ืชื ื‘ื–ืžืŸ ืฉืขืจื›ื™ื ื—ื“ืฉื™ื ื ื›ืชื‘ื™ื ืœ"ื–ื™ื›ืจื•ืŸ ื”ื•ื•ื™ื“ืื•", ื›ืš ืฉื”ืคืจืขื” ืฉื ื’ืจืžื” ื‘ืจื’ืข ื”ืœื ื ื›ื•ืŸ ืœื ืชืงืœืงืœ ืืช ื”ืžืขืจืš.

ื›ืœ ื”ืงื•ื“ - ื‘-GitHub.

ืงืจื ืืช ื’ื™ืœื™ื•ื ื•ืช ื”ื ืชื•ื ื™ื 2: SPI ืขืœ STM32; PWM, ื˜ื™ื™ืžืจื™ื ื•ืคืกื™ืงื•ืช ื‘-STM8

ืื ืœืคื—ื•ืช ืžื™ืฉื”ื• ืžื•ืฆื ืืช ื”ืžืืžืจ ื”ื–ื” ืฉื™ืžื•ืฉื™, ืื– ืœื ื›ืชื‘ืชื™ ืื•ืชื• ืœืฉื•ื•ื. ืืฉืžื— ืœืงื‘ืœ ื”ืขืจื•ืช ื•ื”ืขืจื•ืช, ืืฉืชื“ืœ ืœืขื ื•ืช ืขืœ ื”ื›ืœ.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”