Π
ΠΠ΅Π½Π΅Ρ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ°ΠΌ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π»ΠΈΡΡΠΎΠ²ΠΈ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° Π΄Π° ΡΠ΅ΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈ, Π½ΠΎ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΈ Π·Π° ΠΌΠ½ΠΎΠ³Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, Π·Π°Π΄Π°ΡΠΈ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈΡΠ΅ STM32 (Blue Pill) ΠΈ STM8. Π‘ΠΈΡΠ΅ Π΄Π΅ΠΌΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΡΠ΅ ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈ Π½Π° ΠΌΠΎΠΈΡΠ΅ ΠΎΠΌΠΈΠ»Π΅Π½ΠΈ LED Π΄ΠΈΠΎΠ΄ΠΈ, ΡΠ΅ Π³ΠΈ Π·Π°ΠΏΠ°Π»ΠΈΠΌΠ΅ Π²ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠΎΠ»ΠΈΡΠΈΠ½ΠΈ, Π·Π° ΡΡΠΎ ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΡΠ΅ΠΊΠ°ΠΊΠ²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΈ.
Π’Π΅ΠΊΡΡΠΎΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΎΠ³ΡΠΎΠΌΠ΅Π½, ΠΏΠ° Π·Π° ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎΡΡ ΡΠ° ΠΏΡΠ°Π²Π°ΠΌ ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°ΡΠ°:
ΠΠ΄ΡΠ΅ΠΊΡΠ²Π°ΡΠ΅: ΠΠ΅ ΡΡΠΌ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ, Π½Π΅ ΡΠ΅ ΠΏΡΠ΅ΠΏΡΠ°Π²Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ°ΠΌ Π΄Π»Π°Π±ΠΎΠΊΠΈ ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ° ΠΎΠ΄ Π΅Π»Π΅ΠΊΡΡΠΎΠ½ΠΈΠΊΠ°ΡΠ°, ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π΅ Π½Π°ΠΌΠ΅Π½Π΅ΡΠ° Π·Π° Π°ΠΌΠ°ΡΠ΅ΡΠΈ ΠΊΠ°ΠΊΠΎ ΠΌΠ΅Π½Π΅. ΠΡΡΡΠ½ΠΎΡΡ, ΠΏΡΠ΅Π΄ Π΄Π²Π΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΡΠ΅ ΡΠΌΠ΅ΡΠ°Π² ΡΠ΅Π±Π΅ΡΠΈ Π·Π° ΡΠ΅Π»Π½Π° ΠΏΡΠ±Π»ΠΈΠΊΠ°. ΠΠ° ΠΌΠΈ ΠΊΠ°ΠΆΠ΅ΡΠ΅ Π½Π΅ΠΊΠΎΡ ΡΠΎΠ³Π°Ρ Π΄Π΅ΠΊΠ° Π»ΠΈΡΡΠΎΠ²ΠΈΡΠ΅ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° Π½Π΅ΠΏΠΎΠ·Π½Π°Ρ ΡΠΈΠΏ Π½Π΅ ΡΠ΅ ΡΡΡΠ°ΡΠ½ΠΈ Π·Π° ΡΠΈΡΠ°ΡΠ΅, Π½Π΅ΠΌΠ°ΡΠ΅ Π΄Π° ΠΏΠΎΡΡΠΎΡΠ°ΠΌ ΠΌΠ½ΠΎΠ³Ρ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° Π±Π°ΡΠ°ΠΌ Π½Π΅ΠΊΠΎΠΈ ΠΏΠ°ΡΡΠΈΡΠ° ΠΊΠΎΠ΄ Π½Π° ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΈ Π΄Π° ΠΈΠ·ΠΌΠΈΡΠ»ΡΠ²Π°ΠΌ ΠΏΠ°ΡΠ΅ΡΠΈΡΠΈ ΡΠΎ Π½ΠΎΠΆΠΈΡΠΈ ΠΈ ΡΠ΅Π»ΠΎΡΠ΅ΡΠΏ.
Π€ΠΎΠΊΡΡΠΎΡ Π½Π° ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° Π΅ Π½Π° Π»ΠΈΡΡΠΎΠ²ΠΈ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Π° Π½Π΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ, ΡΠ°ΠΊΠ° ΡΡΠΎ ΠΊΠΎΠ΄ΠΎΡ ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³Ρ ΡΡΠ΅Π΄Π΅Π½ ΠΈ ΡΠ΅ΡΡΠΎ ΡΠ΅ΡΠ΅Π½. Π‘Π°ΠΌΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈ, ΠΈΠ°ΠΊΠΎ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΈ Π·Π° ΠΏΡΠ²ΠΎ Π·Π°ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅ ΡΠΎ Π½ΠΎΠ²ΠΈΠΎΡ ΡΠΈΠΏ.
Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌ Π΄Π΅ΠΊΠ° ΠΌΠΎΡΠ°ΡΠ° ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π½Π΅ΠΊΠΎΠΌΡ Π²ΠΎ ΡΠ»ΠΈΡΠ½Π° ΡΠ°Π·Π° Π½Π° ΠΏΠΎΡΠΎΠΏΡΠ²Π°ΡΠ΅ Π²ΠΎ Ρ ΠΎΠ±ΠΈΡΠΎ.
STM32
16 LED Π΄ΠΈΠΎΠ΄ΠΈ ΡΠΎ DM634 ΠΈ SPI
ΠΠ°Π» ΠΏΡΠΎΠ΅ΠΊΡ ΠΊΠΎΡ ΠΊΠΎΡΠΈΡΡΠΈ Blue Pill (STM32F103C8T6) ΠΈ LED Π΄ΡΠ°ΡΠ²Π΅Ρ DM634. ΠΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π»ΠΈΡΡΠΎΠ²ΠΈ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΡΠ΅ Π³ΠΎ ΠΎΡΠΊΡΠΈΠ΅ΠΌΠ΅ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»ΠΎΡ, STM IO ΠΏΠΎΡΡΠΈΡΠ΅ ΠΈ ΡΠ΅ Π³ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ SPI.
DM634
Π’Π°ΡΠ²Π°Π½ΡΠΊΠΈ ΡΠΈΠΏ ΡΠΎ 16 16-Π±ΠΈΡΠ½ΠΈ PWM ΠΈΠ·Π»Π΅Π·ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π΅ Π²ΠΎ ΡΠΈΠ½ΡΠΈΡΠΈ. ΠΠΈΡΠΊΠΈΠΎΡ 12-Π±ΠΈΡΠ΅Π½ ΠΌΠΎΠ΄Π΅Π» Π΅ ΠΏΠΎΠ·Π½Π°Ρ ΠΎΠ΄ Π΄ΠΎΠΌΠ°ΡΠ΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ
ΠΠΈΠ΄Π΅ΡΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΠΎΡ Π΅ ΡΠ°ΡΠ²Π°Π½ΡΠΊΠΈ,
ΠΠ·Π²ΠΎΡΠΈ Π½Π° ΠΌΠΈΡΠ°Π»Π½ΠΈΠΊ ΡΠΎ Π΅Π΄Π½ΠΎΠ½Π°ΡΠΎΡΠ½Π° ΡΡΡΡΡΠ° (ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΎΠ΄Π²ΠΎΠ΄)
ΠΌΠΈΡΠ°Π»Π½ΠΈΠΊ / ΠΠ·Π»Π΅Π· ΡΠΎ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΎΠ΄Π²ΠΎΠ΄ β ΠΎΠ΄Π²ΠΎΠ΄; ΠΈΠ·Π²ΠΎΡ Π½Π° ΠΏΡΠΈΠ»ΠΈΠ²Π½Π° ΡΡΡΡΡΠ°; ΠΈΠ·Π»Π΅Π·ΠΎΡ Π΅ ΠΏΠΎΠ²ΡΠ·Π°Π½ ΡΠΎ Π·Π΅ΠΌΡΠ°ΡΠ° Π²ΠΎ Π°ΠΊΡΠΈΠ²Π½Π° ΡΠΎΡΡΠΎΡΠ±Π° - LED Π΄ΠΈΠΎΠ΄ΠΈΡΠ΅ ΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΎ Π²ΠΎΠ·Π°ΡΠΎΡ ΡΠΎ ΠΊΠ°ΡΠΎΠ΄ΠΈ. ΠΠ»Π΅ΠΊΡΡΠΈΡΠ½ΠΎ, ΠΎΠ²Π°, ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°, Π½Π΅ Π΅ βΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΎΠ΄Π²ΠΎΠ΄β (ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΎΠ΄Π²ΠΎΠ΄), Π½ΠΎ Π²ΠΎ Π»ΠΈΡΡΠΎΠ²ΠΈΡΠ΅ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ΡΡΠΎ ΡΠ΅ Π½Π°ΠΎΡΠ° ΠΎΠ²Π°Π° ΠΎΠ·Π½Π°ΠΊΠ° Π·Π° ΠΈΠ³Π»ΠΈΡΠΊΠΈ Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΎΠ΄Π²ΠΎΠ΄.
ΠΠ°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΈ ΠΎΡΠΏΠΎΡΠ½ΠΈΡΠΈ ΠΏΠΎΠΌΠ΅ΡΡ REXT ΠΈ GND Π·Π° ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΈΠ·Π»Π΅Π·Π½Π°ΡΠ° ΡΠ΅ΠΊΠΎΠ²Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ
ΠΠΎΠΌΠ΅ΡΡ ΠΏΠΈΠ½ΠΎΡ REXT ΠΈ Π·Π°Π·Π΅ΠΌΡΡΠ²Π°ΡΠ΅ΡΠΎ Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ΅Π½ ΠΎΡΠΏΠΎΡΠ½ΠΈΠΊ, ΠΊΠΎΡ Π³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΈΠΎΡ ΠΎΡΠΏΠΎΡ Π½Π° ΠΈΠ·Π»Π΅Π·ΠΈΡΠ΅, Π²ΠΈΠ΄Π΅ΡΠ΅ Π³ΠΎ Π³ΡΠ°ΡΠΈΠΊΠΎΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ° 9 ΠΎΠ΄ Π»ΠΈΡΡΠΎΡ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠΎ DM634, ΠΎΠ²ΠΎΡ ΠΎΡΠΏΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΠΈ ΡΠΎ ΡΠΎΡΡΠ²Π΅Ρ, ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΡΠΈ ΡΠ° Π²ΠΊΡΠΏΠ½Π°ΡΠ° ΠΎΡΠ²Π΅ΡΠ»Π΅Π½ΠΎΡΡ (Π³Π»ΠΎΠ±Π°Π»Π½Π° ΠΎΡΠ²Π΅ΡΠ»Π΅Π½ΠΎΡΡ); ΠΠ΅ΠΌΠ° Π΄Π° Π½Π°Π²Π»Π΅Π³ΡΠ²Π°ΠΌ Π²ΠΎ Π΄Π΅ΡΠ°Π»ΠΈ Π²ΠΎ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ°, ΡΡΠΊΠ° ΡΠ°ΠΌΠΎ ΡΠ΅ ΡΡΠ°Π²Π°ΠΌ ΠΎΡΠΏΠΎΡΠ½ΠΈΠΊ ΠΎΠ΄ 2.2 - 3 kOhm.
ΠΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°ΠΌΠ΅ ΡΠΈΠΏΠΎΡ, Π΄Π° Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΎΠΏΠΈΡΠΎΡ Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠΎΡ Π½Π° ΡΡΠ΅Π΄ΠΎΡ:
ΠΠ°, Π΅Π²Π΅ Π³ΠΎ, ΠΊΠΈΠ½Π΅ΡΠΊΠΈ Π°Π½Π³Π»ΠΈΡΠΊΠΈ Π²ΠΎ ΡΠ΅ΡΠ° ΡΠ²ΠΎΡΠ° ΡΠ»Π°Π²Π°. ΠΡΠ΅Π²Π΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΎΠ²Π° Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ Π°ΠΊΠΎ ΡΠ°ΠΊΠ°ΡΠ΅, Π½ΠΎ ΠΈΠΌΠ° ΠΈ Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½ - ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΠΊΠ°ΠΊΠΎ Π²ΡΡΠΊΠ°ΡΠ° ΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎ ΡΠ»ΠΈΡΠ½ΠΈΠΎΡ TLC5940 Π΅ ΠΎΠΏΠΈΡΠ°Π½Π° Π²ΠΎ Π»ΠΈΡΡΠΎΡ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ:
... Π‘Π°ΠΌΠΎ ΡΡΠΈ ΠΏΠΈΠ½Π° ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π·Π° Π²Π½Π΅ΡΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΡΡΠ΅Π΄ΠΎΡ. ΠΠΎΠ΄ΠΈΠ³Π½Π°ΡΠΈΠΎΡ ΡΠ°Π± Π½Π° ΡΠΈΠ³Π½Π°Π»ΠΎΡ SCLK Π³ΠΈ ΠΏΡΠ΅ΡΡΠ»Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΠΎΠ΄ SIN ΠΏΠΈΠ½ΠΎΡ Π²ΠΎ Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΈΠΎΡ ΡΠ΅Π³ΠΈΡΡΠ°Ρ. ΠΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ΅ Π²ΡΠΈΡΠ°Π°Ρ ΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΠΊΡΠ°ΡΠΎΠΊ Π²ΠΈΡΠΎΠΊ XLAT ΡΠΈΠ³Π½Π°Π» Π³ΠΈ ΠΏΡΠΈΠΊΠ»ΡΡΡΠ²Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΏΡΠ΅Π½Π΅ΡΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ. ΠΠ½Π°ΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ ΡΠ΅ ΠΏΠΎΡΡΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ ΠΎΠ΄ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΡΠΈΠ³Π½Π°Π»ΠΎΡ XLAT. Π‘ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΏΡΠ²ΠΎ ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π°Π°Ρ Π½Π°ΡΠ·Π½Π°ΡΠ°ΡΠ½ΠΈΠΎΡ Π±ΠΈΡ.
ΠΠ°ΡΠ°Ρ β Π±ΡΠ°Π²Π°ΡΠ°/Π±ΡΠ°Π²Π°ΡΠ°/Π±ΡΠ°Π²Π°ΡΠ°.
ΠΠΎΠ΄ΠΈΠ³Π½ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡ β ΠΏΡΠ΅Π΄Π½ΠΈΠΎΡ ΡΠ°Π± Π½Π° ΠΏΡΠ»ΡΠΎΡ
MSB ΠΏΡΠ²ΠΎ β Π½Π°ΡΠ·Π½Π°ΡΠ°ΡΠ½ΠΈΠΎΡ (Π½Π°ΡΠ»Π΅Π²ΠΈΠΎΡ) Π±ΠΈΡ Π½Π°ΠΏΡΠ΅Π΄.
Π·Π° ΡΠ°ΠΊΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ β ΠΏΡΠ΅Π½ΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ°Π»Π½ΠΎ (Π±ΠΈΡ ΠΏΠΎ Π±ΠΈΡ).
ΠΠ±ΠΎΡ Π±ΡΠ°Π²Π°ΡΠ° ΡΠ΅ΡΡΠΎ ΡΠ΅ Π½Π°ΠΎΡΠ° Π²ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° Π·Π° ΡΠΈΠΏΠΎΠ²ΠΈ ΠΈ ΡΠ΅ ΠΏΡΠ΅Π²Π΅Π΄ΡΠ²Π° Π½Π° ΡΠ°Π·Π½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ, ΠΏΠ° Π·Π°ΡΠ°Π΄ΠΈ ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅ ΡΠ΅ ΡΠΈ Π΄ΠΎΠ·Π²ΠΎΠ»Π°ΠΌ
ΠΌΠ°Π»Π° Π΅Π΄ΡΠΊΠ°ΡΠΈΠ²Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°LED Π΄ΡΠ°ΡΠ²Π΅ΡΠΎΡ Π²ΠΎ ΡΡΡΡΠΈΠ½Π° Π΅ ΡΠ΅Π³ΠΈΡΡΠ΅Ρ Π·Π° ΡΠΌΠ΅Π½Π°. "Shift" (ΠΏΡΠ΅ΡΡΠ»Π°Ρ) Π²ΠΎ ΠΈΠΌΠ΅ΡΠΎ - Π±ΠΈΡΠΎΠ²ΠΈ Π΄Π²ΠΈΠΆΠ΅ΡΠ΅ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π²ΠΎ ΡΡΠ΅Π΄ΠΎΡ: ΡΠ΅ΠΊΠΎΡ Π½ΠΎΠ² Π±ΠΈΡ Π²Π½Π΅ΡΠ΅Π½ Π²Π½Π°ΡΡΠ΅ Π³ΠΎ ΡΡΡΠΊΠ° ΡΠ΅Π»ΠΈΠΎΡ ΡΠΈΠ½ΡΠΈΡ Π½Π°ΠΏΡΠ΅Π΄ ΠΏΡΠ΅Π΄ Π½Π΅Π³ΠΎ. ΠΠΈΠ΄Π΅ΡΡΠΈ Π½ΠΈΠΊΠΎΡ Π½Π΅ ΡΠ°ΠΊΠ° Π΄Π° Π½Π°Π±ΡΡΠ΄ΡΠ²Π° Ρ Π°ΠΎΡΠΈΡΠ½ΠΎ ΡΡΠ΅ΠΏΠΊΠ°ΡΠ΅ Π½Π° LED Π΄ΠΈΠΎΠ΄ΠΈΡΠ΅ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠΌΠ΅Π½Π°ΡΠ°, ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΡΠ΅ ΠΎΠ΄Π²ΠΈΠ²Π° Π²ΠΎ ΡΠ°ΠΌΠΏΠΎΠ½ ΡΠ΅Π³ΠΈΡΡΡΠΈ ΠΎΠ΄Π΄Π΅Π»Π΅Π½ΠΈ ΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ ΡΠΎ Π°ΠΌΠΎΡΡΠΈΠ·Π΅Ρ (Π±ΡΠ°Π²Π°ΡΠ°) Π΅ Π΅Π΄Π΅Π½ Π²ΠΈΠ΄ ΡΠ΅ΠΊΠ°Π»Π½Π° ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π±ΠΈΡΠΎΠ²ΠΈΡΠ΅ ΡΠ΅ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π΅Π½ΠΈ ΠΏΠΎ ΡΠ°ΠΊΠ°Π½Π°ΡΠ° Π½ΠΈΠ·Π°. ΠΠΎΠ³Π° ΡΓ¨ Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΎ, Π±Π»Π΅Π½Π΄Π°ΡΠ° ΡΠ΅ ΠΎΡΠ²ΠΎΡΠ° ΠΈ Π±ΠΈΡΠΎΠ²ΠΈΡΠ΅ ΠΎΠ΄Π°Ρ Π½Π° ΡΠ°Π±ΠΎΡΠ°, Π·Π°ΠΌΠ΅Π½ΡΠ²Π°ΡΡΠΈ ΡΠ° ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½Π°ΡΠ° ΡΠ΅ΡΠΈΡΠ°. Π·Π±ΠΎΡ Π±ΡΠ°Π²Π°ΡΠ° Π²ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° Π·Π° ΠΌΠΈΠΊΡΠΎΡΠΈΡΠΊΡΡΠΈ ΡΠ΅ΡΠΈΡΠΈ ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΡΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ°ΠΊΠΎΠ² Π°ΠΌΠΎΡΡΠΈΠ·Π΅Ρ, Π±Π΅Π· ΡΠ°Π·Π»ΠΈΠΊΠ° Π²ΠΎ ΠΊΠ°ΠΊΠ²ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ.
ΠΠ½Π°ΡΠΈ, ΠΏΡΠ΅Π½ΠΎΡΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π΄ΠΎ DM634 ΡΠ΅ Π²ΡΡΠΈ Π²Π°ΠΊΠ°: ΠΏΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΎ Π²Π»Π΅Π·ΠΎΡ DAI Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° Π½Π°ΡΠ·Π½Π°ΡΠ°ΡΠ½ΠΈΠΎΡ Π±ΠΈΡ ΠΎΠ΄ Π΄Π°Π»Π΅ΡΠ½Π°ΡΠ° LED Π΄ΠΈΠΎΠ΄Π°, ΠΏΠΎΠ²Π»Π΅ΡΠ΅ΡΠ΅ Π³ΠΎ DCK Π½Π°Π³ΠΎΡΠ΅ ΠΈ Π½Π°Π΄ΠΎΠ»Ρ; ΠΏΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΎ Π²Π»Π΅Π·ΠΎΡ DAI Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΠΎΡ Π±ΠΈΡ, ΠΏΠΎΠ²Π»Π΅ΡΠ΅ΡΠ΅ Π³ΠΎ DCK; ΠΈ ΡΠ°ΠΊΠ° Π½Π°ΡΠ°ΠΌΡ Π΄ΠΎΠ΄Π΅ΠΊΠ° Π½Π΅ ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΠ°Ρ ΡΠΈΡΠ΅ Π±ΠΈΡΠΎΠ²ΠΈ (Π·Π°ΠΊΠ»ΡΡΠ΅Π½ Π²Π½Π°ΡΡΠ΅), ΠΏΠΎ ΡΡΠΎ Π²Π»Π΅ΡΠ΅ΠΌΠ΅ LAT. ΠΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠ°ΡΠ½ΠΎ (Π±ΠΈΡ-Π±Π΅Π½Π³), Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ Π΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ SPI ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π½ΠΎ ΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄Π΅Π½ Π·Π° ΠΎΠ²Π°, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π΅ ΠΏΡΠ΅ΡΡΡΠ°Π²Π΅Π½ Π½Π° Π½Π°ΡΠΈΠΎΡ STM32 Π²ΠΎ Π΄Π²Π΅ ΠΊΠΎΠΏΠΈΠΈ.
Π‘ΠΈΠ½Π° ΠΏΠΈΠ»ΡΠ»Π° STM32F103
ΠΠΎΠ²Π΅Π΄: STM32 ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈΡΠ΅ ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΎΠ΄ Atmega328 ΠΎΡΠΊΠΎΠ»ΠΊΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅Π΄Π°Π°Ρ ΡΡΡΠ°ΡΠ½ΠΎ. ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, ΠΏΠΎΡΠ°Π΄ΠΈ Π·Π°ΡΡΠ΅Π΄Π° Π½Π° Π΅Π½Π΅ΡΠ³ΠΈΡΠ°, ΡΠ΅ΡΠΈΡΠΈ ΡΠΈΡΠ΅ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΈ ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈ Π½Π° ΡΠ°ΠΌΠΈΠΎΡ ΠΏΠΎΡΠ΅ΡΠΎΠΊ, Π° ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ°ΡΠ° Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠΎΡ Π΅ 8 MHz ΠΎΠ΄ Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΈΠΎΡ ΠΈΠ·Π²ΠΎΡ. ΠΠ° ΡΡΠ΅ΡΠ°, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π° STM Π½Π°ΠΏΠΈΡΠ°Π° ΠΊΠΎΠ΄ ΡΡΠΎ Π³ΠΎ Π½ΠΎΡΠΈ ΡΠΈΠΏΠΎΡ Π΄ΠΎ βΠΏΡΠ΅ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡΠ΅β 72 MHz, Π° Π°Π²ΡΠΎΡΠΈΡΠ΅ Π½Π° ΡΠΈΡΠ΅ IDE ΡΡΠΎ Π³ΠΈ Π·Π½Π°ΠΌ Π³ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΠ° Π²ΠΎ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΡΠ° Π·Π° ΠΈΠ½ΠΈΡΠΈΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΠ°, ΡΠ°ΠΊΠ° ΡΡΠΎ Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ°ΠΊΡΠΈΡΠ°ΠΌΠ΅ (Π½ΠΎ
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°: Blue Pill Π΅ ΠΎΠΏΡΠ΅ΠΌΠ΅Π½ ΡΠΎ ΠΏΠΎΠΏΡΠ»Π°ΡΠ½ΠΈΠΎΡ ΡΠΈΠΏ STM32F103C8T6, ΠΈΠΌΠ° Π΄Π²Π° ΠΊΠΎΡΠΈΡΠ½ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈ Π·Π° Π½Π΅Π³ΠΎ:
ΠΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ STM32F103x8 ΠΈ STM32F103xB;Π£ΠΏΠ°ΡΡΡΠ²ΠΎ Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π·Π° ΡΠ΅Π»Π°ΡΠ° Π»ΠΈΠ½ΠΈΡΠ° STM32F103 ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅.
ΠΠΎ Π»ΠΈΡΡΠΎΡ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ°:
- ΠΠΈΠ½Π°ΡΡΠΈ β ΡΠΈΠΏ ΠΏΠΈΠ½Π°ΡΡΠΈ β Π²ΠΎ ΡΠ»ΡΡΠ°Ρ Π΄Π° ΡΠ΅ΡΠΈΠΌΠ΅ ΡΠ°ΠΌΠΈ Π΄Π° Π³ΠΈ ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΡΠ°Π±Π»ΠΈΡΠ΅;
- ΠΠ΅ΠΌΠΎΡΠΈΡΠΊΠ° ΠΊΠ°ΡΡΠ° β ΠΌΠ΅ΠΌΠΎΡΠΈΡΠΊΠ° ΠΊΠ°ΡΡΠ° Π·Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ ΡΠΈΠΏ. Π Π΅ΡΠ΅ΡΠ΅Π½ΡΠ½ΠΈΠΎΡ ΠΏΡΠΈΡΠ°ΡΠ½ΠΈΠΊ ΠΈΠΌΠ° ΠΌΠ°ΠΏΠ° Π·Π° ΡΠ΅Π»Π°ΡΠ° Π»ΠΈΠ½ΠΈΡΠ°, ΠΈ ΡΠΏΠΎΠΌΠ΅Π½ΡΠ²Π° ΡΠ΅Π³ΠΈΡΡΡΠΈ ΡΡΠΎ Π½Π°ΡΠΈΡΠ΅ Π³ΠΈ Π½Π΅ΠΌΠ°Π°Ρ.
- Π’Π°Π±Π΅Π»Π° ΡΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈ Π·Π° ΠΏΠΈΠ½ΠΎΠ²ΠΈ β Π½Π°Π²Π΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° Π³Π»Π°Π²Π½ΠΈΡΠ΅ ΠΈ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΠΏΠΈΠ½ΠΎΠ²ΠΈΡΠ΅; Π·Π° βΡΠΈΠ½Π°ΡΠ° ΠΏΠΈΠ»ΡΠ»Π°β ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΡΠ΄Π΅ΡΠ΅ ΠΏΠΎΠΏΠΎΠ³ΠΎΠ΄Π½ΠΈ ΡΠ»ΠΈΠΊΠΈ Π½Π° ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ ΡΠΎ ΡΠΏΠΈΡΠΎΠΊ Π½Π° ΠΏΠΈΠ½ΠΎΠ²ΠΈ ΠΈ Π½ΠΈΠ²Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ°ΡΠΎΠ°, Π²Π΅Π΄Π½Π°Ρ Π³ΠΎ Π±Π°ΡΠ°ΠΌΠ΅ Π½Π° Google Π·Π°ΠΏΠΈΡΠΎΡ Π½Π° Blue Pill ΠΈ ΡΠ° ΡΡΠ²Π°ΠΌΠ΅ ΠΎΠ²Π°Π° ΡΠ»ΠΈΠΊΠ° ΠΏΡΠΈ ΡΠ°ΠΊΠ°:
ΠΠ°ΠΏΠΎΠΌΠ΅Π½Π°: ΠΈΠΌΠ°ΡΠ΅ Π³ΡΠ΅ΡΠΊΠ° Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ° ΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ, ΠΊΠΎΡΠ° Π±Π΅ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠ°Π½Π° Π²ΠΎ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ°ΠΌ Π·Π° ΡΠΎΠ°. Π‘Π»ΠΈΠΊΠ°ΡΠ° Π΅ Π·Π°ΠΌΠ΅Π½Π΅ΡΠ°, Π½ΠΎ ΠΎΠ²Π° Π΅ Π»Π΅ΠΊΡΠΈΡΠ° - ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈΡΠ΅ Π½Π΅ ΠΎΠ΄ Π»ΠΈΡΡΠΎΠ²ΠΈ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ.
ΠΠΎ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°ΠΌΠ΅ Π»ΠΈΡΡΠΎΡ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Π³ΠΎ ΠΎΡΠ²ΠΎΡΠ°ΠΌΠ΅ Π Π΅ΡΠ΅ΡΠ΅Π½ΡΠ½ΠΈΠΎΡ ΠΏΡΠΈΡΠ°ΡΠ½ΠΈΠΊ ΠΈ ΠΎΡΡΠ΅Π³Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΡΠ°ΠΌΠΎ Π½Π΅Π³ΠΎ.
ΠΠΎΡΡΠ°ΠΏΠΊΠ°: ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π΅Π½ Π²Π»Π΅Π·/ΠΈΠ·Π»Π΅Π·, Π³ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ SPI, Π³ΠΈ Π²ΠΊΠ»ΡΡΡΠ²Π°ΠΌΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΈ.
ΠΠ»Π΅Π· ΠΈΠ·Π»Π΅Π·
ΠΠ° Atmega328, I/O ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ, ΠΏΠΎΡΠ°Π΄ΠΈ ΡΡΠΎ ΠΈΠ·ΠΎΠ±ΠΈΠ»ΡΡΠ²ΠΎΡΠΎ Π½Π° STM32 ΠΎΠΏΡΠΈΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ Π·Π±ΡΠ½ΡΠ²Π°ΡΠΊΠΈ. Π‘Π΅Π³Π° Π½ΠΈ ΡΡΠ΅Π±Π°Π°Ρ ΡΠ°ΠΌΠΎ Π·Π°ΠΊΠ»ΡΡΠΎΡΠΈ, Π½ΠΎ Π΄ΡΡΠΈ ΠΈ ΠΎΠ²ΠΈΠ΅ ΠΈΠΌΠ°Π°Ρ ΡΠ΅ΡΠΈΡΠΈ ΠΎΠΏΡΠΈΠΈ:
ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΎΠ΄Π²ΠΎΠ΄, ΡΡΡΠΊΠ°ΡΠ΅-Π²Π»Π΅ΡΠ΅ΡΠ΅, Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π΅Π½ ΡΡΡΠΊΠ°ΡΠ΅-Π²Π»Π΅ΡΠ΅ΡΠ΅, Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π΅Π½ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΎΠ΄Π²ΠΎΠ΄
βΠΠΎΠ²Π»Π΅ΡΠ΅ΡΠ΅-ΡΡΡΠΊΠ°ΡΡΠ΅β (ΡΡΡΠΊΠ°ΡΠ΅) Π΅ Π²ΠΎΠΎΠ±ΠΈΡΠ°Π΅Π½ΠΈΠΎΡ ΠΈΠ·Π»Π΅Π· ΠΎΠ΄ Arduino, ΠΏΠΈΠ½ΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ° Π·Π΅ΠΌΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° ΠΈΠ»ΠΈ HIGH ΠΈΠ»ΠΈ LOW. ΠΠΎ, ΡΠΎ βΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΎΠ΄Π²ΠΎΠ΄β ΠΈΠΌΠ°
ΠΠ·Π»Π΅Π·Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° / ΠΊΠΎΠ³Π° ΠΏΠΎΡΡΠ°ΡΠ° Π΅ Π΄ΠΎΠ΄Π΅Π»Π΅Π½Π° Π½Π° ΠΈΠ·Π»Π΅Π·: / ΠΈΠ·Π»Π΅Π·Π½ΠΈΠΎΡ Π±Π°ΡΠ΅Ρ Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½: / β ΠΎΡΠ²ΠΎΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΎΠ΄Π²ΠΎΠ΄: β0β Π²ΠΎ ΠΈΠ·Π»Π΅Π·Π½ΠΈΠΎΡ ΡΠ΅Π³ΠΈΡΡΠ°Ρ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° N-MOS, β1β Π²ΠΎ ΠΈΠ·Π»Π΅Π·Π½ΠΈΠΎΡ ΡΠ΅Π³ΠΈΡΡΠ°Ρ ΡΠ° Π½Π°ΠΏΡΡΡΠ° ΠΏΠΎΡΡΠ°ΡΠ° Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌ Hi-Z ( P-MOS Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ ) / β ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΏΡΠΈΡΠΈΡΠΊΠ°ΡΠ΅: β0β Π²ΠΎ ΠΈΠ·Π»Π΅Π·Π½ΠΈΠΎΡ ΡΠ΅Π³ΠΈΡΡΠ°Ρ Π³ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° N-MOS, β1β Π²ΠΎ ΠΈΠ·Π»Π΅Π·Π½ΠΈΠΎΡ ΡΠ΅Π³ΠΈΡΡΠ°Ρ Π³ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° P-MOS.
Π¦Π΅Π»Π°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΏΠΎΠΌΠ΅ΡΡ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈΠΎΡ ΠΎΠ΄Π²ΠΎΠ΄ (ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΎΠ΄Π²ΠΎΠ΄) ΠΎΠ΄ βpush-pullβ (ΡΡΡΠΊΠ°ΡΠ΅(Π²ΠΈΡΠΎΠΊΠ° ΠΈΠΌΠΏΠ΅Π΄Π°Π½ΡΠ°, ΠΠ΄ΡΠ°Π²ΠΎ-Π). ΠΠΎΠ³Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π½ΡΠ»Π°, ΠΏΠΈΠ½ΠΎΡ ΡΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π° ΠΈΡΡΠΎ ΠΈ Π²ΠΎ Π΄Π²Π°ΡΠ° ΡΠ΅ΠΆΠΈΠΌΠΈ, ΠΈ Π»ΠΎΠ³ΠΈΡΠΊΠΈ ΠΈ Π΅Π»Π΅ΠΊΡΡΠΈΡΠ½ΠΎ.
ΠΠΎ Π½ΠΎΡΠΌΠ°Π»Π΅Π½ ΠΈΠ·Π»Π΅Π·Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ, ΠΏΠΈΠ½ΠΎΡ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΡΠ° Π΅ΠΌΠΈΡΡΠ²Π° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°ΡΠ° Π½Π° ΠΈΠ·Π»Π΅Π·Π½ΠΈΠΎΡ ΡΠ΅Π³ΠΈΡΡΠ°Ρ. ΠΠΎ βΠ°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°ΡΠ°β ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΠΎΠ΄ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΈΡΠ΅ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΈ (Π²ΠΈΠ΄ΠΈ 9.1.4):
ΠΠΊΠΎ Π±ΠΈΡ Π·Π° ΠΏΠΎΡΡΠ° Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ ΠΊΠ°ΠΊΠΎ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½Π° ΠΈΠ³Π»Π°, ΠΏΠΈΠ½ΡΠΊΠΈΠΎΡ ΡΠ΅Π³ΠΈΡΡΠ°Ρ Π΅ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΈ ΠΏΠΈΠ½ΠΎΡ Π΅ ΠΏΠΎΠ²ΡΠ·Π°Π½ ΡΠΎ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΈΠΎΡ ΠΏΠΈΠ½.
ΠΠ»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π½Π° ΡΠ΅ΠΊΠΎΡΠ° ΠΈΠ³Π»Π° Π΅ ΠΎΠΏΠΈΡΠ°Π½Π° Π²ΠΎ ΠΠ΅ΡΠΈΠ½ΠΈΡΠΈΠΈ Π·Π° ΠΏΠΈΠ½ΠΎΠ²ΠΈ ΠΠΈΡΡΠΎΡ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π΅ Π½Π° ΠΏΡΠ΅Π·Π΅ΠΌΠ΅Π½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ°. ΠΠ° ΠΏΡΠ°ΡΠ°ΡΠ΅ΡΠΎ ΡΡΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π°ΠΊΠΎ ΠΈΠ³Π»Π°ΡΠ° ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠΎΡ Π΅ Π΄Π°Π΄Π΅Π½ ΡΠΎ ΡΡΡΠ½ΠΎΡΠ° Π²ΠΎ Π»ΠΈΡΡΠΎΡ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ:
ΠΠΊΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΈ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΈΡΡ ΠΏΠΈΠ½, Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ ΠΏΠΎΠΌΠ΅ΡΡ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ°ΠΌΠΎ Π΅Π΄Π΅Π½ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ΅Π½ ΡΡΠ΅Π΄ ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ, ΡΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ Π±ΠΈΡ Π·Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΈΠΎΡ ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ (Π²ΠΎ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΈΠΎΡ RCC ΡΠ΅Π³ΠΈΡΡΠ°Ρ).
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΈΠ³Π»ΠΈΡΠΊΠΈΡΠ΅ Π²ΠΎ ΠΈΠ·Π»Π΅Π·Π½ΠΈΠΎΡ ΡΠ΅ΠΆΠΈΠΌ ΠΈΠΌΠ°Π°Ρ ΠΈ Π±ΡΠ·ΠΈΠ½Π° Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠΎΡ. ΠΠ²Π° Π΅ ΡΡΡΠ΅ Π΅Π΄Π½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π·Π° Π·Π°ΡΡΠ΅Π΄Π° Π½Π° Π΅Π½Π΅ΡΠ³ΠΈΡΠ°; Π²ΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΡΠ°ΠΌΠΎ ΡΠ° ΠΏΠΎΡΡΠ°Π²ΠΈΠ²ΠΌΠ΅ Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ ΠΈ ΡΠ° Π·Π°Π±ΠΎΡΠ°Π²Π°ΠΌΠ΅.
ΠΠ½Π°ΡΠΈ: ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ SPI, ΡΡΠΎ Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° Π΄Π²Π° ΠΏΠΈΠ½Π° (ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈ ΡΠΎ ΡΠ°ΠΊΡ-ΡΠΈΠ³Π½Π°Π») ΡΡΠ΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π°Ρ βΠ°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ° Π·Π° ΠΏΡΠΈΡΠΈΡΠΊΠ°ΡΠ΅β, Π° ΡΡΡΠ΅ Π΅Π΄Π΅Π½ (ΠΠΠ’) ΡΡΠ΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ βΡΠ΅Π΄ΠΎΠ²Π½ΠΎ ΠΏΡΠΈΡΠΈΡΠΊΠ°ΡΠ΅β. ΠΠΎ, ΠΏΡΠ΅Π΄ Π΄Π° Π³ΠΈ Π΄ΠΎΠ΄Π΅Π»ΠΈΠΌΠ΅, Π΄Π° ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅ ΡΠΎ SPI.
SPI
Π£ΡΡΠ΅ Π΅Π΄Π½Π° ΠΌΠ°Π»Π° Π΅Π΄ΡΠΊΠ°ΡΠΈΠ²Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°
SPI ΠΈΠ»ΠΈ Π‘Π΅ΡΠΈΡΠΊΠΈ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ (ΡΠ΅ΡΠΈΡΠΊΠΈ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ) Π΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π΅Π½ ΠΈ ΠΌΠ½ΠΎΠ³Ρ Π΅ΡΠΈΠΊΠ°ΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ Π·Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ Π½Π° MK ΡΠΎ Π΄ΡΡΠ³ΠΈ MK ΠΈ ΡΠΎ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΈΠΎΡ ΡΠ²Π΅Ρ Π²ΠΎΠΎΠΏΡΡΠΎ. ΠΡΠΈΠ½ΡΠΈΠΏΠΎΡ Π½Π° Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠ΅ Π΅ Π²Π΅ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ ΠΏΠΎΠ³ΠΎΡΠ΅, ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π·Π° ΠΊΠΈΠ½Π΅ΡΠΊΠΈΠΎΡ LED Π΄ΡΠ°ΡΠ²Π΅Ρ (Π²ΠΎ ΡΠΏΠ°ΡΡΡΠ²ΠΎΡΠΎ Π·Π° ΡΠΏΠ°ΡΡΠ²Π°ΡΠ΅, Π²ΠΈΠ΄Π΅ΡΠ΅ Π΄Π΅Π» 25). SPI ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π²ΠΎ Π³Π»Π°Π²Π΅Π½ (βΠ³ΠΎΡΠΏΠΎΠ΄Π°Ρβ) ΠΈ slave (βslaveβ) ΡΠ΅ΠΆΠΈΠΌ. SPI ΠΈΠΌΠ° ΡΠ΅ΡΠΈΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΠΊΠ°Π½Π°Π»ΠΈ, ΠΎΠ΄ ΠΊΠΎΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΡΠΈΡΠ΅:
- MOSI, ΠΠ»Π°Π²Π΅Π½ ΠΈΠ·Π»Π΅Π· / Π‘Π»Π°Π² Π²Π»Π΅Π·: ΠΎΠ²ΠΎΡ ΠΏΠΈΠ½ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ Π³Π»Π°Π²Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΠΈ ΠΏΡΠΈΠΌΠ° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ slave ΡΠ΅ΠΆΠΈΠΌ;
- MISO, Master Input / Slave Output: Π½Π°ΠΏΡΠΎΡΠΈΠ², ΠΏΡΠΈΠΌΠ° Π²ΠΎ Π³Π»Π°Π²Π½ΠΈΠΎΡ, Π° ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π° Π²ΠΎ slave;
- SCK, Π‘Π΅ΡΠΈΡΠΊΠΈ ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ: ΡΠ° ΠΏΠΎΡΡΠ°Π²ΡΠ²Π° ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΏΡΠ΅Π½ΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ Π³Π»Π°Π²Π½ΠΈΠΎΡ ΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ° ΡΠΈΠ³Π½Π°Π» Π·Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠΎΡ Π²ΠΎ slave. ΠΠΎ ΡΡΡΡΠΈΠ½Π° ΡΠ΄ΠΈΡΠ°ΡΠ΅ ΠΎΡΡΡΠΊΡΠ²Π°ΡΠ°;
- SS, Slave Select: ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° ΠΎΠ²ΠΎΡ ΠΊΠ°Π½Π°Π», ΡΠΎΠ±ΠΎΡ Π·Π½Π°Π΅ Π΄Π΅ΠΊΠ° Π½Π΅ΡΡΠΎ ΡΠ΅ Π±Π°ΡΠ° ΠΎΠ΄ Π½Π΅Π³ΠΎ. ΠΠ° STM32 ΡΠ΅ Π½Π°ΡΠ΅ΠΊΡΠ²Π° NSS, ΠΊΠ°Π΄Π΅ N = Π½Π΅Π³Π°ΡΠΈΠ²Π΅Π½, Ρ.Π΅. ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΎΡΠΎΡ ΡΡΠ°Π½ΡΠ²Π° ΡΠΎΠ± Π°ΠΊΠΎ ΠΈΠΌΠ° Π·Π°Π·Π΅ΠΌΡΡΠ²Π°ΡΠ΅ Π²ΠΎ ΠΎΠ²ΠΎΡ ΠΊΠ°Π½Π°Π». ΠΠΎΠ±ΡΠΎ ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ° ΡΠΎ ΡΠ΅ΠΆΠΈΠΌΠΎΡ Open Drain Output, Π½ΠΎ ΡΠΎΠ° Π΅ Π΄ΡΡΠ³Π° ΠΏΡΠΈΠΊΠ°Π·Π½Π°.
ΠΠ°ΠΊΠΎ ΠΈ ΡΓ¨ Π΄ΡΡΠ³ΠΎ, SPI Π½Π° STM32 Π΅ Π±ΠΎΠ³Π°Ρ ΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ, ΡΡΠΎ Π³ΠΎ ΠΎΡΠ΅ΠΆΠ½ΡΠ²Π° Π΄ΠΎΠ½Π΅ΠΊΠ°Π΄Π΅ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π½Π΅ ΡΠ°ΠΌΠΎ ΡΠΎ SPI, ΡΡΠΊΡ ΠΈ ΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ I2S, Π° Π²ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° Π½ΠΈΠ²Π½ΠΈΡΠ΅ ΠΎΠΏΠΈΡΠΈ ΡΠ΅ ΠΌΠ΅ΡΠ°Π°Ρ, Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΎΡΡΠ΅ΡΠ΅ Π²ΠΈΡΠΎΠΊΠΎΡ Π½Π°Π²ΡΠ΅ΠΌΠ΅Π½ΠΎ. ΠΠ°ΡΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π΅ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π°: ΡΠ°ΠΌΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΠΈΡΠΏΡΠ°ΡΠ°ΠΌΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ°ΠΌΠΎ MOSI ΠΈ SCK. ΠΠ΄ΠΈΠΌΠ΅ Π²ΠΎ Π΄Π΅Π»ΠΎΡ 25.3.4 (ΠΏΠΎΠ»ΡΠ΄ΡΠΏΠ»Π΅ΠΊΡ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΠ°, ΠΏΠΎΠ»ΡΠ΄ΡΠΏΠ»Π΅ΠΊΡ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΠ°), ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π½Π°ΠΎΡΠ°ΠΌΠ΅ 1 ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ ΠΈ 1 Π΅Π΄Π½ΠΎΠ½Π°ΡΠΎΡΠ½Π° ΠΆΠΈΡΠ° Π·Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ (1 ΡΠΈΠ³Π½Π°Π» Π·Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ ΠΈ 1 Π΅Π΄Π½ΠΎΠ½Π°ΡΠΎΡΠ΅Π½ ΠΏΡΠΎΡΠΎΠΊ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ):
ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ΅ΠΆΠΈΠΌ, Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈ SPI ΠΈΠ»ΠΈ Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°ΠΌΠΎ Π·Π° ΠΏΡΠ΅Π½ΠΎΡ ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎ Π·Π° ΠΏΡΠΈΠΌΠ°ΡΠ΅. / Π Π΅ΠΆΠΈΠΌΠΎΡ ΡΠ°ΠΌΠΎ Π·Π° ΠΏΡΠ΅Π½ΠΎΡ Π΅ ΡΠ»ΠΈΡΠ΅Π½ Π½Π° Π΄ΡΠΏΠ»Π΅ΠΊΡ ΡΠ΅ΠΆΠΈΠΌΠΎΡ: ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π°Π°Ρ Π½Π° ΠΈΠ³Π»Π°ΡΠ° Π·Π° ΠΏΡΠ΅Π½ΠΎΡ (MOSI Π²ΠΎ Π³Π»Π°Π²Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΠΈΠ»ΠΈ MISO Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌ Π½Π° slave), Π° ΠΏΠΈΠ½ΠΎΡ Π·Π° ΠΏΡΠΈΠΌΠ°ΡΠ΅ (MISO ΠΈΠ»ΠΈ MOSI ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ) ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΊΠ°ΠΊΠΎ ΠΎΠ±ΠΈΡΠ΅Π½ I/O ΠΏΠΈΠ½ . ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΡΡΠ΅Π±Π° ΡΠ°ΠΌΠΎ Π΄Π° Π³ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΠ° Π±Π°ΡΠ΅ΡΠΎΡ Rx (Π°ΠΊΠΎ ΡΠ΅ ΡΠΈΡΠ°, Π½Π΅ΠΌΠ° Π΄Π° ΠΈΠΌΠ° ΠΏΡΠ΅Π½Π΅ΡΠ΅Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ°ΠΌΡ).
ΠΠ΄Π»ΠΈΡΠ½ΠΎ, MISO ΠΏΠΈΠ½ΠΎΡ Π΅ Π±Π΅ΡΠΏΠ»Π°ΡΠ΅Π½, Π°ΡΠ΄Π΅ Π΄Π° Π³ΠΎ ΠΏΠΎΠ²ΡΠ·Π΅ΠΌΠ΅ ΠΠΠ’ ΡΠΈΠ³Π½Π°Π»ΠΎΡ Π½Π° Π½Π΅Π³ΠΎ. ΠΠ° Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ Slave Select, ΠΊΠΎΡ Π½Π° STM32 ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ, ΡΡΠΎ Π΅ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ. ΠΠΎ ΡΠΈΡΠ°ΠΌΠ΅ ΠΈΡΡΠΎΠΈΠΌΠ΅Π½ΠΈΠΎΡ ΠΏΠ°ΡΡΡ Π²ΠΎ Π΄Π΅Π»ΠΎΡ 25.3.1 SPI ΠΠΏΡΡ ΠΎΠΏΠΈΡ:
Π‘ΠΎΡΡΠ²Π΅ΡΡΠΊΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Π° NSS (SSM = 1) / ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈΡΠ΅ Π·Π° ΠΈΠ·Π±ΠΎΡ Π½Π° ΡΠΎΠ±ΠΎΠ²ΠΈ ΡΠ΅ ΡΠΎΠ΄ΡΠΆΠ°Π½ΠΈ Π²ΠΎ Π±ΠΈΡΠΎΡ SSI Π½Π° ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ SPI_CR1. ΠΠ°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΈΠΎΡ NSS ΠΏΠΈΠ½ ΠΎΡΡΠ°Π½ΡΠ²Π° Π±Π΅ΡΠΏΠ»Π°ΡΠ΅Π½ Π·Π° Π΄ΡΡΠ³ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°.
ΠΡΠ΅ΠΌΠ΅ Π΅ Π·Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅. Π Π΅ΡΠΈΠ² Π΄Π° ΠΊΠΎΡΠΈΡΡΠ°ΠΌ SPI2, Π΄Π° ΡΠ° ΠΏΠΎΠ±Π°ΡΠ°ΠΌ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΎΡΠ½ΠΎΠ²Π½Π° Π°Π΄ΡΠ΅ΡΠ° Π²ΠΎ Π»ΠΈΡΡΠΎΡ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ - Π²ΠΎ Π΄Π΅Π»ΠΎΡ 3.3 ΠΠ΅ΠΌΠΎΡΠΈΡΠΊΠ° ΠΊΠ°ΡΡΠ°:
ΠΠ°, Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌΠ΅:
#define _SPI2_(mem_offset) (*(volatile uint32_t *)(0x40003800 + (mem_offset)))
ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ Π³ΠΎ Π΄Π΅Π»ΠΎΡ 25.3.3 ΡΠΎ ΡΠ°ΠΌΠΎΠΎΠ±ΡΠ°ΡΠ½ΠΈΠ² Π½Π°ΡΠ»ΠΎΠ² βΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° SPI Π²ΠΎ Π³Π»Π°Π²Π΅Π½ ΡΠ΅ΠΆΠΈΠΌβ:
1. ΠΠΎΡΡΠ°Π²Π΅ΡΠ΅ ΡΠ° ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ°ΡΠ° Π½Π° ΡΠ΅ΡΠΈΡΠΊΠΈΠΎΡ ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ ΡΠΎ Π±ΠΈΡΠΎΠ²ΠΈ BR[2:0] Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ SPI_CR1.
Π Π΅Π³ΠΈΡΡΡΠΈΡΠ΅ ΡΠ΅ ΡΠΎΠ±ΡΠ°Π½ΠΈ Π²ΠΎ ΠΈΡΡΠΎΠΈΠΌΠ΅Π½ΠΈΠΎΡ Π΄Π΅Π» Π·Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ½ΠΈΠΎΡ ΠΏΡΠΈΡΠ°ΡΠ½ΠΈΠΊ. ΠΡΠΎΠΌΠ΅Π½Π° Π½Π° Π°Π΄ΡΠ΅ΡΠ° (ΠΠΎΠΌΠ΅ΡΡΡΠ²Π°ΡΠ΅ Π½Π° Π°Π΄ΡΠ΅ΡΠ°ΡΠ°) Π·Π° CR1 β 0x00, ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ ΡΠΈΡΠ΅ Π±ΠΈΡΠΎΠ²ΠΈ ΡΠ΅ Π±ΡΠΈΡΠ°Ρ (Π Π΅ΡΠ΅ΡΠΈΡΠ°Ρ ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° 0x0000):
BR Π±ΠΈΡΠΎΠ²ΠΈΡΠ΅ Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°Π°Ρ Π΄Π΅Π»ΠΈΡΠ΅Π»ΠΎΡ Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠΎΡ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΎΡΠΎΡ, ΡΠΎ ΡΡΠΎ ΡΠ° ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π°Π°Ρ ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΊΠΎΡΠ° ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ SPI. ΠΠ°ΡΠ°ΡΠ° ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ° STM32 ΡΠ΅ Π±ΠΈΠ΄Π΅ 72 MHz, LED Π΄ΡΠ°ΡΠ²Π΅ΡΠΎΡ, ΡΠΏΠΎΡΠ΅Π΄ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ Π»ΠΈΡΡ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΡΠ°Π±ΠΎΡΠΈ ΡΠΎ ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ° Π΄ΠΎ 25 MHz, ΡΠ°ΠΊΠ° ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΠΌΠ΅ ΡΠΎ ΡΠ΅ΡΠΈΡΠΈ (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):
Π€Π°Π·Π° Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ ΠΈ ΠΏΠΎΠ»Π°ΡΠΈΡΠ΅Ρ
ΠΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΈ Π±ΠΈΡΠΎΠ²ΠΈΡΠ΅ CPOL ΠΈ CPHA Π½Π° ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ SPI_CR1, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠ΅ΡΠΈΡΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΈ Π²ΡΡΠΊΠΈ. ΠΠΈΡΠΎΡ CPOL (ΠΏΠΎΠ»Π°ΡΠΈΡΠ΅Ρ Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠΎΡ) ΡΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΡΠΎΡΡΠΎΡΠ±Π°ΡΠ° Π½Π° ΡΠΈΠ³Π½Π°Π»ΠΎΡ Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠΎΡ ΠΊΠΎΠ³Π° Π½Π΅ ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π°Π°Ρ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠ²ΠΎΡ Π±ΠΈΡ Π³ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΡΠ΅ΠΆΠΈΠΌΠΈΡΠ΅ master ΠΈ slave. ΠΠΊΠΎ CPOL ΡΠ΅ ΡΠ΅ΡΠ΅ΡΠΈΡΠ°, ΠΏΠΈΠ½ΠΎΡ SCK Π΅ Π½ΠΈΠ·ΠΎΠΊ Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΌΠΈΡΡΠ²Π°ΡΠ΅. ΠΠΊΠΎ Π±ΠΈΡΠΎΡ CPOL Π΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½, ΠΏΠΈΠ½ΠΎΡ SCK Π΅ Π²ΠΈΡΠΎΠΊ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ΅ΠΆΠΈΠΌΠΎΡ Π½Π° ΠΎΠ΄ΠΌΠΎΡ.
ΠΠΎΠ³Π° Π±ΠΈΡΠΎΡ CPHA (ΡΠ°Π·Π° Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠΎΡ) Π΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½, ΡΡΡΠΎΠ±ΠΎΡ Π·Π° Π·Π°ΠΌΠΊΠ° ΡΠΎ Π²ΠΈΡΠΎΠΊΠΈ Π±ΠΈΡΠΎΠ²ΠΈ Π΅ Π²ΡΠΎΡΠΈΠΎΡ ΡΠ°Π± Π½Π° ΡΠΈΠ³Π½Π°Π»ΠΎΡ SCK (ΠΏΠ°ΡΠ° Π°ΠΊΠΎ CPOL Π΅ ΡΠ°ΡΠ΅Π½, ΡΠ΅ Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π° Π°ΠΊΠΎ Π΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½ CPOL). ΠΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ Π·Π°ΡΠΎΠ±Π΅Π½ΠΈ ΡΠΎ Π²ΡΠΎΡΠ°ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π° Π½Π° ΡΠΈΠ³Π½Π°Π»ΠΎΡ Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠΎΡ. ΠΠΊΠΎ Π±ΠΈΡΠΎΡ CPHA Π΅ ΡΠ°ΡΠ΅Π½, ΡΡΡΠΎΠ±ΠΎΡ Π·Π° Π·Π°ΠΌΠΊΠ° ΡΠΎ Π²ΠΈΡΠΎΠΊΠΈ Π±ΠΈΡΠΎΠ²ΠΈ Π΅ ΡΠ°ΡΡΠ΅ΡΠΊΠΈΠΎΡ ΡΠ°Π± Π½Π° ΡΠΈΠ³Π½Π°Π»ΠΎΡ SCK (ΠΎΠΏΠ°ΡΠ°ΡΠΊΠΈ ΡΠ°Π± Π°ΠΊΠΎ Π΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½ CPOL, ΡΠ°ΡΡΠ΅ΡΠΊΠΈ ΡΠ°Π± Π°ΠΊΠΎ CPOL Π΅ ΠΈΡΡΠΈΡΡΠ΅Π½). ΠΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ Π·Π°ΡΠΎΠ±Π΅Π½ΠΈ ΠΏΡΠΈ ΠΏΡΠ²Π°ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π° Π½Π° ΡΠΈΠ³Π½Π°Π»ΠΎΡ Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠΎΡ.
ΠΡΠΊΠ°ΠΊΠΎ Π³ΠΎ Π°ΠΏΡΠΎΡΠ±ΠΈΡΠ°Π²ΠΌΠ΅ ΠΎΠ²Π° Π·Π½Π°Π΅ΡΠ΅, Π΄ΠΎΠ°ΡΠ°ΠΌΠ΅ Π΄ΠΎ Π·Π°ΠΊΠ»ΡΡΠΎΠΊ Π΄Π΅ΠΊΠ° Π΄Π²Π°ΡΠ° Π±ΠΈΡΠ° ΠΌΠΎΡΠ° Π΄Π° ΠΎΡΡΠ°Π½Π°Ρ Π½ΡΠ»ΠΈ, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π‘Π°ΠΊΠ°ΠΌΠ΅ SCK ΡΠΈΠ³Π½Π°Π»ΠΎΡ Π΄Π° ΠΎΡΡΠ°Π½Π΅ Π½ΠΈΠ·ΠΎΠΊ ΠΊΠΎΠ³Π° Π½Π΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ, Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π°Π°Ρ Π½Π° ΡΠ°ΡΡΠ΅ΡΠΊΠΈΠΎΡ ΡΠ°Π± Π½Π° ΠΏΡΠ»ΡΠΎΡ (Π²ΠΈΠ΄ΠΈ Π‘Π». Π Π°ΡΠ·ΠΈΠ½Π³ ΠΡ Π²ΠΎ Π»ΠΈΡΡΠΎΡ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ DM634).
ΠΠ°ΡΠ΅ΠΌ, ΠΎΠ²Π΄Π΅ Π·Π° ΠΏΡΠ² ΠΏΠ°Ρ Π½Π°ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ Π½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π½Π° Π²ΠΎΠΊΠ°Π±ΡΠ»Π°ΡΠΎΡ Π²ΠΎ Π»ΠΈΡΡΠΎΠ²ΠΈΡΠ΅ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ST: Π²ΠΎ Π½ΠΈΠ² Π΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° ΡΡΠ°Π·Π°ΡΠ° βΡΠ΅ΡΠ΅ΡΠΈΡΠ°ΡΡΠ΅ Π³ΠΎ Π±ΠΈΡΠΎΡ Π½Π° Π½ΡΠ»Π°β. Π΄Π° ΡΠ΅ ΡΠ΅ΡΠ΅ΡΠΈΡΠ° ΠΌΠ°Π»ΠΊΡΠΈ Π½Π΅ Π΄Π° ΡΠ΅ ΡΠ°ΡΡΠΈΡΡΠΈ ΠΌΠ°Π»ΠΊΡ, ΠΊΠ°ΠΊΠΎ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΡΠΌΠ΅Π³Π°.
3. ΠΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΎ Π±ΠΈΡΠΎΡ DFF Π΄Π° ΠΎΠ΄ΡΠ΅Π΄ΠΈ Π΄Π°Π»ΠΈ Π±Π»ΠΎΠΊΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π΅ 8-Π±ΠΈΡΠ΅Π½ ΠΈΠ»ΠΈ 16-Π±ΠΈΡΠ΅Π½ ΡΠΎΡΠΌΠ°Ρ
ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π·Π΅Π΄ΠΎΠ² 16-Π±ΠΈΡΠ΅Π½ DM634 Π·Π° Π΄Π° Π½Π΅ ΡΠ΅ ΠΌΠ°ΡΠ°ΠΌ ΡΠΎ ΠΏΡΠ΅Π½ΠΎΡ Π½Π° 12-Π±ΠΈΡΠ½ΠΈ PWM ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΠΊΠ°ΠΊΠΎ 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 Π²ΠΎ Π³Π»Π°Π²Π΅Π½ ΡΠ΅ΠΆΠΈΠΌβ:
ΠΠ°ΡΠ°ΡΠΊΠ° Π·Π° ΠΏΡΠ΅Π½ΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ
ΠΡΠ΅Π½ΠΎΡΠΎΡ Π·Π°ΠΏΠΎΡΠ½ΡΠ²Π° ΠΊΠΎΠ³Π° Π±Π°ΡΡ Π΅ Π·Π°ΠΏΠΈΡΠ°Π½ Π²ΠΎ Π±Π°ΡΠ΅ΡΠΎΡ Tx.
ΠΠΎΠ΄Π°ΡΠΎΡΠ½ΠΈΠΎΡ Π±Π°ΡΡ ΡΠ΅ Π²ΡΠΈΡΡΠ²Π° Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ Π·Π° ΠΏΠΎΠΌΠ΅ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΡΠ΅ΠΆΠΈΠΌ (ΠΎΠ΄ Π²Π½Π°ΡΡΠ΅ΡΠ½Π°ΡΠ° ΠΌΠ°Π³ΠΈΡΡΡΠ°Π»Π°) Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΡΠ΅Π½ΠΎΡΠΎΡ Π½Π° ΠΏΡΠ²ΠΈΠΎΡ Π±ΠΈΡ, ΠΏΠΎ ΡΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π° Π΄ΠΎ ΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ°Π»Π΅Π½ Π Π΅ΠΆΠΈΠΌ Π½Π° ΠΏΠΈΠ½ΡΠΊΠΈ MOSI, ΠΏΡΠ² ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π΅Π½ Π±ΠΈΡ Π½Π°ΠΏΡΠ΅Π΄ Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ Π΄ΠΎΡΠ΅ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π±ΠΈΡΠΎΡ LSBFIRST Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ CPI_CR1. ΠΠ½Π°ΠΌΠ΅ΡΠΎ TXE ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π° ΠΏΠΎ ΠΏΡΠ΅Π½ΠΎΡΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΎΠ΄ Tx ΡΠ°ΠΌΠΏΠΎΠ½ Π΄ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°Ρ Π·Π° ΠΏΠΎΠΌΠ΅ΡΡΡΠ²Π°ΡΠ΅, Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΏΡΠ΅ΠΊΠΈΠ½ Π°ΠΊΠΎ Π΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½ Π±ΠΈΡΠΎΡ TXEIE Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ CPI_CR1.
ΠΡΡΠ°ΠΊΠ½Π°Π² Π½Π΅ΠΊΠΎΠ»ΠΊΡ Π·Π±ΠΎΡΠΎΠ²ΠΈ Π²ΠΎ ΠΏΡΠ΅Π²ΠΎΠ΄ΠΎΡ Π·Π° Π΄Π° ΠΏΡΠΈΠ²Π»Π΅ΡΠ°ΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΅Π΄Π½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π½Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° SPI Π²ΠΎ STM ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈΡΠ΅. ΠΠ° Atmega Π·Π½Π°ΠΌΠ΅ΡΠΎ TXE (Tx ΠΡΠ°Π·Π΅Π½, Tx Π΅ ΠΏΡΠ°Π·Π΅Π½ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ Π΄Π° ΠΏΡΠΈΠΌΠ° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ) ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π° ΡΠ°ΠΌΠΎ ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ΅ ΠΈΡΠΏΡΠ°ΡΠΈ ΡΠ΅Π»ΠΈΠΎΡ Π±Π°ΡΡ Π½Π°Π΄Π²ΠΎΡ. Π ΠΎΠ²Π΄Π΅ ΠΎΠ²Π° Π·Π½Π°ΠΌΠ΅Π½ΡΠ΅ Π΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΎ ΠΎΡΠΊΠ°ΠΊΠΎ Π±Π°ΡΡΠΎΡ Π΅ Π²ΠΌΠ΅ΡΠ½Π°Ρ Π²ΠΎ Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΈΠΎΡ ΡΠ΅Π³ΠΈΡΡΠ°Ρ Π·Π° ΠΏΠΎΠΌΠ΅ΡΡΡΠ²Π°ΡΠ΅. ΠΠΈΠ΄Π΅ΡΡΠΈ ΡΠ΅ ΡΡΡΠΊΠ° ΡΠ°ΠΌΡ ΡΠΎ ΡΠΈΡΠ΅ Π±ΠΈΡΠΎΠ²ΠΈ Π²ΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅ (ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ), Π° ΠΏΠΎΡΠΎΠ° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π°Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, TXE ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π° ΠΏΡΠ΅Π΄ Π±Π°ΡΡΠΎΡ ΡΠ΅Π»ΠΎΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΡΠΏΡΠ°ΡΠΈ. ΠΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π°ΡΠΎΠ° ΡΡΠΎ Π²ΠΎ ΡΠ»ΡΡΠ°ΡΠΎΡ ΡΠΎ Π½Π°ΡΠΈΠΎΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π» Π·Π° LED, ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ ΠΏΠΎΠ²Π»Π΅ΡΠ΅ΠΌΠ΅ ΠΈΠ³Π»Π°ΡΠ° LAT ΠΏΠΎ ΠΈΡΠΏΡΠ°ΡΠ°ΡΠ΅ΡΠΎ Π‘ΠΈΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Ρ.Π΅. Π‘Π°ΠΌΠΎ Π·Π½Π°ΠΌΠ΅ΡΠΎ TXE Π½Π΅ΠΌΠ° Π΄Π° Π½ΠΈ Π±ΠΈΠ΄Π΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ.
Π’ΠΎΠ° Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° Π½ΠΈ ΡΡΠ΅Π±Π° ΡΡΡΠ΅ Π΅Π΄Π½ΠΎ Π·Π½Π°ΠΌΠ΅. ΠΡΠ΄Π΅ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ Π²ΠΎ 25.3.7 - βΠΠ½Π°ΠΌΠΈΡΠ° Π·Π° ΡΡΠ°ΡΡΡβ:
<β¦>
ΠΠ°ΡΠ°ΡΠ΅Π½ΠΎ Π·Π½Π°ΠΌΠ΅
ΠΠ½Π°ΠΌΠ΅ΡΠΎ BSY Π΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΎ ΠΈ Π±ΡΠΈΡΠ΅Π½ΠΎ ΡΠΎ Ρ
Π°ΡΠ΄Π²Π΅Ρ (ΠΏΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π½Π΅Π³ΠΎ Π½Π΅ΠΌΠ° Π΅ΡΠ΅ΠΊΡ). ΠΠ½Π°ΠΌΠ΅ΡΠΎ BSY ΡΠ° ΠΎΠ·Π½Π°ΡΡΠ²Π° ΡΠΎΡΡΠΎΡΠ±Π°ΡΠ° Π½Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΠΊΠΈΠΎΡ ΡΠ»ΠΎΡ SPI.
Π‘Π΅ ΡΠ΅ΡΠ΅ΡΠΈΡΠ°:
ΠΊΠΎΠ³Π° ΠΏΡΠ΅Π½ΠΎΡΠΎΡ Π΅ Π·Π°Π²ΡΡΠ΅Π½ (ΠΎΡΠ²Π΅Π½ Π²ΠΎ Π³Π»Π°Π²Π½ΠΈΠΎΡ ΡΠ΅ΠΆΠΈΠΌ Π°ΠΊΠΎ ΠΏΡΠ΅Π½ΠΎΡΠΎΡ Π΅ ΠΊΠΎΠ½ΡΠΈΠ½ΡΠΈΡΠ°Π½)
ΠΊΠΎΠ³Π° SPI Π΅ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½
ΠΊΠΎΠ³Π° ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ°Π²ΠΈ Π³ΡΠ΅ΡΠΊΠ° Π²ΠΎ Π³Π»Π°Π²Π½ΠΈΠΎΡ ΡΠ΅ΠΆΠΈΠΌ (MODF=1)
ΠΠΊΠΎ ΠΏΡΠ΅Π½ΠΎΡΠΎΡ Π½Π΅ Π΅ ΠΊΠΎΠ½ΡΠΈΠ½ΡΠΈΡΠ°Π½, Π·Π½Π°ΠΌΠ΅ΡΠΎ BSY ΡΠ΅ Π±ΡΠΈΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡ ΡΠ΅ΠΊΠΎΡ ΠΏΡΠ΅Π½ΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ
ΠΠΎΠ±ΡΠΎ, ΠΎΠ²Π° ΡΠ΅ Π½ΠΈ ΡΠ΅ Π½Π°ΡΠ΄Π΅. ΠΡΠ΄Π΅ Π΄Π° Π΄ΠΎΠ·Π½Π°Π΅ΠΌΠ΅ ΠΊΠ°Π΄Π΅ ΡΠ΅ Π½Π°ΠΎΡΠ° ΡΠ°ΠΌΠΏΠΎΠ½ΠΎΡ Tx. ΠΠ° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π°, ΠΏΡΠΎΡΠΈΡΠ°ΡΡΠ΅ βΠ Π΅Π³ΠΈΡΡΠ°Ρ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ SPIβ:
ΠΠΈΡΠΎΠ²ΠΈ 15:0 DR[15:0] Π Π΅Π³ΠΈΡΡΠ°Ρ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ
ΠΡΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΠ°Ρ.
Π Π΅Π³ΠΈΡΡΠ°ΡΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π΅ ΠΏΠΎΠ΄Π΅Π»Π΅Π½ Π½Π° Π΄Π²Π° Π±Π°ΡΠ΅ΡΠΈ - Π΅Π΄Π΅Π½ Π·Π° Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅ (ΡΠ°ΠΌΠΏΠΎΠ½ Π·Π° ΠΏΡΠ΅Π½ΠΎΡ) ΠΈ Π΅Π΄Π΅Π½ Π·Π° ΡΠΈΡΠ°ΡΠ΅ (ΡΠ°ΠΌΠΏΠΎΠ½ Π·Π° ΠΏΡΠΈΠΌΠ°ΡΠ΅). ΠΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π° Π²ΠΎ Π±Π°ΡΠ΅ΡΠΎΡ Tx, Π° ΡΠΈΡΠ°ΡΠ΅ΡΠΎ ΠΎΠ΄ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠ΅ ΡΠ° Π²ΡΠ°ΡΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° ΡΠΎΠ΄ΡΠΆΠ°Π½Π° Π²ΠΎ Π±Π°ΡΠ΅ΡΠΎΡ Rx.
ΠΠ°, ΠΈ ΡΡΠ°ΡΡΡΠ½ΠΈΠΎΡ ΡΠ΅Π³ΠΈΡΡΠ°Ρ, ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΡΠ΅ Π½Π°ΠΎΡΠ°Π°Ρ Π·Π½Π°ΠΌΠΈΡΠ°ΡΠ° TXE ΠΈ BSY:
ΠΠΈΠ΅ ΠΏΠΈΡΡΠ²Π°ΠΌΠ΅:
#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, ΠΏΠ° ΡΠ΅ ΡΠ΅ Π²ΡΠ°ΡΠΈΠΌΠ΅ Π½Π° Π/Π.
ΠΠΎΠ΄Π΅Π»ΡΠ²Π°ΡΠ΅ ΠΈΠ³Π»ΠΈΡΠΊΠΈ
ΠΠΎ STM32F1, ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ½ΠΈ Π·Π° ΡΠΎΡΡΠΎΡΠ±Π°ΡΠ° Π½Π° ΠΏΠΈΠ½ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅ ΡΠΎΡΠ΅ΠΌΠ° Π½Π΅Π²ΠΎΠΎΠ±ΠΈΡΠ°Π΅Π½ΠΈ. ΠΠ°ΡΠ½ΠΎ Π΅ Π΄Π΅ΠΊΠ° Π³ΠΈ ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ Atmega, Π½ΠΎ ΡΠΈΠ΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΡΠ²Π°Π°Ρ ΠΈ ΠΎΠ΄ Π΄ΡΡΠ³ΠΈΡΠ΅ STM ΡΠΈΠΏΠΎΠ²ΠΈ. ΠΠ΅Π» 9.1 ΠΠΏΡΡ ΠΎΠΏΠΈΡ Π½Π° GPIO:
Π‘Π΅ΠΊΠΎΡΠ° ΠΎΠ΄ Π²Π»Π΅Π·Π½ΠΈΡΠ΅/ΠΈΠ·Π»Π΅Π·Π½ΠΈ ΠΏΠΎΡΡΠΈ Π·Π° ΠΎΠΏΡΡΠ° Π½Π°ΠΌΠ΅Π½Π° (GPIO) ΠΈΠΌΠ° Π΄Π²Π° 32-Π±ΠΈΡΠ½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΊΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈ (GPIOx_CRL ΠΈ GPIOx_CRH), Π΄Π²Π° 32-Π±ΠΈΡΠ½ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ (GPIOx_IDR ΠΈ GPIOx_ODR), 32-Π±ΠΈΡΠ΅Π½ ΡΠ΅Π³ΠΈΡΡΠ΅Ρ Π·Π° ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅/ΡΠ΅ΡΠ΅ΡΠΈΡΠ°ΡΠ΅ (GPIOx_BSRR), 16-Π±ΠΈΡΠ΅Π½ ΡΠ΅Π³ΠΈΡΡΠ°Ρ Π·Π° ΡΠ΅ΡΠ΅ΡΠΈΡΠ°ΡΠ΅ (GPIOx_BRR) ΠΈ ΡΠ΅Π³ΠΈΡΡΠ°Ρ Π·Π° Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ Π½Π° Π±ΠΈΡΠΎΠ²ΠΈ (GPIOx_LCKR).
ΠΡΠ²ΠΈΡΠ΅ Π΄Π²Π° ΡΠ΅Π³ΠΈΡΡΡΠΈ ΡΠ΅ Π½Π΅Π²ΠΎΠΎΠ±ΠΈΡΠ°Π΅Π½ΠΈ, Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π΄ΠΎΡΡΠ° Π½Π΅Π·Π³ΠΎΠ΄Π½ΠΈ, Π±ΠΈΠ΄Π΅ΡΡΠΈ 16-ΡΠ΅ ΠΏΠΈΠ½ΠΎΠ²ΠΈ Π½Π° ΠΏΠΎΡΡΠΈΡΠ΅ ΡΠ΅ ΡΠ°ΡΡΡΠ»Π°Π½ΠΈ Π½ΠΈΠ· Π½ΠΈΠ² Π²ΠΎ ΡΠΎΡΠΌΠ°Ρ βΡΠ΅ΡΠΈΡΠΈ Π±ΠΈΡΠ° ΠΏΠΎ Π±ΡΠ°Ρβ. ΠΠ½ΠΈΠ΅. ΠΏΠΈΠ½ΠΎΠ²ΠΈΡΠ΅ ΠΎΠ΄ Π½ΡΠ»Π° Π΄ΠΎ ΡΠ΅Π΄ΡΠΌ ΡΠ΅ Π²ΠΎ CRL, Π° ΠΎΡΡΠ°Π½Π°ΡΠΈΡΠ΅ ΡΠ΅ Π²ΠΎ CRH. ΠΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅, ΠΏΡΠ΅ΠΎΡΡΠ°Π½Π°ΡΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π³ΠΈ ΡΠΎΠ΄ΡΠΆΠ°Ρ Π±ΠΈΡΠΎΠ²ΠΈ ΠΎΠ΄ ΡΠΈΡΠ΅ ΠΏΠΈΠ½ΠΎΠ²ΠΈ Π½Π° ΠΏΡΠΈΡΡΠ°Π½ΠΈΡΡΠ΅ΡΠΎ - ΡΠ΅ΡΡΠΎ ΠΎΡΡΠ°Π½ΡΠ²Π°Π°Ρ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° βΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠ°Π½ΠΈβ.
ΠΠ° Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎΡΡ, Π΄Π° ΠΏΠΎΡΠ½Π΅ΠΌΠ΅ ΠΎΠ΄ ΠΊΡΠ°ΡΠΎΡ Π½Π° Π»ΠΈΡΡΠ°ΡΠ°.
ΠΠ΅ Π½ΠΈ ΡΡΠ΅Π±Π° ΡΠ΅Π³ΠΈΡΡΠ°Ρ Π·Π° Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅.
Π Π΅Π³ΠΈΡΡΡΠΈΡΠ΅ Π·Π° ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΈ ΡΠ΅ΡΠ΅ΡΠΈΡΠ°ΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠΌΠ΅ΡΠ½ΠΈ ΠΏΠΎ ΡΠΎΠ° ΡΡΠΎ Π΄Π΅Π»ΡΠΌΠ½ΠΎ ΡΠ΅ Π΄ΡΠΏΠ»ΠΈΡΠ°Π°Ρ Π΅Π΄Π΅Π½ ΡΠΎ Π΄ΡΡΠ³: ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΓ¨ ΡΠ°ΠΌΠΎ Π²ΠΎ BSRR, ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΠΏΠΎΠ²ΠΈΡΠΎΠΊΠΈΡΠ΅ 16 Π±ΠΈΡΠ° ΡΠ΅ Π³ΠΎ ΡΠ΅ΡΠ΅ΡΠΈΡΠ°Π°Ρ ΠΏΠΈΠ½ΠΎΡ Π½Π° Π½ΡΠ»Π°, Π° Π΄ΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈ Π½Π° 1, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ BRR, ΠΎΠ΄ ΠΊΠΎΠΈ Π΄ΠΎΠ»Π½ΠΈΡΠ΅ 16 Π±ΠΈΡΠ° Π³ΠΎ ΡΠ΅ΡΠ΅ΡΠΈΡΠ°Π°Ρ ΡΠ°ΠΌΠΎ ΠΏΠΈΠ½ΠΎΡ. ΠΠΈ ΡΠ΅ Π΄ΠΎΠΏΠ°ΡΠ° Π²ΡΠΎΡΠ°ΡΠ° ΠΎΠΏΡΠΈΡΠ°. ΠΠ²ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ ΡΠ΅ Π²Π°ΠΆΠ½ΠΈ Π·Π°ΡΠΎΠ° ΡΡΠΎ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π°Π°Ρ Π°ΡΠΎΠΌΡΠΊΠΈ ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΠΏΠΈΠ½ΠΎΠ²ΠΈΡΠ΅:
ΠΡΠΎΠΌΡΠΊΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅ΡΠΈΡΠ°ΡΠ΅
ΠΠ΅ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°Π°Ρ ΠΏΡΠ΅ΠΊΠΈΠ½ΠΈΡΠ΅ ΠΏΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΡΠ΅ Π½Π° GPIOx_ODR Π½Π° Π½ΠΈΠ²ΠΎ Π½Π° Π±ΠΈΡΠΎΠ²ΠΈ: Π΅Π΄Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ Π±ΠΈΡΠΎΠ²ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΌΠ΅Π½Π°Ρ ΡΠΎ Π΅Π΄Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠ° Π·Π° Π°ΡΠΎΠΌΡΠΊΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅ APB2. ΠΠ²Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½ΡΠ²Π° ΡΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅ β1β Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ΅ΡΠΎΡ Π·Π° ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅/ΡΠ΅ΡΠ΅ΡΠΈΡΠ°ΡΠ΅ (GPIOx_BSRR ΠΈΠ»ΠΈ, ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅ΡΠΈΡΠ°ΡΠ΅, GPIOx_BRR) Π½Π° Π±ΠΈΡΠΎΡ ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ. ΠΡΡΠ³ΠΈΡΠ΅ Π±ΠΈΡΠΎΠ²ΠΈ ΡΠ΅ ΠΎΡΡΠ°Π½Π°Ρ Π½Π΅ΠΏΡΠΎΠΌΠ΅Π½Π΅ΡΠΈ.
Π Π΅Π³ΠΈΡΡΡΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈΠΌΠ°Π°Ρ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠ°ΠΌΠΎΠΎΠ±ΡΠ°ΡΠ½ΠΈΠ²ΠΈ ΠΈΠΌΠΈΡΠ° - IDR = ΠΠ½Π΅ΡΠ΅ΡΠ΅ Π Π΅Π³ΠΈΡΡΠ°Ρ Π½Π° Π½Π°ΡΠΎΠΊΠΈ, ΡΠ΅Π³ΠΈΡΡΠ°Ρ Π½Π° Π²Π»Π΅Π·ΠΎΠ²ΠΈ; ODR = ΠΈΠ·Π»Π΅Π· Π Π΅Π³ΠΈΡΡΠ°Ρ Π½Π° Π½Π°ΡΠΎΠΊΠ°, ΡΠ΅Π³ΠΈΡΡΠ΅Ρ Π·Π° ΠΈΠ·Π»Π΅Π·. ΠΠ΅ΠΌΠ° Π΄Π° Π½ΠΈ ΡΡΠ΅Π±Π°Π°Ρ Π²ΠΎ ΡΠ΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ.
Π ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ. ΠΠΈΠ΄Π΅ΡΡΠΈ ΡΠΌΠ΅ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ°Π½ΠΈ Π·Π° Π²ΡΠΎΡΠΈΡΠ΅ SPI ΠΏΠΈΠ½ΠΎΠ²ΠΈ, ΠΈΠΌΠ΅Π½ΠΎ PB13, PB14 ΠΈ PB15, Π²Π΅Π΄Π½Π°Ρ Π³ΠΎ ΡΠ°Π·Π³Π»Π΅Π΄ΡΠ²Π°ΠΌΠ΅ CRH:
Π Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌΠ΅ Π½Π΅ΡΡΠΎ Π²ΠΎ Π±ΠΈΡΠΎΠ²ΠΈ ΠΎΠ΄ 20 Π΄ΠΎ 31.
ΠΠΎΠ³ΠΎΡΠ΅ Π²Π΅ΡΠ΅ ΡΡΠ°ΡΠΈΠ²ΠΌΠ΅ ΡΡΠΎ ΡΠ°ΠΊΠ°ΠΌΠ΅ ΠΎΠ΄ ΠΏΠΈΠ½ΠΎΠ²ΠΈΡΠ΅, ΠΏΠ° ΡΡΠΊΠ° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π°ΠΌ Π±Π΅Π· ΡΠ»ΠΈΠΊΠ° ΠΎΠ΄ Π΅ΠΊΡΠ°Π½ΠΎΡ, ΡΠ°ΠΌΠΎ ΡΠ΅ ΠΊΠ°ΠΆΠ°ΠΌ Π΄Π΅ΠΊΠ° MODE ΡΠ° ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π° Π½Π°ΡΠΎΠΊΠ°ΡΠ° (Π²Π»Π΅Π· Π°ΠΊΠΎ Π΄Π²Π°ΡΠ° Π±ΠΈΡΠ° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈ Π½Π° 0) ΠΈ Π±ΡΠ·ΠΈΠ½Π°ΡΠ° Π½Π° ΠΏΠΈΠ½ΠΎΠ²ΠΈΡΠ΅ (Π½ΠΈ ΡΡΠ΅Π±Π°Π°Ρ 50 MHz, Ρ.Π΅. ΠΈ Π΄Π²Π΅ΡΠ΅ ΠΏΠΈΠ½ΠΎΠ²ΠΈ Π½Π° β1β), Π° CNF Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π° ΡΠ΅ΠΆΠΈΠΌΠΎΡ: ΡΠ΅Π΄ΠΎΠ²Π½ΠΎ βpush-pullβ β 00, βalternativeβ β 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
ΠΠ°ΡΠΈΡΠ΅ ΠΏΠΈΠ½ΠΎΠ²ΠΈ ΡΠ΅ Π½Π°ΠΎΡΠ°Π°Ρ Π½Π° ΠΏΠΎΡΡΠ°ΡΠ° Π (Π±Π°Π·Π½Π° Π°Π΄ΡΠ΅ΡΠ° β 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, ΡΠΈΠ΅ Π·Π°ΡΡΠ΅Π΄ΡΠ²Π°Π°Ρ ΡΡΡΡΡΠ°, ΡΡΠΎ Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° ΡΡΠ΅Π±Π° Π΄Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈΡΠ΅ ΡΠ°ΠΊΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΈ.
ΠΠΊΠ»ΡΡΠ΅ΡΠ΅ Π³ΠΎ ΡΠ°ΠΊΡΠΈΡΠ°ΡΠ΅ΡΠΎ
Π§Π°ΡΠΎΠ²Π½ΠΈΠΊΠΎΡ, ΠΏΠΎΠ·Π½Π°Ρ ΠΈ ΠΊΠ°ΠΊΠΎ Π§Π°ΡΠΎΠ²Π½ΠΈΠΊ, Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΡΠ°ΠΊΡ. Π Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅Π²ΠΌΠ΅ Π΄Π° ΡΠ° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠ΅ ΠΊΡΠ°ΡΠ΅Π½ΠΊΠ°ΡΠ° RCC. ΠΠΎ Π±Π°ΡΠ°ΠΌΠ΅ Π²ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ°: ΠΎΠ²Π° Π΅ Π Π΅ΡΠ΅ΡΠΈΡΠ°ΡΠ΅ ΠΈ ΠΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠΎΡ.
ΠΠ°ΠΊΠΎ ΡΡΠΎ Π±Π΅ΡΠ΅ ΠΊΠ°ΠΆΠ°Π½ΠΎ ΠΏΠΎΠ³ΠΎΡΠ΅, Π·Π° ΡΡΠ΅ΡΠ°, Π½Π°ΡΡΠ΅ΡΠΊΠΈΠΎΡ Π΄Π΅Π» ΠΎΠ΄ ΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΡΠ°ΠΊΡ Π½ΠΈ Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ° Π»ΡΡΠ΅ ΠΎΠ΄ Π‘Π’Π, Π·Π° ΡΡΠΎ ΠΈΠΌ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠΈΠΌΠ΅ ΠΌΠ½ΠΎΠ³Ρ (ΡΡΡΠ΅ Π΅Π΄Π½Π°Ρ ΡΠ΅ Π΄Π°Π΄Π°ΠΌ Π»ΠΈΠ½ΠΊ Π΄ΠΎ
#define _RCC_(mem_offset) (*(volatile uint32_t *)(0x40021000 + (mem_offset)))
Π ΠΏΠΎΡΠΎΠ° ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π½Π° Π²ΡΡΠΊΠ°ΡΠ° ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°ΡΠ΅ Π΄Π° Π½Π°ΡΠ΄Π΅ΡΠ΅ Π½Π΅ΡΡΠΎ Π²ΠΎ ΠΏΠ»ΠΎΡΠ°ΡΠ° ΠΈΠ»ΠΈ, ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ, ΠΏΠΎΠΌΠΈΠ½Π΅ΡΠ΅ Π½ΠΈΠ· ΠΎΠΏΠΈΡΠΈΡΠ΅ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅ Π·Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°ΡΠ΅ ΠΎΠ΄ Π΄Π΅Π»ΠΎΠ²ΠΈΡΠ΅ Π·Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈ. ΠΠ°Π΄Π΅ ΡΠ΅ Π³ΠΈ Π½Π°ΡΠ΄Π΅ΠΌΠ΅ RCC_APB1ENR ΠΈ RCC_APB2ENR:
Π ΡΠΈΠ΅, ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ, ΡΠΎΠ΄ΡΠΆΠ°Ρ Π±ΠΈΡΠΎΠ²ΠΈ ΠΊΠΎΠΈ Π²ΠΊΠ»ΡΡΡΠ²Π°Π°Ρ ΡΠ°ΠΊΡΠΈΡΠ°ΡΠ΅ Π½Π° SPI2, IOPB (I/O Port 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 Π²ΠΎΠ»ΡΠΈ, Π½Π΅ Π·Π°Π±ΠΎΡΠ°Π²Π°ΡΡΠ΅ Π΄Π° Π³ΠΈ ΠΏΠΎΠ²ΡΠ·Π΅ΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΈΡΠ΅.
STM8 PWM
PWM Π½Π° STM8
ΠΠΎΠ³Π° ΡΠ°ΠΌΠΎ ΡΠ° ΠΏΠ»Π°Π½ΠΈΡΠ°Π² ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ°, ΡΠ΅ΡΠΈΠ², ΠΊΠ°ΠΊΠΎ ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π°ΠΌ Π΄Π° ΡΠΎΠ²Π»Π°Π΄Π°ΠΌ Π½Π΅ΠΊΠΎΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π½Π° Π½Π΅ΠΏΠΎΠ·Π½Π°Ρ ΡΠΈΠΏ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ°ΠΌΠΎ Π»ΠΈΡΡ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Π·Π° Π΄Π° Π½Π΅ Π·Π°Π²ΡΡΠ°ΠΌ ΡΠΎ ΡΠ΅Π²Π»Π°Ρ Π±Π΅Π· ΡΠΈΠ·ΠΌΠΈ. STM8 Π±Π΅ΡΠ΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½ Π·Π° ΠΎΠ²Π°Π° ΡΠ»ΠΎΠ³Π°: ΠΏΡΠ²ΠΎ, ΠΈΠΌΠ°Π² Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΊΠΈΠ½Π΅ΡΠΊΠΈ ΡΠ°Π±Π»ΠΈ ΡΠΎ STM8S103, ΠΈ Π²ΡΠΎΡΠΎ, Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠΏΡΠ»Π°ΡΠ΅Π½, ΠΈ Π·Π°ΡΠΎΠ° ΠΈΡΠΊΡΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ° ΠΈ Π΄Π° ΡΠ΅ Π½Π°ΡΠ΄Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΏΠΎΡΠΈΠ²Π° Π½Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊΠΎΡ Π½Π° ΡΠΎΠΊΠΌΡ ΠΎΠ²ΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡΠ°.
Π§ΠΈΠΏΠΎΡ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈΠΌΠ°
ΠΠ»ΠΎΠΊΠΈΡΠ°ΡΠ΅ ΠΈ Π/Π
Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ, STM8 ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ° ΠΎΠ΄ 2 MHz, ΠΎΠ²Π° ΠΌΠΎΡΠ° Π²Π΅Π΄Π½Π°Ρ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°.
HSI (ΠΠ½Π°ΡΡΠ΅ΡΠ΅Π½) ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ ΡΠΎ Π³ΠΎΠ»Π΅ΠΌΠ° Π±ΡΠ·ΠΈΠ½Π°
HSI ΡΠ°ΠΊΡ-ΡΠΈΠ³Π½Π°Π»ΠΎΡ Π΅ ΠΈΠ·Π²Π΅Π΄Π΅Π½ ΠΎΠ΄ Π²Π½Π°ΡΡΠ΅ΡΠ΅Π½ RC ΠΎΡΡΠΈΠ»Π°ΡΠΎΡ ΠΎΠ΄ 16 MHz ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°Π±ΠΈΠ»Π΅Π½ Π΄Π΅Π»ΠΈΡΠ΅Π» (1 Π΄ΠΎ 8). Π’ΠΎΡ Π΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½ Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ Π·Π° Π΄Π΅Π»ΠΈΡΠ΅Π» Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠΎΡ (CLK_CKDIVR).
ΠΠ°Π±Π΅Π»Π΅ΡΠΊΠ°: Π½Π° ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ, HSI RC ΠΎΡΡΠΈΠ»Π°ΡΠΎΡ ΡΠΎ Π΄Π΅Π»ΠΈΡΠ΅Π» 8 Π΅ ΠΈΠ·Π±ΡΠ°Π½ ΠΊΠ°ΠΊΠΎ Π²ΠΎΠ΄Π΅ΡΠΊΠΈ ΠΈΠ·Π²ΠΎΡ Π½Π° ΡΠΈΠ³Π½Π°Π»ΠΎΡ Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠΎΡ.
ΠΠ° Π½Π°ΠΎΡΠ°ΠΌΠ΅ Π°Π΄ΡΠ΅ΡΠ°ΡΠ° Π½Π° ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ Π²ΠΎ Π»ΠΈΡΡΠΎΡ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, ΠΎΠΏΠΈΡΠΎΡ Π²ΠΎ refman ΠΈ Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΈΡΡΠΈΡΡΠΈ:
#define CLK_CKDIVR *(volatile uint8_t *)0x0050C6
CLK_CKDIVR &= ~(0x18);
ΠΠΈΠ΄Π΅ΡΡΠΈ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈΠΌΠ΅ PWM ΠΈ ΡΠ΅ Π³ΠΈ ΠΏΠΎΠ²ΡΠ·Π΅ΠΌΠ΅ LED Π΄ΠΈΠΎΠ΄ΠΈΡΠ΅, Π°ΡΠ΄Π΅ Π΄Π° Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΏΠΈΠ½Π°ΡΡΠΎΡ:
Π§ΠΈΠΏΠΎΡ Π΅ ΠΌΠ°Π», ΠΌΠ½ΠΎΠ³Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ ΡΡΡΠΏΠ΅Π½Π΄ΠΈΡΠ°Π½ΠΈ Π½Π° ΠΈΡΡΠΈΡΠ΅ ΠΏΠΈΠ½ΠΎΠ²ΠΈ. ΠΠ½Π° ΡΡΠΎ Π΅ Π²ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΈ Π·Π°Π³ΡΠ°Π΄ΠΈ Π΅ βΠ°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡβ, ΡΠ΅ ΠΏΡΠ΅ΡΡΠ»Π° ΡΠΎ βΠ±Π°ΡΡΠΈ Π·Π° ΠΎΠΏΡΠΈΡΠ°β (Π±Π°ΡΡΠΈ Π½Π° ΠΎΠΏΡΠΈΠΈ) β Π½Π΅ΡΡΠΎ ΠΊΠ°ΠΊΠΎ Atmega ΠΎΡΠΈΠ³ΡΡΡΠ²Π°ΡΠΈ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ ΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ Π½ΠΈΠ²Π½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ, Π½ΠΎ ΡΠΎΠ° Π½Π΅ Π΅ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΎ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΠΎΠ²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅. ΠΠΎΠ»Π΅ΡΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ST Visual Programmer (ΠΏΡΠ΅Π·Π΅ΠΌΠ΅Π½ ΡΠΎ Visual Develop), ΠΊΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΎΠ²ΠΈΠ΅ Π±Π°ΡΡΠΈ. ΠΡΠΈΠΊΠ°Π·ΠΎΡ ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π° Π΄Π΅ΠΊΠ° ΠΏΠΈΠ½ΠΎΠ²ΠΈΡΠ΅ CH1 ΠΈ CH2 Π½Π° ΠΏΡΠ²ΠΈΠΎΡ ΡΠ°ΡΠΌΠ΅Ρ ΡΠ΅ ΡΠΊΡΠΈΠ΅Π½ΠΈ Π²ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΈ Π·Π°Π³ΡΠ°Π΄ΠΈ; ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Π°Ρ Π±ΠΈΡΠΎΠ²ΠΈΡΠ΅ AFR1 ΠΈ AFR0 Π²ΠΎ STVP, Π° Π²ΡΠΎΡΠΈΠΎΡ ΡΠ΅ Π³ΠΎ ΠΏΡΠ΅Π½Π΅ΡΠ΅ ΠΈ ΠΈΠ·Π»Π΅Π·ΠΎΡ CH1 Π½Π° Π²ΡΠΎΡΠΈΠΎΡ ΡΠ°ΡΠΌΠ΅Ρ ΠΎΠ΄ PD4 Π½Π° PC5.
Π’Π°ΠΊΠ°, 6 ΠΏΠΈΠ½Π° ΡΠ΅ Π³ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π°Ρ LED Π΄ΠΈΠΎΠ΄ΠΈΡΠ΅: PC6, PC7 ΠΈ PC3 Π·Π° ΠΏΡΠ²ΠΈΠΎΡ ΡΠ°ΡΠΌΠ΅Ρ, PC5, PD3 ΠΈ PA3 Π·Π° Π²ΡΠΎΡΠΈΠΎΡ.
ΠΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΌΠΈΡΠ΅ I/O ΠΏΠΈΠ½ΠΎΠ²ΠΈ Π½Π° STM8 Π΅ ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΈ ΠΏΠΎΠ»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΎΡΠΊΠΎΠ»ΠΊΡ Π½Π° STM32:
- ΠΏΠΎΠ·Π½Π°Ρ ΠΎΠ΄ ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ Π·Π° Π½Π°ΡΠΎΠΊΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Atmega DDR (Π Π΅Π³ΠΈΡΡΠ°Ρ Π·Π° Π½Π°ΡΠΎΠΊΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ): 1 = ΠΈΠ·Π»Π΅Π·;
- ΠΏΡΠ²ΠΈΠΎΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΡΠ΅Π³ΠΈΡΡΠ΅Ρ CR1, ΠΊΠΎΠ³Π° ΠΈΠ·Π»Π΅Π³ΡΠ²Π°, Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π° ΡΠ΅ΠΆΠΈΠΌΠΎΡ Π·Π° ΠΏΡΠΈΡΠΈΡΠΊΠ°ΡΠ΅ (1) ΠΈΠ»ΠΈ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΎΠ΄Π²ΠΎΠ΄ (0); Π±ΠΈΠ΄Π΅ΡΡΠΈ Π³ΠΈ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΠΌ LED Π΄ΠΈΠΎΠ΄ΠΈΡΠ΅ ΡΠΎ ΡΠΈΠΏΠΎΡ ΡΠΎ ΠΊΠ°ΡΠΎΠ΄ΠΈ, ΠΎΡΡΠ°Π²Π°ΠΌ Π½ΡΠ»ΠΈ ΠΎΠ²Π΄Π΅;
- Π²ΡΠΎΡΠΈΠΎΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΡΠ΅Π³ΠΈΡΡΠ°Ρ CR2, ΠΊΠΎΠ³Π° ΠΈΠ·Π»Π΅Π³ΡΠ²Π°, ΡΠ° ΠΏΠΎΡΡΠ°Π²ΡΠ²Π° Π±ΡΠ·ΠΈΠ½Π°ΡΠ° Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠΎΡ: 1 = 10 MHz
#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 Duty Cycle β Π¦ΠΈΠΊΠ»ΡΡ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° PWM, ΡΠ΅ΡΡΠΎ Π½Π°ΡΠ΅ΡΠ΅Π½ βΡΠ°ΠΊΡΠΎΡ Π½Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎΡΡβ;
- Π‘Π½ΠΈΠΌΠ°ΡΡΠ΅/Π‘ΠΏΠΎΡΠ΅Π΄ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡ β Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π·Π° ΡΠ½ΠΈΠΌΠ°ΡΠ΅/ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅, Π½Π° ΠΊΠΎΡΠ° Π±ΡΠΎΠ΅Π» ΡΠ°ΡΠΌΠ΅ΡΠΎΡ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π½Π΅ΡΡΠΎ (Π²ΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° PWM, Π³ΠΎ ΠΏΡΠ΅Π²ΡΡΡΠ²Π° ΠΈΠ·Π»Π΅Π·Π½ΠΈΠΎΡ ΡΠΈΠ³Π½Π°Π»);
- ΠΡΠ΅Π΄Π½ΠΎΡΡ ΠΏΡΠ΅Π΄ Π²ΡΠΈΡΡΠ²Π°ΡΠ΅ β ΠΎΠ΄Π½Π°ΠΏΡΠ΅Π΄ Π²ΡΠΈΡΠ°Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ. Π‘ΠΏΠΎΡΠ΅Π΄Π΅ΡΠ΅ ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π΄ΠΎΠ΄Π΅ΠΊΠ° ΡΠ°ΡΠΌΠ΅ΡΠΎΡ ΠΎΡΡΡΠΊΡΠ²Π°, ΠΈΠ½Π°ΠΊΡ ΡΠΈΠΊΠ»ΡΡΠΎΡ PWM ΡΠ΅ ΡΠ΅ ΠΏΡΠ΅ΠΊΠΈΠ½Π΅. ΠΠ°ΡΠΎΠ°, Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΠ΅Π½ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΡΠ΅ ΡΡΠ°Π²Π°Π°Ρ Π²ΠΎ Π±Π°ΡΠ΅Ρ ΠΈ ΡΠ΅ ΠΈΠ·Π²Π»Π΅ΠΊΡΠ²Π°Π°Ρ ΠΊΠΎΠ³Π° ΡΠ°ΡΠΌΠ΅ΡΠΎΡ ΡΠ΅ Π³ΠΎ Π΄ΠΎΡΡΠΈΠ³Π½Π΅ ΠΊΡΠ°ΡΠΎΡ Π½Π° ΡΠ²ΠΎΠ΅ΡΠΎ ΠΎΠ΄Π±ΡΠΎΡΡΠ²Π°ΡΠ΅ ΠΈ ΡΠ΅ ΡΠ΅ ΡΠ΅ΡΠ΅ΡΠΈΡΠ°;
- ΠΠΎΡΠ°ΠΌΠ½Π΅ΡΠΈ Π½Π° ΡΠ°Π±ΠΎΡ ΠΈ Π Π΅ΠΆΠΈΠΌΠΈ ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ Π²ΠΎ ΡΠ΅Π½ΡΠ°ΡΠΎΡ β ΠΏΠΎΡΠ°ΠΌΠ½ΡΠ²Π°ΡΠ΅ Π΄ΠΎΠ»ΠΆ Π³ΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΈ Π²ΠΎ ΡΠ΅Π½ΡΠ°ΡΠΎΡ, ΠΈΡΡΠΎ ΠΊΠ°ΠΊΠΎ ΠΈ ΠΡΠΌΠ΅Π» ΠΡΠ· PWM ΠΈ Π€Π°Π·Π°-ΡΠΎΡΠ΅Π½ PWM.
- OCiREF, ΠΠ·Π»Π΅Π·Π΅Π½ ΡΠΏΠΎΡΠ΅Π΄Π΅Π½ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ΅Π½ ΡΠΈΠ³Π½Π°Π» β ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ΅Π½ ΠΈΠ·Π»Π΅Π·Π΅Π½ ΡΠΈΠ³Π½Π°Π», Π²ΡΡΡΠ½ΠΎΡΡ, ΠΎΠ½Π° ΡΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ°Π²ΡΠ²Π° Π½Π° ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΈΠΎΡ ΠΏΠΈΠ½ Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌΠΎΡ PWM.
ΠΠ°ΠΊΠΎ ΡΡΠΎ Π΅ Π²Π΅ΡΠ΅ ΡΠ°ΡΠ½ΠΎ ΠΎΠ΄ ΠΏΠΈΠ½Π°ΡΡΠΎΡ, Π΄Π²Π° ΡΠ°ΡΠΌΠ΅ΡΠΈ ββΠΈΠΌΠ°Π°Ρ PWM ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ β ΠΏΡΠ²ΠΈΠΎΡ ΠΈ Π²ΡΠΎΡΠΈΠΎΡ. Π Π΄Π²Π΅ΡΠ΅ ΡΠ΅ 16-Π±ΠΈΡΠ½ΠΈ, ΠΏΡΠ²ΠΈΠΎΡ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ (ΠΎΡΠΎΠ±Π΅Π½ΠΎ, ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠΎΠΈ ΠΈ Π½Π°Π³ΠΎΡΠ΅ ΠΈ Π½Π°Π΄ΠΎΠ»Ρ). ΠΠΈ ΡΡΠ΅Π±Π° ΠΈ Π΄Π²Π΅ΡΠ΅ Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΌΠ΅ ΠΏΠΎΠ΄Π΅Π΄Π½Π°ΠΊΠ²ΠΎ, ΠΏΠ° ΡΠ΅ΡΠΈΠ² Π΄Π° ΠΏΠΎΡΠ½Π°ΠΌ ΡΠΎ ΠΎΡΠΈΠ³Π»Π΅Π΄Π½ΠΎ ΠΏΠΎΡΠ»Π°Π±Π°ΡΠ° Π²ΡΠΎΡΠ°, Π·Π° ΡΠ»ΡΡΠ°ΡΠ½ΠΎ Π΄Π° Π½Π΅ ΠΈΡΠΊΠΎΡΠΈΡΡΠ°ΠΌ Π½Π΅ΡΡΠΎ ΡΡΠΎ Π³ΠΎ Π½Π΅ΠΌΠ°. ΠΠ΅ΠΊΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΅ ΡΡΠΎ ΠΎΠΏΠΈΡΠΎΡ Π½Π° PWM ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠ° Π½Π° ΡΠΈΡΠ΅ ΡΠ°ΡΠΌΠ΅ΡΠΈ ββΠ²ΠΎ ΡΠΏΠ°ΡΡΡΠ²ΠΎΡΠΎ Π·Π° ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°ΡΠ΅ Π΅ Π²ΠΎ ΠΏΠΎΠ³Π»Π°Π²ΡΠ΅ΡΠΎ Π·Π° ΠΏΡΠ²ΠΈΠΎΡ ΡΠ°ΡΠΌΠ΅Ρ (17.5.7 PWM ΡΠ΅ΠΆΠΈΠΌ), ΡΠ°ΠΊΠ° ΡΡΠΎ ΠΌΠΎΡΠ° ΠΏΠΎΡΡΠΎΡΠ°Π½ΠΎ Π΄Π° ΡΠΊΠΎΠΊΠ°ΡΠ΅ Π½Π°ΠΏΡΠ΅Π΄-Π½Π°Π·Π°Π΄ Π½ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΡ.
PWM Π½Π° STM8 ΠΈΠΌΠ° Π²Π°ΠΆΠ½Π° ΠΏΡΠ΅Π΄Π½ΠΎΡΡ Π²ΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° PWM Π½Π° Atmega:
ΠΠΎΡΠ°ΠΌΠ½Π΅ΡΠΈ Π³ΡΠ°Π½ΠΈΡΠΈ 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):
110: ΠΡΠ² PWM ΡΠ΅ΠΆΠΈΠΌ β ΠΊΠΎΠ³Π° ΡΠ΅ Π±ΡΠΎΠΈ ΠΎΠ΄ Π΄Π½ΠΎΡΠΎ Π½Π°Π³ΠΎΡΠ΅, ΠΏΡΠ²ΠΈΠΎΡ ΠΊΠ°Π½Π°Π» Π΅ Π°ΠΊΡΠΈΠ²Π΅Π½ Π΄ΠΎΠ΄Π΅ΠΊΠ° TIMx_CNT < TIMx_CCR1. ΠΠΎ ΡΠΏΡΠΎΡΠΈΠ²Π½ΠΎ, ΠΏΡΠ²ΠΈΠΎΡ ΠΊΠ°Π½Π°Π» Π΅ Π½Π΅Π°ΠΊΡΠΈΠ²Π΅Π½. [ΠΠΎΠ½Π°ΡΠ°ΠΌΡ Π²ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΡ ΠΈΠΌΠ° ΠΏΠΎΠ³ΡΠ΅ΡΠ½Π° ΠΊΠΎΠΏΠΈΡΠ°-Π»Π΅ΠΏΠ΅ΡΠ΅ ΠΎΠ΄ ΡΠ°ΡΠΌΠ΅ΡΠΎΡ 1] 111: ΠΡΠΎΡ ΡΠ΅ΠΆΠΈΠΌ PWM β ΠΊΠΎΠ³Π° ΡΠ΅ Π±ΡΠΎΠΈ ΠΎΠ΄ Π΄Π½ΠΎΡΠΎ ΠΊΠΎΠ½ Π²ΡΠ²ΠΎΡ, ΠΏΡΠ²ΠΈΠΎΡ ΠΊΠ°Π½Π°Π» Π΅ Π½Π΅Π°ΠΊΡΠΈΠ²Π΅Π½ Π΄ΠΎΠ΄Π΅ΠΊΠ° TIMx_CNT < TIMx_CCR1. ΠΠΎ ΡΠΏΡΠΎΡΠΈΠ²Π½ΠΎ, ΠΏΡΠ²ΠΈΠΎΡ ΠΊΠ°Π½Π°Π» Π΅ Π°ΠΊΡΠΈΠ²Π΅Π½.
ΠΠΈΠ΄Π΅ΡΡΠΈ LED Π΄ΠΈΠΎΠ΄ΠΈΡΠ΅ ΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΎ MK ΡΠΎ ΠΊΠ°ΡΠΎΠ΄ΠΈ, Π²ΡΠΎΡΠΈΠΎΡ ΡΠ΅ΠΆΠΈΠΌ Π½ΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° (ΠΈ ΠΏΡΠ²ΠΈΠΎΡ, Π½ΠΎ ΡΠΎΠ° ΡΓ¨ ΡΡΡΠ΅ Π½Π΅ Π³ΠΎ Π·Π½Π°Π΅ΠΌΠ΅).
ΠΠΈΡ 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:
#define TIM2_CR1 *(volatile uint8_t *)0x005300
TIM2_CR1 |= 1;
ΠΡΠ΄Π΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌΠ΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π΅Π½ Π°Π½Π°Π»ΠΎΠ³ Π½Π° AnalogWrite(), ΠΊΠΎΡ ΡΠ΅ Π³ΠΈ ΠΏΡΠ΅Π½Π΅ΡΠ΅ Π²ΠΈΡΡΠΈΠ½ΡΠΊΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π½Π° ΡΠ°ΡΠΌΠ΅ΡΠΎΡ Π·Π° ΡΠΏΠΎΡΠ΅Π΄Π±Π°. Π Π΅Π³ΠΈΡΡΡΠΈΡΠ΅ ΡΠ΅ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π»ΠΈΠ²ΠΎ Π‘Π½ΠΈΠΌΠ°ΡΡΠ΅/Π‘ΠΏΠΎΡΠ΅Π΄ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈ, ΠΈΠΌΠ° Π΄Π²Π° ΠΎΠ΄ Π½ΠΈΠ² Π·Π° ΡΠ΅ΠΊΠΎΡ ΠΊΠ°Π½Π°Π»: 8 Π±ΠΈΡΠ° ΠΎΠ΄ Π½ΠΈΠ·ΠΎΠΊ ΡΠ΅Π΄ Π²ΠΎ TIM2_CCRxL ΠΈ ΠΎΠ½ΠΈΠ΅ ΠΎΠ΄ Π²ΠΈΡΠΎΠΊ ΡΠ΅Π΄ Π²ΠΎ TIM2_CCRxH. ΠΠΈΠ΄Π΅ΡΡΠΈ ΡΠΎΠ·Π΄Π°Π΄ΠΎΠ²ΠΌΠ΅ 8-Π±ΠΈΡΠ΅Π½ 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;
}
ΠΠ½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΈΠΎΡ ΡΠΈΡΠ°ΡΠ΅Π» ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ°Π»ΠΊΡ Π΄Π΅ΡΠ΅ΠΊΡΠ΅Π½ PWM, ΠΊΠΎΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅ 100% ΠΏΠΎΠ»Π½Π΅ΡΠ΅ (ΠΏΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΎΠ΄ 255, ΡΠΈΠ³Π½Π°Π»ΠΎΡ ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΡΠ²Π° Π·Π° Π΅Π΄Π΅Π½ ΡΠΈΠΊΠ»ΡΡ Π½Π° ΡΠ°ΡΠΌΠ΅Ρ). ΠΠ° LED Π΄ΠΈΠΎΠ΄ΠΈ ΠΎΠ²Π° Π½Π΅ Π΅ Π²Π°ΠΆΠ½ΠΎ, Π° Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΈΠΎΡ ΡΠΈΡΠ°ΡΠ΅Π» Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ³ΠΎΠ΄ΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈ.
PWM Π½Π° Π²ΡΠΎΡΠΈΠΎΡ ΡΠ°ΡΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΠΈ, Π°ΡΠ΄Π΅ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌΠ΅ Π½Π° ΠΏΡΠ²ΠΈΠΎΡ.
ΠΡΠ²ΠΈΠΎΡ ΡΠ°ΡΠΌΠ΅Ρ Π³ΠΈ ΠΈΠΌΠ° ΡΠΎΠΊΠΌΡ ΠΈΡΡΠΈΡΠ΅ Π±ΠΈΡΠΎΠ²ΠΈ Π²ΠΎ ΠΈΡΡΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ (ΡΠ°ΠΌΠΎ ΠΎΠ½ΠΈΠ΅ Π±ΠΈΡΠΎΠ²ΠΈ ΡΡΠΎ ΠΎΡΡΠ°Π½Π°Π° βΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠ°Π½ΠΈβ Π²ΠΎ Π²ΡΠΎΡΠΈΠΎΡ ΡΠ°ΡΠΌΠ΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ ΠΏΡΠ²ΠΈΠΎΡ Π·Π° ΡΠ΅ΠΊΠ°ΠΊΠ²ΠΈ Π½Π°ΠΏΡΠ΅Π΄Π½ΠΈ ΡΠ°Π±ΠΎΡΠΈ). ΠΠ°ΡΠΎΠ°, Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π΅ Π΄Π° Π³ΠΈ ΠΏΡΠΎΠ½Π°ΡΠ΄Π΅ΡΠ΅ Π°Π΄ΡΠ΅ΡΠΈΡΠ΅ Π½Π° ΠΈΡΡΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ Π²ΠΎ Π»ΠΈΡΡΠΎΡ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈ Π΄Π° Π³ΠΎ ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠ΄ΠΎΡ. ΠΠ°, ΡΠΌΠ΅Π½Π΅ΡΠ΅ ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° Π΄Π΅Π»ΠΈΡΠ΅Π»ΠΎΡ Π½Π° ΡΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ°ΡΠ°, Π±ΠΈΠ΄Π΅ΡΡΠΈ ... ΠΏΡΠ²ΠΈΠΎΡ ΡΠ°ΡΠΌΠ΅Ρ ΡΠ°ΠΊΠ° Π΄Π° Π½Π΅ ΠΏΡΠΈΠΌΠΈ ΠΌΠΎΡΠ½ΠΎΡΡ ΠΎΠ΄ Π΄Π²Π°, ΡΡΠΊΡ ΡΠΎΡΠ½Π° 16-Π±ΠΈΡΠ½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π²ΠΎ Π΄Π²Π° ΡΠ΅Π³ΠΈΡΡΡΠΈ ΠΡΠ΅ΡΠΊΠ°Π»Π°Ρ ΠΠΈΡΠΎΠΊ ΠΈ ΠΠΈΡΠΊΠΎ. ΠΡΠ°Π²ΠΈΠΌΠ΅ ΡΠ΅ ΠΈ... ΠΏΡΠ²ΠΈΠΎΡ ΡΠ°ΡΠΌΠ΅Ρ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ. Π¨ΡΠΎ Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ?
ΠΡΠΎΠ±Π»Π΅ΠΌΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅ΡΠΈ ΡΠ°ΠΌΠΎ ΡΠΎ ΠΏΡΠ΅Π³Π»Π΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ΅Π»ΠΈΠΎΡ Π΄Π΅Π» Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ Π½Π° ΡΠ°ΡΠΌΠ΅ΡΠΎΡ 1, ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π³ΠΎ Π±Π°ΡΠ°ΠΌΠ΅ ΠΎΠ½ΠΎΡ ΡΡΠΎ Π³ΠΎ Π½Π΅ΠΌΠ° Π²ΡΠΎΡΠΈΠΎΡ ΡΠ°ΡΠΌΠ΅Ρ. ΠΠ΅ Π±ΠΈΠ΄Π΅ 17.7.30 Π Π΅Π³ΠΈΡΡΠ°Ρ Π·Π° ΠΏΡΠ΅ΠΊΠΈΠ½ΠΈ (TIM1_BKR), ΠΊΠ°Π΄Π΅ Π³ΠΎ ΠΈΠΌΠ° ΠΎΠ²ΠΎΡ Π±ΠΈΡ:
ΠΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅ΡΠ΅ Π³ΠΎ Π³Π»Π°Π²Π½ΠΈΠΎΡ ΠΈΠ·Π»Π΅Π·
#define TIM1_BKR *(volatile uint8_t *)0x00526D
TIM1_BKR = (1<<7);
Π’ΠΎΠ° Π΅ ΡΠ΅Π³Π° ΡΠΈΠ³ΡΡΠ½ΠΎ, ΠΊΠΎΠ΄ΠΎΡ
STM8 ΠΌΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡ
ΠΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡΠΈΡΠ°ΡΠ΅ Π½Π° STM8
Π’ΡΠ΅ΡΠΈΠΎΡ ΠΌΠΈΠ½ΠΈ-ΠΏΡΠΎΠ΅ΠΊΡ Π΅ Π΄Π° ΠΏΠΎΠ²ΡΠ·Π΅ΡΠ΅ ΠΎΡΡΠΌ RGB LED Π΄ΠΈΠΎΠ΄ΠΈ ΡΠΎ Π²ΡΠΎΡΠΈΠΎΡ ΡΠ°ΡΠΌΠ΅Ρ Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌ PWM ΠΈ Π΄Π° Π³ΠΈ Π½Π°ΡΠ΅ΡΠ°ΡΠ΅ Π΄Π° ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π°Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π±ΠΎΠΈ. Π’ΠΎΡ ΡΠ΅ Π·Π°ΡΠ½ΠΎΠ²Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΎΡ Π½Π° LED ΠΌΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡΠΈΡΠ°ΡΠ΅, Π° ΡΠΎΠ° Π΅ Π΄Π΅ΠΊΠ° Π°ΠΊΠΎ Π³ΠΈ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΈ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅ LED Π΄ΠΈΠΎΠ΄ΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ, ΠΌΠ½ΠΎΠ³Ρ Π±ΡΠ·ΠΎ, ΡΠ΅ Π½ΠΈ ΡΠ΅ ΡΠΈΠ½ΠΈ Π΄Π΅ΠΊΠ° ΡΠΈΠ΅ ΡΠ΅ ΠΏΠΎΡΡΠΎΡΠ°Π½ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ (ΡΠΏΠΎΡΠ½ΠΎΡΡ Π½Π° Π²ΠΈΠ΄ΠΎΡ, ΠΈΠ½Π΅ΡΡΠΈΡΠ° Π½Π° Π²ΠΈΠ·ΡΠ΅Π»Π½Π° ΠΏΠ΅ΡΡΠ΅ΠΏΡΠΈΡΠ°). ΠΠ°Ρ Π΅Π΄Π½Π°Ρ Π½Π°ΠΏΡΠ°Π²ΠΈΠ²
ΠΠ»Π³ΠΎΡΠΈΡΠΌΠΎΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:
- ΡΠ° ΠΏΠΎΠ²ΡΠ·Π° Π°Π½ΠΎΠ΄Π°ΡΠ° Π½Π° ΠΏΡΠ²Π°ΡΠ° RGB LED;
- Π³ΠΎ Π·Π°ΠΏΠ°Π»ΠΈ, ΠΈΡΠΏΡΠ°ΡΠ°ΡΡΠΈ Π³ΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΈ Π΄ΠΎ ΠΊΠ°ΡΠΎΠ΄ΠΈΡΠ΅;
- ΡΠ΅ΠΊΠ°ΡΠ΅ Π΄ΠΎ ΠΊΡΠ°ΡΠΎΡ Π½Π° ΡΠΈΠΊΠ»ΡΡΠΎΡ PWM;
- ΡΠ° ΠΏΠΎΠ²ΡΠ·Π° Π°Π½ΠΎΠ΄Π°ΡΠ° Π½Π° Π²ΡΠΎΡΠ°ΡΠ° RGB LED;
- Π·Π°ΠΏΠ°Π»ΠΈ Π³ΠΎ...
ΠΠ°, ΠΈΡΠ½. Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, Π·Π° ΡΠ±Π°Π²ΠΎ ΡΠ°Π±ΠΎΡΠ΅ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π΅ Π°Π½ΠΎΠ΄Π°ΡΠ° Π΄Π° ΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π΅ ΠΈ ΠΠΠ Π΄Π° ΡΠ΅ βΠ·Π°ΠΏΠ°Π»ΠΈβ Π²ΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅. ΠΠ°, ΠΈΠ»ΠΈ ΡΠ΅ΡΠΈΡΠΈ. ΠΠΎ ΡΠ΅ΠΊΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΡΡΠ΅Π±Π° Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌΠ΅ ΠΊΠΎΠ΄ ΡΡΠΎ ΡΠ΅ Π³ΠΈ ΠΈΡΡΡΠ»ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π²ΠΎ ΡΡΠΈ ΠΊΠ°Π½Π°Π»ΠΈ ΠΎΠ΄ Π²ΡΠΎΡΠΈΠΎΡ ΡΠ°ΡΠΌΠ΅Ρ, ΡΠ΅ Π³ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΊΠΎΠ³Π° ΡΠ΅ ΡΠ΅ Π΄ΠΎΡΡΠΈΠ³Π½Π΅ UEV ΠΈ Π²ΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠ΅ ΡΠ° ΡΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ Π°ΠΊΡΠΈΠ²Π½Π°ΡΠ° RGB LED.
ΠΠΈΠ΄Π΅ΡΡΠΈ ΠΏΡΠ΅ΡΡΠ»ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΠΠ Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΎ, ΡΡΠ΅Π±Π° Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ βΠ²ΠΈΠ΄Π΅ΠΎ ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°β ΠΎΠ΄ ΠΊΠΎΡΠ° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠΎΡ ΡΠΎ ΠΏΡΠ΅ΠΊΠΈΠ½ΠΈ ΡΠ΅ ΠΏΡΠΈΠΌΠ° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠ²Π° Π΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° Π½ΠΈΠ·Π°:
uint8_t colors[8][3];
ΠΠ° Π΄Π° ΡΠ° ΡΠΌΠ΅Π½ΠΈΡΠ΅ Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½Π° LED Π΄ΠΈΠΎΠ΄Π°, ΡΠ΅ Π±ΠΈΠ΄Π΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π΄Π° Π³ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π²ΠΎ ΠΎΠ²Π°Π° Π½ΠΈΠ·Π°. Π ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ½Π° Π·Π° Π±ΡΠΎΡΠΎΡ Π½Π° Π°ΠΊΡΠΈΠ²Π½Π°ΡΠ° ΠΠΠ
uint8_t cnt;
ΠΠ΅ΠΌΡΠΊΡ
ΠΠ° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΌΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡΠΈΡΠ°ΡΠ΅, ΠΏΠΎΡΡΠ΅Π±Π΅Π½ Π½ΠΈ Π΅, ΡΡΠ΄Π½ΠΎ, Π΄Π΅ΠΌΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡΠ΅Ρ CD74HC238. ΠΠ΅ΠΌΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡΠ΅Ρ - ΡΠΈΠΏ ΡΡΠΎ Π³ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΡ Π²ΠΎ Ρ
Π°ΡΠ΄Π²Π΅Ρ <<
. ΠΡΠ΅ΠΊΡ ΡΡΠΈ Π²Π»Π΅Π·Π½ΠΈ ΠΏΠΈΠ½ΠΎΠ²ΠΈ (Π±ΠΈΡΠΎΠ²ΠΈ 0, 1 ΠΈ 2) Π³ΠΎ Π²Π½Π΅ΡΡΠ²Π°ΠΌΠ΅ ΡΠΎ ΡΡΠΈΠ±ΠΈΡΠ΅Π½ Π±ΡΠΎΡ X, Π° ΠΊΠ°ΠΊΠΎ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ Π³ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΠΈΠ·Π»Π΅Π·Π½ΠΈΠΎΡ Π±ΡΠΎΡ (1<<X
). ΠΡΡΠ°Π½Π°ΡΠΈΡΠ΅ Π²Π»Π΅Π·ΠΎΠ²ΠΈ Π½Π° ΡΠΈΠΏΠΎΡ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π·Π° ΡΠΊΠ°Π»ΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ΅Π»ΠΈΠΎΡ Π΄ΠΈΠ·Π°ΡΠ½. ΠΠ²ΠΎΡ ΡΠΈΠΏ Π½ΠΈ ΡΡΠ΅Π±Π° Π½Π΅ ΡΠ°ΠΌΠΎ Π·Π° Π΄Π° Π³ΠΎ Π½Π°ΠΌΠ°Π»ΠΈΠΌΠ΅ Π±ΡΠΎΡΠΎΡ Π½Π° Π·Π°ΡΠ°ΡΠ΅Π½ΠΈ ΠΏΠΈΠ½ΠΎΠ²ΠΈ Π½Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΎΡ, ΡΡΠΊΡ ΠΈ Π·Π° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡ - Π·Π° ΡΠ»ΡΡΠ°ΡΠ½ΠΎ Π΄Π° Π½Π΅ Π²ΠΊΠ»ΡΡΠΈΠΌΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ LED Π΄ΠΈΠΎΠ΄ΠΈ ΠΎΡΠΊΠΎΠ»ΠΊΡ ΡΡΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π΄Π° Π½Π΅ Π³ΠΎ Π·Π°ΠΏΠ°Π»ΠΈΠΌΠ΅ MK. Π§ΠΈΠΏΠΎΡ ΡΠΈΠ½ΠΈ Π΅Π΄Π΅Π½ Π΄Π΅Π½Π°Ρ ΠΈ ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΡΡΠ²Π° Π²ΠΎ Π²Π°ΡΠΈΠΎΡ Π΄ΠΎΠΌΠ°ΡΠ΅Π½ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ ΡΠΎ Π»Π΅ΠΊΠΎΠ²ΠΈ.
ΠΠ°ΡΠΈΠΎΡ CD74HC238 ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° Π½Π°ΠΏΠΎΡΡΠ²Π°ΡΠ΅ Π½Π° Π½Π°ΠΏΠΎΠ½ Π΄ΠΎ Π°Π½ΠΎΠ΄Π°ΡΠ° Π½Π° ΡΠ°ΠΊΠ°Π½Π°ΡΠ° ΠΠΠ . ΠΠΎ ΠΏΠΎΠ»Π½ΠΎΠΏΡΠ°Π²Π½ΠΎ ΠΌΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡ, ΡΠΎΡ Π±ΠΈ ΡΠ½Π°Π±Π΄ΡΠ²Π°Π» Π½Π°ΠΏΠΎΠ½ Π΄ΠΎ ΡΡΠΎΠ»Π±ΠΎΡ ΠΏΡΠ΅ΠΊΡ P-MOSFET, Π½ΠΎ Π²ΠΎ ΠΎΠ²Π°Π° Π΄Π΅ΠΌΠΎ ΡΠΎΠ° Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΏΠΎΠ²Π»Π΅ΠΊΡΠ²Π° 20 mA, ΡΠΏΠΎΡΠ΅Π΄ Π°ΠΏΡΠΎΠ»ΡΡΠ½ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΈ ΠΎΡΠ΅Π½ΠΊΠΈ Π²ΠΎ Π»ΠΈΡΡΠΎΡ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠ΄
H = Π²ΠΈΡΠΎΠΊΠΎΠ½Π°ΠΏΠΎΠ½ΡΠΊΠΎ Π½ΠΈΠ²ΠΎ, L = Π½ΠΈΡΠΊΠΎ Π½Π°ΠΏΠΎΠ½ΡΠΊΠΎ Π½ΠΈΠ²ΠΎ, X β Π½Π΅ΠΌΠ°Ρ Π³Π°ΡΠ»Π΅
ΠΠΈΠ΅ Π³ΠΈ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΠΌΠ΅ E2 ΠΈ E1 ΡΠΎ Π·Π΅ΠΌΡΠ°ΡΠ°, E3, A0, A1 ΠΈ A3 ΡΠΎ ΠΏΠΈΠ½ΠΎΠ²ΠΈΡΠ΅ PD5, PC3, PC4 ΠΈ PC5 Π½Π° STM8. ΠΠΈΠ΄Π΅ΡΡΠΈ Π³ΠΎΡΠ½Π°ΡΠ° ΡΠ°Π±Π΅Π»Π° ΡΠΎΠ΄ΡΠΆΠΈ ΠΈ Π½ΠΈΡΠΊΠΈ ΠΈ Π²ΠΈΡΠΎΠΊΠΈ Π½ΠΈΠ²ΠΎΠ°, Π½ΠΈΠ΅ Π³ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΎΠ²ΠΈΠ΅ ΠΏΠΈΠ½ΠΎΠ²ΠΈ ΠΊΠ°ΠΊΠΎ ΠΏΠΈΠ½ΠΎΠ²ΠΈ Π·Π° ΠΏΡΠΈΡΠΈΡΠΊΠ°ΡΠ΅.
PWM
PWM Π½Π° Π²ΡΠΎΡΠΈΠΎΡ ΡΠ°ΡΠΌΠ΅Ρ Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ Π½Π° ΠΈΡΡ Π½Π°ΡΠΈΠ½ ΠΊΠ°ΠΊΠΎ ΠΈ Π²ΠΎ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½Π°ΡΠ° ΠΏΡΠΈΠΊΠ°Π·Π½Π°, ΡΠΎ Π΄Π²Π΅ ΡΠ°Π·Π»ΠΈΠΊΠΈ:
ΠΡΠ²ΠΎ, ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ Π²ΠΊΠ»ΡΡΠΈΠΌΠ΅ ΠΏΡΠ΅ΠΊΠΈΠ½ΠΎΡ ΠΠΆΡΡΠΈΡΠ°ΡΡΠ΅ Π³ΠΎ Π½Π°ΡΡΠ°Π½ΠΎΡ (UEV) ΠΊΠΎΡ ΡΠ΅ ΠΏΠΎΠ²ΠΈΠΊΠ° ΡΡΠ½ΠΊΡΠΈΡΠ° ΡΡΠΎ ΡΠ° Π²ΠΊΠ»ΡΡΡΠ²Π° Π°ΠΊΡΠΈΠ²Π½Π°ΡΠ° LED Π΄ΠΈΠΎΠ΄Π°. ΠΠ²Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ ΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π° Π½Π° Π±ΠΈΡΠΎΡ ΠΠΆΡΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠ΅ΠΊΠΈΠ½ΠΈ ΠΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π²ΠΎ ΡΠ΅Π³ΠΈΡΡΠ°Ρ ΡΠΎ ΠΊΠ°ΠΆΡΠ²Π°ΡΠΊΠΎ ΠΈΠΌΠ΅
Π Π΅Π³ΠΈΡΡΠ°Ρ Π·Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°ΡΠ΅ ΠΏΡΠ΅ΠΊΠΈΠ½ΠΈ
#define TIM2_IER *(volatile uint8_t *)0x005303
//enable interrupt
TIM2_IER = 1;
ΠΡΠΎΡΠ°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° Π΅ ΠΏΠΎΠ²ΡΠ·Π°Π½Π° ΡΠΎ ΡΠ΅Π½ΠΎΠΌΠ΅Π½ΠΎΡ Π½Π° ΠΌΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡΠΈΡΠ°ΡΠ΅, ΠΊΠ°ΠΊΠΎ Π½Π° ΠΏΡ ΠΈΠΌΠ°Π³ΠΈΠ½Π°ΡΠ½ΠΈΡΠ΅ ΠΎΠ±Π»ΠΈΡΠΈ β ΠΏΠ°ΡΠ°Π·ΠΈΡΡΠΊΠΈ ΡΡΠ°Ρ Π½Π° Π΄ΠΈΠΎΠ΄ΠΈ. ΠΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ°Π²ΠΈ ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠ°ΠΊΡΠΎΡ ΡΡΠΎ ΡΠ°ΡΠΌΠ΅ΡΠΎΡ, ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΡΠ²Π°ΡΡΠΈ ΠΏΡΠ΅ΠΊΠΈΠ½ Π½Π° UEV, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΡΠ²Π° Π΄Π° ΡΡΠΈΠΊΠ»ΠΈΡΠ°, Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠΎΡ ΡΠΎ ΠΏΡΠ΅ΠΊΠΈΠ½ΠΈ Π½Π΅ΠΌΠ° Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΡΠ° ΠΏΡΠ΅ΡΡΠ»ΠΈ ΠΠΠ ΠΏΡΠ΅Π΄ ΡΠ°ΡΠΌΠ΅ΡΠΎΡ Π΄Π° ΠΏΠΎΡΠ½Π΅ Π΄Π° ΠΏΠΈΡΡΠ²Π° Π½Π΅ΡΡΠΎ Π½Π° ΠΏΠΈΠ½ΠΎΠ²ΠΈΡΠ΅. ΠΠ° Π΄Π° ΡΠ΅ Π±ΠΎΡΠΈΡΠ΅ ΡΠΎ ΠΎΠ²Π°, ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° ΠΏΡΠ΅Π²ΡΡΠΈΡΠ΅ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° (0 = ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° ΠΎΡΠ²Π΅ΡΠ»Π΅Π½ΠΎΡΡ, 255 = Π½ΠΈΡΡΠΎ Π½Π΅ ΡΠ²Π΅ΡΠΈ) ΠΈ Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΡΠ΅ Π΅ΠΊΡΡΡΠ΅ΠΌΠ½ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΠΎΡ ΡΠΈΠΊΠ»ΡΡ. ΠΠ½ΠΈΠ΅. ΠΏΠΎΠ³ΡΠΈΠΆΠ΅ΡΠ΅ ΡΠ΅ ΠΏΠΎ UEV LED Π΄ΠΈΠΎΠ΄ΠΈΡΠ΅ ΡΠ΅Π»ΠΎΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π³Π°ΡΠ½Π°Ρ Π·Π° Π΅Π΄Π΅Π½ ΡΠΈΠΊΠ»ΡΡ PWM.
ΠΡΠΎΠΌΠ΅Π½Π° Π½Π° ΠΏΠΎΠ»Π°ΡΠΈΡΠ΅Ρ:
//set polarity
TIM2_CCER1 |= (CC1P | CC2P);
TIM2_CCER2 |= CC3P;
ΠΠ·Π±Π΅Π³Π½ΡΠ²Π°ΡΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° r, g ΠΈ b Π½Π° 255 ΠΈ Π½Π΅ Π·Π°Π±ΠΎΡΠ°Π²Π°ΡΡΠ΅ Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π²ΡΡΠΈΡΠ΅ ΠΊΠΎΠ³Π° Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅.
ΠΡΠ΅ΠΊΠΈΠ½ΡΠ²Π°
Π‘ΡΡΡΠΈΠ½Π°ΡΠ° Π½Π° ΠΏΡΠ΅ΠΊΠΈΠ½ΠΎΡ Π΅ Π΄Π΅ΠΊΠ° ΠΏΠΎΠ΄ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ ΠΎΠΊΠΎΠ»Π½ΠΎΡΡΠΈ ΡΠΈΠΏΠΎΡ ΠΏΡΠ΅ΡΡΠ°Π½ΡΠ²Π° Π΄Π° ΡΠ° ΠΈΠ·Π²ΡΡΡΠ²Π° Π³Π»Π°Π²Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΈ ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π° Π½Π΅ΠΊΠΎΡΠ° Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΡΠ°. ΠΡΠ΅ΠΊΠΈΠ½ΠΈΡΠ΅ ΡΠ΅ ΡΠ°Π²ΡΠ²Π°Π°Ρ ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΈ ΠΈΠ»ΠΈ Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΈ Π²Π»ΠΈΡΠ°Π½ΠΈΡΠ°, Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ Π³ΠΎ ΠΈ ΡΠ°ΡΠΌΠ΅ΡΠΎΡ.
ΠΠΎΠ³Π° ΠΏΡΠ²ΠΏΠ°Ρ ΡΠΎΠ·Π΄Π°Π΄ΠΎΠ²ΠΌΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ Π²ΠΎ ST Visual Develop, ΠΏΠΎΠΊΡΠ°Ρ main.c
Π΄ΠΎΠ±ΠΈΠ²ΠΌΠ΅ ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ ΡΠΎ ΠΌΠΈΡΡΠ΅ΡΠΈΠΎΠ·Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° stm8_interrupt_vector.c
, Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ Π²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ. ΠΠΎ ΠΎΠ²Π°Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, ΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ° Π΅ Π΄ΠΎΠ΄Π΅Π»Π΅Π½Π° Π½Π° ΡΠ΅ΠΊΠΎΡ ΠΏΡΠ΅ΠΊΠΈΠ½ NonHandledInterrupt
. Π’ΡΠ΅Π±Π° Π΄Π° ΡΠ° ΠΏΠΎΠ²ΡΠ·Π΅ΠΌΠ΅ Π½Π°ΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡΠ° Π·Π° ΡΠ°ΠΊΠ°Π½ΠΈΠΎΡ ΠΏΡΠ΅ΠΊΠΈΠ½.
ΠΠΈΡΡΠΎΡ ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΈΠΌΠ° ΡΠ°Π±Π΅Π»Π° ΡΠΎ Π²Π΅ΠΊΡΠΎΡΠΈ Π½Π° ΠΏΡΠ΅ΠΊΠΈΠ½ΠΈ, ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π³ΠΈ Π½Π°ΠΎΡΠ°ΠΌΠ΅ ΠΎΠ½ΠΈΠ΅ ΡΡΠΎ Π½ΠΈ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ:
13 ΠΠΆΡΡΠΈΡΠ°ΡΠ΅/ΠΏΡΠ΅Π»Π΅Π²Π°ΡΠ΅ Π½Π° TIM2
14 Π‘Π½ΠΈΠΌΠ°ΡΠ΅/ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° TIM2
Π’ΡΠ΅Π±Π° Π΄Π° ΡΠ° ΡΠΌΠ΅Π½ΠΈΠΌΠ΅ ΠΠΠ Π½Π° 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;
}
ΠΡΡΠ°Π½ΡΠ²Π° ΡΠ°ΠΌΠΎ Π΄Π° ΡΠ΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ°Ρ ΠΏΡΠ΅ΠΊΠΈΠ½ΠΈ. ΠΠ²Π° Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ rim
- ΡΠ΅ ΠΌΠΎΡΠ° Π΄Π° Π³ΠΎ Π±Π°ΡΠ°ΡΠ΅
//enable interrupts
_asm("rim");
ΠΡΡΠ³Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ Π΅ sim
β Π³ΠΈ ΠΈΡΠΊΠ»ΡΡΡΠ²Π° ΠΏΡΠ΅ΠΊΠΈΠ½ΠΈΡΠ΅. Π’ΠΈΠ΅ ΠΌΠΎΡΠ° Π΄Π° ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ°Ρ Π΄ΠΎΠ΄Π΅ΠΊΠ° ΡΠ΅ Π·Π°ΠΏΠΈΡΡΠ²Π°Π°Ρ Π½ΠΎΠ²ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π²ΠΎ βΠ²ΠΈΠ΄Π΅ΠΎ-ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°β, Π·Π° ΠΏΡΠ΅ΠΊΠΈΠ½ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π½ Π²ΠΎ ΠΏΠΎΠ³ΡΠ΅ΡΠ΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ Π΄Π° Π½Π΅ ΡΠ° ΡΠ°ΡΠΈΠΏΠ΅ Π½ΠΈΠ·Π°ΡΠ°.
Π‘ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ -
ΠΠΊΠΎ Π±Π°ΡΠ΅ΠΌ Π½Π΅ΠΊΠΎΡ ΡΠ° ΡΠΌΠ΅ΡΠ° ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠΈΡΠ½Π°, ΡΠΎΠ³Π°Ρ Π½Π΅ ΡΠ° Π½Π°ΠΏΠΈΡΠ°Π² Π·Π°Π»ΡΠ΄Π½ΠΎ. ΠΠ΅ ΠΌΠΈ Π±ΠΈΠ΄Π΅ Π΄ΡΠ°Π³ΠΎ Π΄Π° Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ ΠΈ Π·Π°Π±Π΅Π»Π΅ΡΠΊΠΈ, ΡΠ΅ ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π°ΠΌ Π΄Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ°ΠΌ Π½Π° ΡΠ΅.
ΠΠ·Π²ΠΎΡ: www.habr.com