Π
ΠΠ½Π΅Ρ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠΈ Ρ Π΄Π°Π½Π½ΠΈ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡΠ° ΠΏΡΠΎΡΡΠΈ, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π°Π΄Π°ΡΠΈ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π½Π° STM32 (Blue Pill) ΠΈ STM8 ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ. ΠΡΠΈΡΠΊΠΈ Π΄Π΅ΠΌΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΡΠ° ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈ Π½Π° Π»ΡΠ±ΠΈΠΌΠΈΡΠ΅ ΠΌΠΈ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΈ, ΡΠ΅ Π³ΠΈ Π·Π°ΠΏΠ°Π»ΠΈΠΌ Π² Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π°, Π·Π° ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°.
Π’Π΅ΠΊΡΡΡΡ ΠΎΡΠ½ΠΎΠ²ΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π° ΠΎΠ³ΡΠΎΠΌΠ΅Π½, ΡΠ°ΠΊΠ° ΡΠ΅ Π·Π° ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΏΡΠ°Π²Ρ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ:
Disclaimer: ΠΠ΅ ΡΡΠΌ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ, Π½Π΅ ΠΏΡΠ΅ΡΠ΅Π½Π΄ΠΈΡΠ°ΠΌ Π΄Π° ΠΈΠΌΠ°ΠΌ Π·Π°Π΄ΡΠ»Π±ΠΎΡΠ΅Π½ΠΈ ΠΏΠΎΠ·Π½Π°Π½ΠΈΡ Π² Π΅Π»Π΅ΠΊΡΡΠΎΠ½ΠΈΠΊΠ°ΡΠ°, ΡΡΠ°ΡΠΈΡΡΠ° Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π·Π° Π°ΠΌΠ°ΡΡΠΎΡΠΈ ΠΊΠ°ΡΠΎ ΠΌΠ΅Π½. ΠΡΡΡΠ½ΠΎΡΡ Π°Π· ΡΠ΅ ΡΠΌΡΡΠ°Ρ ΠΏΡΠ΅Π΄ΠΈ Π΄Π²Π΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ Π·Π° ΡΠ΅Π»Π΅Π²Π°ΡΠ° Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡ. ΠΠΊΠΎ Π½ΡΠΊΠΎΠΉ ΠΌΠΈ Π±Π΅ΡΠ΅ ΠΊΠ°Π·Π°Π» ΡΠΎΠ³Π°Π²Π°, ΡΠ΅ Π½Π΅ Π΅ ΡΡΡΠ°ΡΠ½ΠΎ Π΄Π° ΡΠ΅ΡΠ° ΡΠ°Π±Π»ΠΈΡΠΈ Ρ Π΄Π°Π½Π½ΠΈ Π·Π° Π½Π΅ΠΏΠΎΠ·Π½Π°Ρ ΡΠΈΠΏ, Π½ΡΠΌΠ°ΡΠ΅ Π΄Π° ΠΏΡΠ΅ΠΊΠ°ΡΠ°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π² ΡΡΡΡΠ΅Π½Π΅ Π½Π° Π½ΡΠΊΠΎΠΈ ΠΏΠ°ΡΡΠ΅ΡΠ° ΠΊΠΎΠ΄ Π² ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΈ Π΄Π° ΠΈΠ·ΠΌΠΈΡΠ»ΡΠΌ ΠΏΠ°ΡΠ΅ΡΠΈΡΠΈ Ρ Π½ΠΎΠΆΠΈΡΠΈ ΠΈ Π»Π΅ΠΉΠΊΠΎΠΏΠ»Π°ΡΡ.
Π€ΠΎΠΊΡΡΡΡ Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ° ΡΠ°Π±Π»ΠΈΡΠΈ Ρ Π΄Π°Π½Π½ΠΈ, Π° Π½Π΅ ΡΠ΅ΡΠ½ΠΎΠ²ΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΊΠΎΠ΄ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π΅ ΡΠ²ΡΡΠ΄Π΅ ΠΈΠ·ΠΏΠΈΠΏΠ°Π½ ΠΈ ΡΠ΅ΡΡΠΎ ΠΏΠ°ΡΠ΅ΡΠΈΡΠ°. Π‘Π°ΠΌΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΈ, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠ° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈ Π·Π° ΠΏΡΡΠ²ΠΎΡΠΎ Π·Π°ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ Ρ Π½ΠΎΠ² ΡΠΈΠΏ.
ΠΠ°Π΄ΡΠ²Π°ΠΌ ΡΠ΅, ΡΠ΅ ΠΌΠΎΡΡΠ° ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π½Π° Π½ΡΠΊΠΎΠΉ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π΅ΡΠ°ΠΏ Π½Π° Π³ΠΌΡΡΠΊΠ°Π½Π΅ Π² Ρ ΠΎΠ±ΠΈ.
STM32
16 ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π° Ρ DM634 ΠΈ SPI
ΠΠ°Π»ΡΠΊ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Blue Pill (STM32F103C8T6) ΠΈ DM634 LED Π΄ΡΠ°ΠΉΠ²Π΅Ρ. Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈ Ρ Π΄Π°Π½Π½ΠΈ ΡΠ΅ ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΠΌ Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°, STM IO ΠΏΠΎΡΡΠΎΠ²Π΅ΡΠ΅ ΠΈ ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ SPI.
DM634
Π’Π°ΠΉΠ²Π°Π½ΡΠΊΠΈ ΡΠΈΠΏ Ρ 16 x 16-Π±ΠΈΡΠΎΠ²ΠΈ PWM ΠΈΠ·Ρ
ΠΎΠ΄ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ²ΡΡΠ·Π°Π½ Π²ΡΠ² Π²Π΅ΡΠΈΠ³Π°. ΠΠΎ-ΠΌΠ»Π°Π΄ΠΈΡΡ 12-Π±ΠΈΡΠΎΠ² ΠΌΠΎΠ΄Π΅Π» Π΅ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΎΡ Π΄ΠΎΠΌΠ°ΡΠ΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ
Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΡ Π΅ ΡΠ°ΠΉΠ²Π°Π½ΡΠΊΠΈ,
ΠΠΈΠ²ΠΊΠ° DC ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ (ΠΎΡΠ²ΠΎΡΠ΅Π½ Π΄ΡΠ΅Π½Π°ΠΆ)
ΠΌΠΈΠ²ΠΊΠ° / ΠΠ·Ρ ΠΎΠ΄ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ Π΄ΡΠ΅Π½Π°ΠΆ - Π½Π°Π»ΠΈΡΠ½ΠΎΡΡ; ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° Π²Ρ ΠΎΠ΄ΡΡ ΡΠΎΠΊ; ΠΈΠ·Ρ ΠΎΠ΄, ΡΠ²ΡΡΠ·Π°Π½ ΠΊΡΠΌ ΠΌΠ°ΡΠ° Π² Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ - ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΈΡΠ΅ ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΊΡΠΌ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° ΡΡΠ΅Π· ΠΊΠ°ΡΠΎΠ΄ΠΈ. ΠΠ»Π΅ΠΊΡΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ²Π°, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π½Π΅ Π΅ "ΠΎΡΠ²ΠΎΡΠ΅Π½ Π΄ΡΠ΅Π½Π°ΠΆ" (ΠΎΡΠ²ΠΎΡΠ΅Π½ Π΄ΡΠ΅Π½Π°ΠΆ), Π½ΠΎ Π² ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ Ρ Π΄Π°Π½Π½ΠΈ ΡΠ΅ΡΡΠΎ ΡΠ΅ ΡΡΠ΅ΡΠ° ΡΠ°ΠΊΠΎΠ²Π° ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΈΠ·Ρ ΠΎΠ΄ΠΈ Π² ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΈΠ·ΡΠΎΡΠ²Π°Π½Π΅.
ΠΡΠ½ΡΠ½ΠΈ ΡΠ΅Π·ΠΈΡΡΠΎΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ REXT ΠΈ GND Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΡΠΎΠΊ
ΠΠ΅ΠΆΠ΄Ρ ΡΠΈΡΡΠ° REXT ΠΈ Π·Π΅ΠΌΡΡΠ° Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ΅Π½ ΡΠ΅Π·ΠΈΡΡΠΎΡ, ΠΊΠΎΠΉΡΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° Π²ΡΡΡΠ΅ΡΠ½ΠΎΡΠΎ ΡΡΠΏΡΠΎΡΠΈΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄ΠΈΡΠ΅, Π²ΠΈΠΆΡΠ΅ Π³ΡΠ°ΡΠΈΠΊΠ°ΡΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ° 9 ΠΎΡ Π»ΠΈΡΡΠ° Ρ Π΄Π°Π½Π½ΠΈ. Π DM634 ΡΠΎΠ²Π° ΡΡΠΏΡΠΎΡΠΈΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ ΡΡΡΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΠΎΡ ΡΠΎΡΡΡΠ΅Ρ ΡΡΠ΅Π· Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΠΎΠ±ΡΠ°ΡΠ° ΡΡΠΊΠΎΡΡ (Π³Π»ΠΎΠ±Π°Π»Π½Π° ΡΡΠΊΠΎΡΡ); ΠΡΠΌΠ° Π΄Π° Π½Π°Π²Π»ΠΈΠ·Π°ΠΌ Π² ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π² ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ, ΠΏΡΠΎΡΡΠΎ ΡΠ΅ ΡΠ»ΠΎΠΆΠ° ΡΡΠΊ ΡΠ΅Π·ΠΈΡΡΠΎΡ ΠΎΡ 2.2 - 3 kOhm.
ΠΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠ΅ ΡΠΈΠΏΠ°, Π½Π΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ:
ΠΠ°, Π΅ΡΠΎ Π³ΠΎ, ΠΊΠΈΡΠ°ΠΉΡΠΊΠΈ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈ Π² ΡΠ΅Π»ΠΈΡ ΠΌΡ Π±Π»ΡΡΡΠΊ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π²Π΅Π΄Π΅ ΡΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅, Π°ΠΊΠΎ ΠΆΠ΅Π»Π°Π΅ΡΠ΅, Π½ΠΎ ΠΈΠΌΠ° Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½ - Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΠΊΠ°ΠΊ Π΅ ΠΎΠΏΠΈΡΠ°Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π² Π»ΠΈΡΡΠ° Ρ Π΄Π°Π½Π½ΠΈ ΠΊΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎ Π±Π»ΠΈΠ·ΠΊΠΈΡ TLC5940:
β¦ ΠΠ° Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ ΡΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ ΡΠ°ΠΌΠΎ ΡΡΠΈ ΠΏΠΈΠ½Π°. ΠΠ°ΡΠ°ΡΡΠ²Π°ΡΠΈΡΡ ΡΡΠ± Π½Π° ΡΠΈΠ³Π½Π°Π»Π° SCLK ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π° Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ ΡΠΈΡΡΠ° SIN ΠΊΡΠΌ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ. Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ Π²ΡΠΈΡΠΊΠΈ Π΄Π°Π½Π½ΠΈ Π±ΡΠ΄Π°Ρ Π·Π°ΡΠ΅Π΄Π΅Π½ΠΈ, ΠΊΡΠ°ΡΡΠΊ Π²ΠΈΡΠΎΠΊ XLAT ΡΠΈΠ³Π½Π°Π» Π·Π°ΠΊΠ»ΡΡΠ²Π° ΡΠ΅ΡΠΈΠΉΠ½ΠΎ ΠΏΡΠ΅Ρ
Π²ΡΡΠ»Π΅Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π²ΡΠ² Π²ΡΡΡΠ΅ΡΠ½ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈ. ΠΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ ΡΠ° Π²ΡΠ°ΡΠΈ, Π·Π°Π΄Π΅ΠΉΡΡΠ²Π°Π½ΠΈ ΠΎΡ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΡΠΈΠ³Π½Π°Π»Π° XLAT. ΠΡΠΈΡΠΊΠΈ Π΄Π°Π½Π½ΠΈ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ ΠΏΡΡΠ²ΠΎ MSB.
ΡΠ΅Π·Π΅ - ΡΠ΅Π·Π΅ / ΡΠ΅Π·Π΅ / ΡΠ΅Π·Π΅.
ΠΡΠ·Ρ
ΠΎΠ΄ΡΡ ΡΡΠ± Π΅ Π²ΠΎΠ΄Π΅ΡΠΈΡΡ ΡΡΠΎΠ½Ρ Π½Π° ΠΈΠΌΠΏΡΠ»ΡΠ°
ΠΡΡΠ²ΠΎ MSB β Π½Π°ΠΉ-Π·Π½Π°ΡΠΈΠΌΠΈΡΡ (Π½Π°ΠΉ-Π»ΡΠ²) Π±ΠΈΡ Π½Π°ΠΏΡΠ΅Π΄.
Π·Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ β ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ (Π±ΠΈΡ ΠΏΠΎ Π±ΠΈΡ).
ΠΡΠΌΠ° ΡΠ΅Π·Π΅ ΡΠ΅ΡΡΠΎ ΡΠ΅ ΡΡΠ΅ΡΠ° Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π·Π° ΡΠΈΠΏΠΎΠ²Π΅ ΠΈ ΡΠ΅ ΠΏΡΠ΅Π²Π΅ΠΆΠ΄Π° ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ Π·Π° ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ΅ ΡΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»Ρ
ΠΌΠ°Π»ΠΊΠ° ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°LED Π΄ΡΠ°ΠΉΠ²Π΅ΡΡΡ Π΅ ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅Π³ΠΈΡΡΡΡ Π·Π° ΡΠΌΡΠ½Π°. "Shift" (ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅) Π² ΠΈΠΌΠ΅ΡΠΎ - Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π±ΠΈΡ ΠΏΠΎ Π±ΠΈΡ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ Π²ΡΡΡΠ΅ Π² ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ: Π²ΡΠ΅ΠΊΠΈ Π½ΠΎΠ² Π±ΠΈΡ, ΠΏΡΡ Π½Π°Ρ Π²ΡΡΡΠ΅, ΠΈΠ·Π±ΡΡΠ²Π° ΡΡΠ»Π°ΡΠ° Π²Π΅ΡΠΈΠ³Π° Π½Π°ΠΏΡΠ΅Π΄ ΠΏΡΠ΅Π΄ ΡΠ΅Π±Π΅ ΡΠΈ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ ΠΈΡΠΊΠ° Π΄Π° Π½Π°Π±Π»ΡΠ΄Π°Π²Π° Ρ Π°ΠΎΡΠΈΡΠ½ΠΎΡΠΎ ΠΌΠΈΠ³Π°Π½Π΅ Π½Π° ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠΌΡΠ½Π°, ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π² Π±ΡΡΠ΅ΡΠ½ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈ, ΠΎΡΠ΄Π΅Π»Π΅Π½ΠΈ ΠΎΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΈΡΠ΅ Ρ ΠΊΠ°ΠΏΠ°ΠΊ (ΡΠ΅Π·Π΅) Π΅ Π²ΠΈΠ΄ ΡΡΠ±Π»Π΅ΠΊΠ°Π»Π½Ρ, ΠΊΡΠ΄Π΅ΡΠΎ Π±ΠΈΡΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ΄ΡΠ΅ΠΆΠ΄Π°Ρ Π² ΠΆΠ΅Π»Π°Π½Π°ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ. ΠΠΎΠ³Π°ΡΠΎ Π²ΡΠΈΡΠΊΠΎ Π΅ Π³ΠΎΡΠΎΠ²ΠΎ, Π·Π°ΡΠ²ΠΎΡΡΡ ΡΠ΅ ΠΎΡΠ²Π°ΡΡ ΠΈ Π±ΠΈΡΠΎΠ²Π΅ΡΠ΅ Π·Π°ΠΏΠΎΡΠ²Π°Ρ ΡΠ°Π±ΠΎΡΠ°, Π·Π°ΠΌΠ΅ΡΡΠ²Π°ΠΉΠΊΠΈ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΠΏΠ°ΡΡΠΈΠ΄Π°. Π‘Π»ΠΎΠ²ΠΎ ΡΠ΅Π·Π΅ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π·Π° ΠΌΠΈΠΊΡΠΎΡΡ Π΅ΠΌΠΈ ΠΏΠΎΡΡΠΈ Π²ΠΈΠ½Π°Π³ΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π° ΡΠ°ΠΊΡΠ² Π°ΠΌΠΎΡΡΠΈΡΡΠΎΡ, Π² ΠΊΠ°ΠΊΠ²ΠΈΡΠΎ ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°.
Π ΡΠ°ΠΊΠ°, ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΊΡΠΌ DM634 ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½: Π·Π°Π΄Π°ΠΉΡΠ΅ DAI Π²Ρ ΠΎΠ΄Π° Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° Π²ΠΈΡΠΎΠΊΠΈΡ Π±ΠΈΡ Π½Π° Π΄Π°Π»Π΅ΡΠ½ΠΈΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄, ΠΈΠ·Π΄ΡΡΠΏΠ°ΠΉΡΠ΅ DCK Π½Π°Π³ΠΎΡΠ΅ ΠΈ Π½Π°Π΄ΠΎΠ»Ρ; Π·Π°Π΄Π°ΠΉΡΠ΅ DAI Π²Ρ ΠΎΠ΄Π° Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ Π±ΠΈΡ, ΠΈΠ·Π΄ΡΡΠΏΠ°ΠΉΡΠ΅ DCK; ΠΈ ΡΠ°ΠΊΠ° Π½Π°ΡΠ°ΡΡΠΊ, Π΄ΠΎΠΊΠ°ΡΠΎ Π²ΡΠΈΡΠΊΠΈ Π±ΠΈΡΠΎΠ²Π΅ Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ΠΈ (ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ), ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·Π΄ΡΡΠΏΠ²Π°ΠΌΠ΅ LAT. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ°Π½Π΅ ΡΡΡΠ½ΠΎΠΌΠ°Π»ΠΊΠΎ Π²Π·ΡΠΈΠ²), Π½ΠΎ Π΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΠΈΠ·ΠΎΡΡΡΠ΅Π½ΠΈΡ SPI ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° ΡΠΎΠ²Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠΉ Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ Π½Π° Π½Π°ΡΠΈΡ STM32 Π² Π΄Π²Π΅ ΠΊΠΎΠΏΠΈΡ.
Π‘ΠΈΠ½ ΡΠ°Π±Π»Π΅Ρ STM32F103
ΠΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅: ΠΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈΡΠ΅ STM32 ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΈ ΠΎΡ Atmega328, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΠ»Π°ΡΠ΅ΡΠΈ. Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅, ΠΎΡ ΡΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π° ΠΏΠ΅ΡΡΠ΅Π½Π΅ Π½Π° Π΅Π½Π΅ΡΠ³ΠΈΡ, ΠΏΠΎΡΡΠΈ Π²ΡΠΈΡΠΊΠΈ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΡΠ° Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ, Π° ΡΠ°ΠΊΡΠΎΠ²Π°ΡΠ° ΡΠ΅ΡΡΠΎΡΠ° Π΅ 8 MHz ΠΎΡ Π²ΡΡΡΠ΅ΡΠ΅Π½ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ. ΠΠ° ΡΠ°ΡΡΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈΡΠ΅ Π½Π° STM Π½Π°ΠΏΠΈΡΠ°Ρ
Π° ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ Π΄ΠΎΠ²Π΅ΠΆΠ΄Π° ΡΠΈΠΏΠ° Π΄ΠΎ βΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡΠ΅β 72 MHz, ΠΈ Π°Π²ΡΠΎΡΠΈΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ IDE, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ·Π½Π°Π²Π°ΠΌ, Π³ΠΎ Π²ΠΊΠ»ΡΡΠΈΡ
Π° Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΡΠ° Π·Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, ΡΠ°ΠΊΠ° ΡΠ΅ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ (Π½ΠΎ
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ: ΠΠΎΠΏΡΠ»ΡΡΠ½ΠΈΡΡ ΡΠΈΠΏ STM32F103C8T6 Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Π½Π° Blue Pill, ΠΈΠΌΠ° Π΄Π²Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π·Π° Π½Π΅Π³ΠΎ:
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π·Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ STM32F103x8 ΠΈ STM32F103xB;Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° ΡΡΠ»Π°ΡΠ° Π»ΠΈΠ½ΠΈΡ STM32F103 ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅.
Π Π»ΠΈΡΡΠ° Ρ Π΄Π°Π½Π½ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ ΠΎΡ:
- Pinouts - ΡΠΈΠΏΠΎΠ²Π΅ ΠΏΠΈΠ½Π°ΡΡΠΈ - Π² ΡΠ»ΡΡΠ°ΠΉ, ΡΠ΅ ΡΠ΅ΡΠΈΠΌ ΡΠ°ΠΌΠΈ Π΄Π° ΡΠΈ ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΠ»Π°ΡΠΊΠΈ;
- ΠΠ°ΡΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° - ΠΊΠ°ΡΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠΈΠΏ. Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊΡΡ ΠΈΠΌΠ° ΠΊΠ°ΡΡΠ° Π·Π° ΡΡΠ»Π°ΡΠ° Π»ΠΈΠ½ΠΈΡ, ΡΠΏΠΎΠΌΠ΅Π½Π°Π²Π° ΡΠ΅Π³ΠΈΡΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° Π½Π° Π½Π°ΡΠΈΡ.
- Π’Π°Π±Π»ΠΈΡΠ° Ρ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈ Π½Π° ΡΠΈΡΡΠΎΠ²Π΅ - ΡΠΏΠΈΡΡΠΊ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΈ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΡΠΈΡΡΠ°; Π·Π° βΡΠΈΠ½ΡΠΎΡΠΎ Ρ Π°ΠΏΡΠ΅β Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΏΠΎ-ΡΠ΄ΠΎΠ±Π½ΠΈ ΡΠ½ΠΈΠΌΠΊΠΈ ΡΡΡ ΡΠΏΠΈΡΡΠΊ Π½Π° ΡΠΈΡΡΠΎΠ²Π΅ΡΠ΅ ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ°ΡΠΎΠ²Π° Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ ΡΡΡΡΠΈΠΌ Π² Google Pinout Π½Π° Blue Pill ΠΈ Π΄ΡΡΠΆΠΈΠΌ ΡΠ°Π·ΠΈ ΡΠ½ΠΈΠΌΠΊΠ° ΠΏΠΎΠ΄ ΡΡΠΊΠ°:
NB: ΠΈΠΌΠ°ΡΠ΅ Π³ΡΠ΅ΡΠΊΠ° Π² ΡΠ½ΠΈΠΌΠΊΠ°ΡΠ° ΠΎΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ, Π·Π°Π±Π΅Π»ΡΠ·Π°Π½Π° Π² ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅, Π·Π° ΠΊΠΎΠ΅ΡΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ. ΠΠ°ΡΡΠΈΠ½Π°ΡΠ° Π΅ ΡΠΌΠ΅Π½Π΅Π½Π°, Π½ΠΎ ΡΠΎΠ²Π° Π΅ ΡΡΠΎΠΊ - ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ°, Π° Π½Π΅ ΠΎΡ ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ Ρ Π΄Π°Π½Π½ΠΈ.
ΠΡΠ΅ΠΌΠ°Ρ
Π²Π°ΠΌΠ΅ Π»ΠΈΡΡΠ° Ρ Π΄Π°Π½Π½ΠΈ, ΠΎΡΠ²Π°ΡΡΠΌΠ΅ Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ, ΠΎΡΡΡΠΊ Π½Π°ΡΠ°ΡΡΠΊ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°ΠΌΠΎ Π½Π΅Π³ΠΎ.
ΠΡΠΎΡΠ΅Π΄ΡΡΠ°: ΡΠ°Π±ΠΎΡΠ° ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½ Π²Ρ
ΠΎΠ΄ / ΠΈΠ·Ρ
ΠΎΠ΄, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° SPI, Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°.
ΠΡ ΠΎΠ΄ ΠΈΠ·Ρ ΠΎΠ΄
ΠΡΠΈ Atmega328 I/O Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠΎΡΡ, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·ΠΎΠ±ΠΈΠ»ΠΈΠ΅ΡΠΎ ΠΎΡ STM32 ΠΎΠΏΡΠΈΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΎΠ±ΡΡΠΊΠ²Π°ΡΠΎ. Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΆΠ΄Π° ΡΠ°ΠΌΠΎ ΠΎΡ ΠΈΠ·Π²ΠΎΠ΄ΠΈ, Π½ΠΎ Π΄ΠΎΡΠΈ ΠΈΠΌΠ° ΡΠ΅ΡΠΈΡΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ°:
ΠΠ·Ρ
ΠΎΠ΄ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ Π΄ΡΠ΅Π½Π°ΠΆ, ΠΈΠ·Ρ
ΠΎΠ΄ Push-Pull, Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π΅Π½ Push-Pull, Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π΅Π½ ΠΎΡΠ²ΠΎΡΠ΅Π½ Π΄ΡΠ΅Π½Π°ΠΆ
"ΠΡΡΠΏΠ°ΠΌ Π±ΡΡΠ°ΠΌ" (ΠΠ°ΡΠΈΡΠ½ΠΈ ΠΡΡΠΏΠ½ΠΈ) - ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈΡΡ ΠΈΠ·Ρ
ΠΎΠ΄ ΠΎΡ Arduino, ΡΠΈΡΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ HIGH ΠΈΠ»ΠΈ LOW. ΠΠΎ Ρ "ΠΎΡΠ²ΠΎΡΠ΅Π½ Π΄ΡΠ΅Π½Π°ΠΆ" Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΠΈΠ·Ρ
ΠΎΠ΄Π° / ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΡΡΡΡ Π΅ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ Π½Π° ΠΈΠ·Ρ
ΠΎΠ΄Π°: / ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡΡ Π±ΡΡΠ΅Ρ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½: / β ΠΎΡΠ²ΠΎΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΈΠ·ΡΠΎΡΠ²Π°Π½Π΅: "0" Π² ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π° N-MOS, "1" Π² ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ ΠΎΡΡΠ°Π²Ρ ΠΏΠΎΡΡΠ° Π² ΡΠ΅ΠΆΠΈΠΌ Hi-Z (P -MOS Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ ) / - ΡΠ΅ΠΆΠΈΠΌ Π½Π° Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅ ΠΈ ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅: "0" Π² ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° N-MOS, "1" Π² ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° P-MOS.
Π¦ΡΠ»Π°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° Π² ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈΡ Π΄ΡΠ΅Π½Π°ΠΆ (ΠΎΡΠ²ΠΎΡΠ΅Π½ Π΄ΡΠ΅Π½Π°ΠΆ) ΠΎΡ "Π±ΡΡΠ°Π½Π΅-Π΄ΡΡΠΏΠ°Π½Π΅" (ΠΠ°ΡΠΈΡΠ½ΠΈ ΠΡΡΠΏΠ½ΠΈ) Π΅, ΡΠ΅ Π² ΠΏΡΡΠ²ΠΈΡ ΡΠΈΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΈΠ΅ΠΌΠ΅ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ HIGH: ΠΊΠΎΠ³Π°ΡΠΎ Π΅Π΄ΠΈΠ½ΠΈΡΠ° Π±ΡΠ΄Π΅ Π·Π°ΠΏΠΈΡΠ°Π½Π° Π² ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ, ΡΡ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° Π² ΡΠ΅ΠΆΠΈΠΌ Π½Π° Π²ΠΈΡΠΎΠΊΠΎ ΡΡΠΏΡΠΎΡΠΈΠ²Π»Π΅Π½ΠΈΠ΅ (Π²ΠΈΡΠΎΠΊ ΠΈΠΌΠΏΠ΅Π΄Π°Π½Ρ, ΠΠ΄ΡΠ°Π²Π΅ΠΉ-Z). ΠΡΠΈ ΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π½ΡΠ»Π° ΡΠΈΡΡΡΡ ΠΈ Π² Π΄Π²Π°ΡΠ° ΡΠ΅ΠΆΠΈΠΌΠ° ΡΠ΅ Π΄ΡΡΠΆΠΈ Π΅Π΄Π½Π°ΠΊΠ²ΠΎ, ΠΊΠ°ΠΊΡΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ, ΡΠ°ΠΊΠ° ΠΈ Π΅Π»Π΅ΠΊΡΡΠΈΡΠ΅ΡΠΊΠΈ.
Π Π½ΠΎΡΠΌΠ°Π»Π΅Π½ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΡΠΈΡΡΡΡ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠ΅Π²Π΅ΠΆΠ΄Π° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ. Π "Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°" ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ²Π° ΠΎΡ ΡΡΠΎΡΠ²Π΅ΡΠ½Π°ΡΠ° ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΡ (Π²ΠΈΠΆΡΠ΅ 9.1.4):
ΠΠΊΠΎ Π±ΠΈΡΡΡ Π½Π° ΠΏΠΎΡΡΠ° Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ ΠΊΠ°ΡΠΎ ΠΈΠ·Ρ
ΠΎΠ΄ Π·Π° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡΡ Π΅ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ ΠΈ ΡΠΈΡΡΡΡ Π΅ ΡΠ²ΡΡΠ·Π°Π½ ΠΊΡΠΌ ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π» Π½Π° ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΎΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ.
ΠΠ»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΡΠΈΡΡ Π΅ ΠΎΠΏΠΈΡΠ°Π½Π° Π² ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π° ΠΠΠ ΠΠΈΡΡΡΡ Ρ Π΄Π°Π½Π½ΠΈ Π΅ Π½Π° ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½Π°ΡΠ° ΡΠ½ΠΈΠΌΠΊΠ°. ΠΠ° Π²ΡΠΏΡΠΎΡΠ° ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅, Π°ΠΊΠΎ ΡΠΈΡΡΡΡ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΡΠ³ΠΎΠ²ΠΎΡΡΡ Π΅ Π΄Π°Π΄Π΅Π½ ΠΎΡ Π±Π΅Π»Π΅ΠΆΠΊΠ° ΠΏΠΎΠ΄ Π»ΠΈΠ½ΠΈΡ Π² Π»ΠΈΡΡΠ° Ρ Π΄Π°Π½Π½ΠΈ:
ΠΠΊΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ ΡΠΈΡΡ, Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ ΠΌΠ΅ΠΆΠ΄Ρ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°ΠΌΠΎ Π΅Π΄Π½ΠΎ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π² Π΄Π°Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π±ΠΈΡΠ° Π·Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠ° Π½Π° ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΡΡΠ° (Π² ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ RCC ΡΠ΅Π³ΠΈΡΡΡΡ).
Π Π½Π°ΠΊΡΠ°Ρ, ΡΠΈΡΡΠΎΠ²Π΅ΡΠ΅ Π² ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΡΡΡΠΎ ΠΈΠΌΠ°Ρ ΡΠ°ΠΊΡΠΎΠ²Π° ΡΠ΅ΡΡΠΎΡΠ°. Π’ΠΎΠ²Π° Π΅ Π΄ΡΡΠ³Π° ΡΡΠ½ΠΊΡΠΈΡ Π·Π° ΠΏΠ΅ΡΡΠ΅Π½Π΅ Π½Π° Π΅Π½Π΅ΡΠ³ΠΈΡ, Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΠΏΡΠΎΡΡΠΎ Ρ Π½Π°ΡΡΡΠΎΠΉΠ²Π°ΠΌΠ΅ Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ ΠΈ Ρ Π·Π°Π±ΡΠ°Π²ΡΠΌΠ΅.
Π ΡΠ°ΠΊΠ°: Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ SPI, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π΄Π²Π° ΠΏΠΈΠ½Π° (Ρ Π΄Π°Π½Π½ΠΈ ΠΈ Ρ ΡΠ°ΠΊΡΠΎΠ² ΡΠΈΠ³Π½Π°Π») ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ βΠ°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π·Π° Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅ ΠΈ ΠΈΠ·Π΄ΡΡΠΏΠ²Π°Π½Π΅β, Π° ΠΎΡΠ΅ Π΅Π΄ΠΈΠ½ (LAT) ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ βΠ½ΠΎΡΠΌΠ°Π»Π½Π° Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅ ΠΈ ΠΈΠ·Π΄ΡΡΠΏΠ²Π°Π½Π΅β. ΠΠΎ ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π³ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΠ΅, Π½Π΅ΠΊΠ° ΡΠ΅ Π·Π°Π΅ΠΌΠ΅ΠΌ ΡΡΡ SPI.
SPI
ΠΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΌΠ°Π»ΡΠΊ Ρ Π°ΠΊ
SPI ΠΈΠ»ΠΈ Serial Peripheral Interface (ΡΠ΅ΡΠΈΠ΅Π½ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ) Π΅ ΠΏΡΠΎΡΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ Π½Π° MK Ρ Π΄ΡΡΠ³ΠΈ MK ΠΈ Π²ΡΠ½ΡΠ½ΠΈΡ ΡΠ²ΡΡ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ. ΠΡΠΈΠ½ΡΠΈΠΏΡΡ Π½Π° Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π²Π΅ΡΠ΅ Π΅ ΠΎΠΏΠΈΡΠ°Π½ ΠΏΠΎ-Π³ΠΎΡΠ΅, ΠΊΡΠ΄Π΅ΡΠΎ Π·Π° ΠΊΠΈΡΠ°ΠΉΡΠΊΠΈΡ LED Π΄ΡΠ°ΠΉΠ²Π΅Ρ (Π²ΠΈΠΆΡΠ΅ ΡΠ°Π·Π΄Π΅Π» 25 Π² ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ). SPI ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π² Π³Π»Π°Π²Π΅Π½ ("master") ΠΈ ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½ ("slave") ΡΠ΅ΠΆΠΈΠΌΠΈ. SPI ΠΈΠΌΠ° ΡΠ΅ΡΠΈΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΠΊΠ°Π½Π°Π»Π°, ΠΎΡ ΠΊΠΎΠΈΡΠΎ Π½Π΅ Π²ΡΠΈΡΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ:
- MOSI, Π³Π»Π°Π²Π΅Π½ ΠΈΠ·Ρ ΠΎΠ΄ / ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½ Π²Ρ ΠΎΠ΄: ΡΠΎΠ·ΠΈ ΡΠΈΡΡ ΠΈΠ·ΠΏΡΠ°ΡΠ° Π΄Π°Π½Π½ΠΈ Π² Π³Π»Π°Π²Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π΄Π°Π½Π½ΠΈ Π² ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ;
- MISO, Master Input / Slave Output: Π½Π°ΠΏΡΠΎΡΠΈΠ², Π² Π³Π»Π°Π²Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠ°Π²Π°, Π² ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½ΠΈΡ Π΄Π°Π²Π°;
- SCK, ΡΠ΅ΡΠΈΠ΅Π½ ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ: Π·Π°Π΄Π°Π²Π° ΡΠ΅ΡΡΠΎΡΠ°ΡΠ° Π½Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² Π³Π»Π°Π²Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠΎΠ² ΡΠΈΠ³Π½Π°Π» Π² ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½ΠΈΡ. ΠΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ Π±ΠΈΠ΅ Π±ΠΈΠΉΡΠΎΠ²Π΅ΡΠ΅;
- 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 Π² ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ), Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠΈΡΡΡΡ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ (ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ MISO ΠΈΠ»ΠΈ MOSI) ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ Π½ΠΎΡΠΌΠ°Π»Π΅Π½ I/O ΠΊΠ°ΡΡΠΈΡΠ°. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΠΈΠ³Π½ΠΎΡΠΈΡΠ° Rx Π±ΡΡΠ΅ΡΠ° (Π°ΠΊΠΎ Π΅ ΠΏΡΠΎΡΠ΅ΡΠ΅Π½, Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ° ΠΏΡΠ΅Π΄Π°Π²Π°Π½ΠΈ Π΄Π°Π½Π½ΠΈ).
Π‘ΡΡΠ°Ρ ΠΎΡΠ½ΠΎ, ΡΠΈΡΡΡΡ MISO Π΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½, Π½Π΅ΠΊΠ° ΡΠ²ΡΡΠΆΠ΅ΠΌ LAT ΡΠΈΠ³Π½Π°Π»Π° ΠΊΡΠΌ Π½Π΅Π³ΠΎ. ΠΠ΅ΠΊΠ° ΡΠ΅ Π·Π°Π΅ΠΌΠ΅ΠΌ ΡΡΡ 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, ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π½ΠΈΡΡ Π΄ΡΠ°ΠΉΠ²Π΅Ρ, ΡΠΏΠΎΡΠ΅Π΄ Π½Π΅Π³ΠΎΠ²ΠΈΡ Π»ΠΈΡΡ Ρ Π΄Π°Π½Π½ΠΈ, ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΡΠ΅ΡΡΠΎΡΠ° Π΄ΠΎ 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 (Clock Polarity) ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΊΡΠΎΠ²ΠΈΡ ΡΠΈΠ³Π½Π°Π», ΠΊΠΎΠ³Π°ΡΠΎ Π½Π΅ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ·ΠΈ Π±ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° Π³Π»Π°Π²Π½ΠΈΡ ΠΈ ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½ΠΈΡ ΡΠ΅ΠΆΠΈΠΌ. ΠΠΊΠΎ CPOL Π΅ Π½ΡΠ»ΠΈΡΠ°Π½, ΡΠΈΡΡΡΡ SCK Π΅ Π½ΠΈΡΡΠΊ Π² ΠΏΠΎΠΊΠΎΠΉ. ΠΠΊΠΎ Π±ΠΈΡΡΡ CPOL Π΅ Π·Π°Π΄Π°Π΄Π΅Π½, SCK ΡΠΈΡΡΡΡ Π΅ Π²ΠΈΡΠΎΠΊ, ΠΊΠΎΠ³Π°ΡΠΎ Π΅ Π½Π΅Π°ΠΊΡΠΈΠ²Π΅Π½.
ΠΠΊΠΎ Π±ΠΈΡΡΡ CPHA (ΡΠ°ΠΊΡΠΎΠ²Π° ΡΠ°Π·Π°) Π΅ Π·Π°Π΄Π°Π΄Π΅Π½, ΡΡΡΠΎΠ±ΡΡ Π½Π° ΠΏΡΠΈΡ
Π²Π°ΡΠ°Π½Π΅ Π½Π° MSB Π΅ Π²ΡΠΎΡΠΈΡΡ ΡΡΠΎΠ½Ρ Π½Π° SCK ΡΠΈΠ³Π½Π°Π»Π° (Π½Π°ΠΌΠ°Π»ΡΠ²Π°Ρ, Π°ΠΊΠΎ CPOL Π΅ ΠΈΠ·ΡΠΈΡΡΠ΅Π½, ΠΈΠ»ΠΈ Π½Π°ΡΠ°ΡΡΠ²Π°Ρ ΡΡΠΎΠ½Ρ, Π°ΠΊΠΎ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ CPOL). ΠΠ°Π½Π½ΠΈΡΠ΅ ΡΠ΅ ΡΠΈΠΊΡΠΈΡΠ°Ρ ΠΏΡΠΈ Π²ΡΠΎΡΠ°ΡΠ° ΡΠΌΡΠ½Π° Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠ°. ΠΠΊΠΎ CPHA Π±ΠΈΡΡΡ Π΅ ΠΈΠ·ΡΠΈΡΡΠ΅Π½, Π½Π°ΡΠ°ΡΡΠ²Π°ΡΠΈΡΡ ΡΡΠΎΠ½Ρ Π½Π° SCK ΡΠΈΠ³Π½Π°Π»Π° (ΡΠΏΠ°Π΄Π°Ρ ΡΡΠΎΠ½Ρ, Π°ΠΊΠΎ CPOL Π΅ Π·Π°Π΄Π°Π΄Π΅Π½, ΠΈΠ»ΠΈ Π½Π°ΡΠ°ΡΡΠ²Π°Ρ ΡΡΠΎΠ½Ρ, Π°ΠΊΠΎ CPOL Π΅ ΠΈΠ·ΡΠΈΡΡΠ΅Π½) ΡΠ»ΡΠΆΠΈ ΠΊΠ°ΡΠΎ ΡΡΡΠΎΠ± Π·Π° ΡΠ»Π°Π²ΡΠ½Π΅ Π½Π° Π²ΠΈΡΠΎΠΊΠΈ Π±ΠΈΡΠΎΠ²Π΅. ΠΠ°Π½Π½ΠΈΡΠ΅ ΡΠ΅ Π·Π°ΠΊΠ»ΡΡΠ²Π°Ρ ΠΏΡΠΈ ΠΏΡΡΠ²Π°ΡΠ° ΡΠΌΡΠ½Π° Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠ°.
ΠΠΊΡΡΠ²Π°ΠΉΠΊΠΈ ΡΠΎΠ²Π° Π·Π½Π°Π½ΠΈΠ΅, ΡΡΠΈΠ³Π°ΠΌΠ΅ Π΄ΠΎ ΠΈΠ·Π²ΠΎΠ΄Π°, ΡΠ΅ ΠΈ Π΄Π²Π°ΡΠ° Π±ΠΈΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΡΡΠ°Π½Π°Ρ Π½ΡΠ»Π°, Π·Π°ΡΠΎΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ SCK ΡΠΈΠ³Π½Π°Π»ΡΡ Π΄Π° ΠΎΡΡΠ°Π½Π΅ Π½ΠΈΡΡΠΊ, ΠΊΠΎΠ³Π°ΡΠΎ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, ΠΈ Π΄Π°Π½Π½ΠΈΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ ΠΏΠΎ Π½Π°ΡΠ°ΡΡΠ²Π°ΡΠΈΡ ΡΡΠΎΠ½Ρ Π½Π° ΠΈΠΌΠΏΡΠ»ΡΠ° (Π²ΠΈΠΆΡΠ΅ ΡΠΈΠ³. Π½Π°ΡΠ°ΡΡΠ²Π°Ρ ΡΡΠ± Π² Π»ΠΈΡΡ Ρ Π΄Π°Π½Π½ΠΈ DM634).
ΠΠ΅ΠΆΠ΄Ρ Π΄ΡΡΠ³ΠΎΡΠΎ, ΡΡΠΊ Π·Π° ΠΏΡΡΠ²ΠΈ ΠΏΡΡ ΡΡΠ΅ΡΠ½Π°Ρ ΠΌΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π½Π° ΡΠ΅ΡΠ½ΠΈΠΊΠ° Π² ST ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ Ρ Π΄Π°Π½Π½ΠΈ: Π² ΡΡΡ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° ΡΡΠ°Π·Π°ΡΠ° βΠ½ΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° Π±ΠΈΡΠ° Π΄ΠΎ Π½ΡΠ»Π°β Π΄Π° Π½ΡΠ»ΠΈΡΠ°ΠΌ ΠΌΠ°Π»ΠΊΠΎΠ Π½Π΅ Π΄Π° ΠΈΠ·ΡΠΈΡΡΡ ΠΌΠ°Π»ΠΊΠΎ, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Atmega.
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 ΠΈΡΠΊΠ° ΠΏΡΡΠ²ΠΎ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ MSB Π΄Π°Π½Π½ΠΈ. ΠΠ°ΡΠΎΠ²Π° Π³ΠΎ ΠΎΡΡΠ°Π²ΡΠΌΠ΅ Π½ΡΠ»ΠΈΡΠ°Π½.
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 pin ΡΠ΅ΠΆΠΈΠΌ, ΠΏΡΡΠ²ΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π΅Π½ Π±ΠΈΡ Π½Π°ΠΏΡΠ΅Π΄ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π½Π° Π±ΠΈΡΠ° 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 Data Register":
ΠΠΈΡΠΎΠ²Π΅ 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 ΡΠΈΡΡΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ Π½Π΅ΠΊΠ° ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ ΠΊΡΠΌ I/O.
ΠΠ°Π΄Π°ΠΉΡΠ΅ ΡΠΈΡΡΠΎΠ²Π΅
Π STM32F1 ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅, ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΈ Π·Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΈΡΡΠΎΠ²Π΅ΡΠ΅, ΡΠ° Π΄ΠΎΡΡΠ° Π½Π΅ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈ. Π―ΡΠ½ΠΎ Π΅, ΡΠ΅ ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Atmega, Π½ΠΎ ΡΠ΅ ΡΡΡΠΎ ΡΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΡ Π΄ΡΡΠ³ΠΈΡΠ΅ STM ΡΠΈΠΏΠΎΠ²Π΅. Π Π°Π·Π΄Π΅Π» 9.1 ΠΠ±ΡΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° GPIO:
ΠΡΠ΅ΠΊΠΈ ΠΎΡ I/O ΠΏΠΎΡΡΠΎΠ²Π΅ΡΠ΅ Ρ ΠΎΠ±ΡΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (GPIO) ΠΈΠΌΠ° Π΄Π²Π° 32-Π±ΠΈΡΠΎΠ²ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ΅Π³ΠΈΡΡΡΡΠ° (GPIOx_CRL ΠΈ GPIOx_CRH), Π΄Π²Π° 32-Π±ΠΈΡΠΎΠ²ΠΈ ΡΠ΅Π³ΠΈΡΡΡΡΠ° Π·Π° Π΄Π°Π½Π½ΠΈ (GPIOx_IDR ΠΈ GPIOx_ODR), 32-Π±ΠΈΡΠΎΠ² ΡΠ΅Π³ΠΈΡΡΡΡ Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ°/Π½ΡΠ»ΠΈΡΠ°Π½Π΅ (GPIOx_BSRR), 16-Π±ΠΈΡΠΎΠ² ΡΠ΅Π³ΠΈΡΡΡΡ Π·Π° Π½ΡΠ»ΠΈΡΠ°Π½Π΅ (GPIOx_BRR) ΠΈ 32- ΡΠ΅Π³ΠΈΡΡΡΡ Π·Π° Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ Π½Π° Π±ΠΈΡΠΎΠ²Π΅ (GPIOx_LCKR).
ΠΠ΅ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈ, Π° ΡΡΡΠΎ ΠΈ Π΄ΠΎΡΡΠ° Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΈ, ΡΠ° ΠΏΡΡΠ²ΠΈΡΠ΅ Π΄Π²Π° ΡΠ΅Π³ΠΈΡΡΡΡΠ° ΡΡΠΊ, Π·Π°ΡΠΎΡΠΎ 16-ΡΠ΅ ΠΏΠΈΠ½Π° Π½Π° ΠΏΠΎΡΡΠ° ΡΠ° ΡΠ°Π·ΠΏΡΡΡΠ½Π°ΡΠΈ ΠΏΠΎ ΡΡΡ Π²ΡΠ² ΡΠΎΡΠΌΠ°Ρ "ΡΠ΅ΡΠΈΡΠΈ Π±ΠΈΡΠ° Π½Π° Π±ΡΠ°Ρ". Π’Π΅Π·ΠΈ. ΡΠΈΡΡΠΎΠ²Π΅ ΠΎΡ XNUMX Π΄ΠΎ XNUMX ΡΠ° Π² CRL, Π° ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ ΡΠ° Π² CRH. Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅, ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΠ°ΡΠ²Π°Ρ Π½Π° Π±ΠΈΡΠΎΠ²Π΅ΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΠΈΡΡΠΎΠ²Π΅ Π½Π° ΠΏΠΎΡΡΠ° - ΡΠ΅ΡΡΠΎ ΠΎΡΡΠ°Π²Π°ΠΉΠΊΠΈ Π½Π°ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° "Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈ".
ΠΠ° ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ Π½Π΅ΠΊΠ° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ ΠΎΡ ΠΊΡΠ°Ρ Π½Π° ΡΠΏΠΈΡΡΠΊΠ°.
ΠΡΠΌΠ°ΠΌΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ Π±Π»ΠΎΠΊΠΈΡΠ°Ρ ΡΠ΅Π³ΠΈΡΡΡΡ.
Π Π΅Π³ΠΈΡΡΡΠΈΡΠ΅ Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΈ Π½ΡΠ»ΠΈΡΠ°Π½Π΅ ΡΠ° Π΄ΠΎΡΡΠ° Π·Π°Π±Π°Π²Π½ΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΡΠ΅ Π΄ΡΠ±Π»ΠΈΡΠ°Ρ Π΅Π΄ΠΈΠ½ Π΄ΡΡΠ³: ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ ΡΠ°ΠΌΠΎ Π² BSRR, ΠΊΡΠ΄Π΅ΡΠΎ Π³ΠΎΡΠ½ΠΈΡΠ΅ 16 Π±ΠΈΡΠ° ΡΠ΅ Π½ΡΠ»ΠΈΡΠ°Ρ ΡΠΈΡΡΠ° Π½Π° Π½ΡΠ»Π°, Π° Π΄ΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ Π½Π° 1, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ BRR, ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΈΡΠ΅ 16 Π±ΠΈΡΠ° ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΠ°ΠΌΠΎ Π½ΡΠ»ΠΈΡΠ°Ρ ΡΠΈΡΡΠ°. Π₯Π°ΡΠ΅ΡΠ²Π°ΠΌ Π²ΡΠΎΡΠΈΡ Π²Π°ΡΠΈΠ°Π½Ρ. Π’Π΅Π·ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈ ΡΠ° Π²Π°ΠΆΠ½ΠΈ, Π·Π°ΡΠΎΡΠΎ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Ρ Π°ΡΠΎΠΌΠ΅Π½ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠΈΡΡΠΎΠ²Π΅ΡΠ΅:
Atomic ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ ΠΈΠ»ΠΈ Π½ΡΠ»ΠΈΡΠ°Π½Π΅
ΠΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π·Π°Π±ΡΠ°Π½ΡΠ²Π°ΡΠ΅ ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½ΠΈΡΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΡΠ΅ GPIOx_ODR Π½Π° Π±ΠΈΡΠΎΠ²ΠΎ Π½ΠΈΠ²ΠΎ: ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ Π±ΠΈΡΠ° Ρ Π΅Π΄Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π° Π°ΡΠΎΠΌΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° APB2. Π’ΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π° ΡΡΠ΅Π· Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° "1" Π² ΡΠ΅Π³ΠΈΡΡΡΡΠ° Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ°/Π½ΡΠ»ΠΈΡΠ°Π½Π΅ (GPIOx_BSRR ΠΈΠ»ΠΈ, ΡΠ°ΠΌΠΎ Π·Π° Π½ΡΠ»ΠΈΡΠ°Π½Π΅, GPIOx_BRR) Π½Π° Π±ΠΈΡΠ°, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ. ΠΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ Π±ΠΈΡΠΎΠ²Π΅ ΡΠ΅ ΠΎΡΡΠ°Π½Π°Ρ Π½Π΅ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ΠΈ.
Π Π΅Π³ΠΈΡΡΡΠΈΡΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈΠΌΠ°Ρ Π΄ΠΎΡΡΠ° ΠΊΡΠ°ΡΠ½ΠΎΡΠ΅ΡΠΈΠ²ΠΈ ΠΈΠΌΠ΅Π½Π° - IDR = ΠΡ ΠΎΠ΄ Π Π΅Π³ΠΈΡΡΡΡ Π½Π° ΠΏΠΎΡΠΎΠΊΠ°ΡΠ°, Π²Ρ ΠΎΠ΄Π΅Π½ ΡΠ΅Π³ΠΈΡΡΡΡ; ODR= ΠΡΠΎΠ΄ΡΠΊΡΠΈΡ Π Π΅Π³ΠΈΡΡΡΡ Π½Π° ΠΏΠΎΡΠΎΠΊΠ°ΡΠ°, ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΡΠ΅Π³ΠΈΡΡΡΡ. Π Π½Π°ΡΡΠΎΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡ Π½ΡΠΌΠ°ΠΌΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ ΡΡΡ .
Π Π½Π°ΠΊΡΠ°Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΠΌΠ΅ ΠΎΡ ΡΠΈΡΡΠΎΠ²Π΅ΡΠ΅ Π½Π° Π²ΡΠΎΡΠΈΡ SPI, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ PB13, PB14 ΠΈ PB15, Π²Π΅Π΄Π½Π°Π³Π° ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ CRH:
Π Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠ΅ ΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π½Π΅ΡΠΎ Π² Π±ΠΈΡΠΎΠ²Π΅ ΠΎΡ 20-ΡΠΈ Π΄ΠΎ 31-Π²ΠΈ.
ΠΠ΅ΡΠ΅ ΡΠ°Π·Π±ΡΠ°Ρ ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ ΠΎΡ ΡΠΈΡΡΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΡΠΊ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Ρ Π±Π΅Π· Π΅ΠΊΡΠ°Π½Π½Π° ΡΠ½ΠΈΠΌΠΊΠ°, ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΠ΅, ΡΠ΅ MODE Π·Π°Π΄Π°Π²Π° ΠΏΠΎΡΠΎΠΊΠ°ΡΠ° (Π²ΡΠ²Π΅ΠΆΠ΄Π° ΡΠ΅, Π°ΠΊΠΎ ΠΈ Π΄Π²Π°ΡΠ° Π±ΠΈΡΠ° ΡΠ° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ Π½Π° 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, ΡΡΠΊ ΠΏΠ΅ΡΡΡΡ Π΅Π»Π΅ΠΊΡΡΠΈΡΠ΅ΡΡΠ²ΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΊΠ»ΠΎΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΡ.
ΠΠΊΠ»ΡΡΠ΅ΡΠ΅ ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠ°
Π§Π°ΡΠΎΠ²Π½ΠΈΠΊΡΡ Π΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠ°, ΡΠ΅ ΡΡΡΠΎ ΡΠ° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ. Π Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ΅ Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌ ΡΡΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ΡΠΎ RCC. Π’ΡΡΡΠΈΠΌ Π³ΠΎ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ°: ΡΠΎΠ²Π° Π΅ Reset and Clock Control (Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΡΠ»ΠΈΡΠ°Π½Π΅ ΠΈ ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ).
ΠΠ°ΠΊΡΠΎ ΡΠΏΠΎΠΌΠ΅Π½Π°Ρ
ΠΌΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅, Π·Π° ΡΠ°ΡΡΠΈΠ΅ Ρ
ΠΎΡΠ°ΡΠ° ΠΎΡ STM Π½ΠΈ Π½Π°ΠΏΡΠ°Π²ΠΈΡ
Π° Π½Π°ΠΉ-ΡΡΡΠ΄Π½Π°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΊΠ»ΠΎΠΊΠ²Π°Π½Π΅ΡΠΎ, Π·Π° ΠΊΠΎΠ΅ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠΌ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ (ΠΏΠ°ΠΊ ΡΠ΅ Π΄Π°ΠΌ Π»ΠΈΠ½ΠΊ ΠΊΡΠΌ
#define _RCC_(mem_offset) (*(volatile uint32_t *)(0x40021000 + (mem_offset)))
Π ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π²ΡΡΡ Ρ Π²ΡΡΠ·ΠΊΠ°ΡΠ°, ΠΊΡΠ΄Π΅ΡΠΎ Π΄Π° ΠΎΠΏΠΈΡΠ°ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π΅ΡΠΎ Π² ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°, ΠΈΠ»ΠΈ, ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅, ΠΏΡΠ΅Π³Π»Π΅Π΄Π°ΠΉΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΡΠ° Π½Π° Π²ΠΊΠ»ΡΡΠ²Π°ΡΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ ΠΎΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅ Π·Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅. ΠΡΠ΄Π΅ Π½Π°ΠΌΠΈΡΠ°ΠΌΠ΅ RCC_APB1ENR ΠΈ RCC_APB2ENR:
Π Π² ΡΡΡ , ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ, Π±ΠΈΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΊΠ»ΠΎΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° 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 Π²ΠΎΠ»ΡΠ°, Π½Π΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅ Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΡΡΠ°.
STM8 PWM
Π¨ΠΠ Π½Π° STM8
ΠΠΎΠ³Π°ΡΠΎ ΡΠΎΠΊΡ-ΡΠΎ ΠΏΠ»Π°Π½ΠΈΡΠ°Ρ ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ, ΡΠ΅ΡΠΈΡ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌ Π΄Π° ΠΎΠ²Π»Π°Π΄Π΅Ρ Π½ΡΠΊΠΎΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Π½Π΅ΠΏΠΎΠ·Π½Π°Ρ ΡΠΈΠΏ ΡΠ°ΠΌΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π»ΠΈΡΡ Ρ Π΄Π°Π½Π½ΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΎΠ±ΡΡΠ°Ρ Π΄Π° Π½Π΅ ΠΈΠ·Π»Π΅Π·Π΅ Π±Π΅Π· Π±ΠΎΡΡΡΠΈ. STM8 Π±Π΅ΡΠ΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½ Π·Π° ΡΠ°Π·ΠΈ ΡΠΎΠ»Ρ: ΠΏΡΡΠ²ΠΎ, ΠΈΠΌΠ°Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠΈΡΠ°ΠΉΡΠΊΠΈ Π΄ΡΡΠΊΠΈ Ρ STM8S103, ΠΈ Π²ΡΠΎΡΠΎ, Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ΅Π½ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΈΠ·ΠΊΡΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΡΠ΅ΡΠ΅Ρ ΠΈ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΏΠΎΡΠΈΠ²Π° Π½Π° Π»ΠΈΠΏΡΠ°ΡΠ° Π½Π° ΡΡΡΠΈΡΠ΅ ΡΠ΅Π·ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
Π§ΠΈΠΏΡΡ ΡΡΡΠΎ ΠΈΠΌΠ°
Π’Π°ΠΊΡΠΈΡΠ°Π½Π΅ ΠΈ I/O
ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ STM8 ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΡΠ΅ΡΡΠΎΡΠ° ΠΎΡ 2 MHz, ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ° Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ.
HSI ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ (Π²ΠΈΡΠΎΠΊ Π²ΡΡΡΠ΅ΡΠ΅Π½)
Π§Π°ΡΠΎΠ²Π½ΠΈΠΊΡΡ HSI ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΎΡ Π²ΡΡΡΠ΅ΡΠ΅Π½ 16 MHz RC ΠΎΡΡΠΈΠ»Π°ΡΠΎΡ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠ΅ΠΌ Π΄Π΅Π»ΠΈΡΠ΅Π» (1 Π΄ΠΎ 8). ΠΠ°Π΄Π°Π²Π° ΡΠ΅ Π² ΡΠ΅Π³ΠΈΡΡΡΡΠ° Π½Π° Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ Π½Π° ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊΠ° (CLK_CKDIVR).
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: HSI RC ΠΎΡΡΠΈΠ»Π°ΡΠΎΡ Ρ Π΄Π΅Π»ΠΈΡΠ΅Π» 8 Π΅ ΠΈΠ·Π±ΡΠ°Π½ ΠΊΠ°ΡΠΎ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° Π³Π»Π°Π²Π΅Π½ ΡΠ°ΡΠΎΠ²Π½ΠΈΠΊ ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅.
ΠΠ°ΠΌΠΈΡΠ°ΠΌΠ΅ Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΡΠ΅Π³ΠΈΡΡΡΡΠ° Π² Π»ΠΈΡΡΠ° Ρ Π΄Π°Π½Π½ΠΈ, ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ Π² refman ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡΡΡ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΡΠΈΡΡΠ΅Π½:
#define CLK_CKDIVR *(volatile uint8_t *)0x0050C6
CLK_CKDIVR &= ~(0x18);
Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π¨ΠΠ ΠΈ ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ΠΌ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΈ, Π½Π΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠ°Π·Π²ΠΎΠ΄ΠΊΠ°ΡΠ°:
Π§ΠΈΠΏΡΡ Π΅ ΠΌΠ°Π»ΡΠΊ, ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ° ΠΎΠΊΠ°ΡΠ΅Π½ΠΈ Π½Π° Π΅Π΄Π½ΠΈ ΠΈ ΡΡΡΠΈ ΡΠΈΡΡΠΎΠ²Π΅. Π’ΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΈ ΡΠΊΠΎΠ±ΠΈ, Π΅ βΠ°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡβ, ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ΅ ΠΎΡ βΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½ΠΈ Π±Π°ΠΉΡΠΎΠ²Π΅β (ΠΎΠΏΡΠΈΡ Π±Π°ΠΉΡΠΎΠ²Π΅) - Π½Π΅ΡΠΎ ΠΊΠ°ΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠ°Π·ΠΈΡΠ΅Π»ΠΈ Atmega. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΎ, Π½ΠΎ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, Ρ.ΠΊ. ΠΠΎΠ²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΡΠ°ΠΌΠΎ ΡΠ»Π΅Π΄ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅. ΠΠΎ-Π»Π΅ΡΠ½ΠΎ Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ST Visual Programmer (ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½ Ρ Visual Develop), ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½Ρ ΡΠ΅Π·ΠΈ Π±Π°ΠΉΡΠΎΠ²Π΅. pinout ΠΏΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄ΠΈΡΠ΅ CH1 ΠΈ CH2 Π½Π° ΠΏΡΡΠ²ΠΈΡ ΡΠ°ΠΉΠΌΠ΅Ρ ΡΠ° ΡΠΊΡΠΈΡΠΈ Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΈ ΡΠΊΠΎΠ±ΠΈ; Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ Π±ΠΈΡΠΎΠ²Π΅ΡΠ΅ AFR1 ΠΈ AFR0 Π² STVP, Π° Π²ΡΠΎΡΠΈΡΡ ΡΡΡΠΎ ΡΠ΅ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π° CH1 Π½Π° Π²ΡΠΎΡΠΈΡ ΡΠ°ΠΉΠΌΠ΅Ρ ΠΎΡ PD4 ΠΊΡΠΌ PC5.
Π’Π°ΠΊΠ° 6 ΠΏΠΈΠ½Π° ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Ρ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΈΡΠ΅: PC6, PC7 ΠΈ PC3 Π·Π° ΠΏΡΡΠ²ΠΈΡ ΡΠ°ΠΉΠΌΠ΅Ρ, PC5, PD3 ΠΈ PA3 Π·Π° Π²ΡΠΎΡΠΈΡ.
ΠΠ°ΡΡΡΠΎΠΉΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΌΠΈΡΠ΅ I/O ΠΏΠΈΠ½ΠΎΠ²Π΅ Π½Π° STM8 Π΅ ΠΏΠΎ-ΠΏΡΠΎΡΡΠΎ ΠΈ ΠΏΠΎ-Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π½Π° STM32:
- Atmega-ΠΏΠΎΠ·Π½Π°Ρ ΡΠ΅Π³ΠΈΡΡΡΡ Π·Π° ΠΏΠΎΡΠΎΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ DDR (Π Π΅Π³ΠΈΡΡΡΡ Π·Π° Π½Π°ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ): 1 = ΠΈΠ·Ρ ΠΎΠ΄;
- ΠΏΡΡΠ²ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΡΠ΅Π³ΠΈΡΡΡΡ CR1, ΠΊΠΎΠ³Π°ΡΠΎ Π΅ ΠΈΠ·Π²Π΅Π΄Π΅Π½, Π·Π°Π΄Π°Π²Π° ΡΠ΅ΠΆΠΈΠΌΠ° Π½Π° ΠΈΠ·Π΄ΡΡΠΏΠ²Π°Π½Π΅ (1) ΠΈΠ»ΠΈ ΠΎΡΠ²ΠΎΡΠ΅Π½ Π΄ΡΠ΅Π½Π°ΠΆ (0); ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ²ΡΡΠ·Π²Π°ΠΌ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΈΡΠ΅ ΠΊΡΠΌ ΡΠΈΠΏΠ° Ρ ΠΊΠ°ΡΠΎΠ΄ΠΈ, ΠΎΡΡΠ°Π²ΡΠΌ Π½ΡΠ»ΠΈ ΡΡΠΊ;
- Π²ΡΠΎΡΠΈΡΡ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Ρ ΡΠ΅Π³ΠΈΡΡΡΡ 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 ΡΠ΅ΡΡΠΎΡΠ° β ΡΠ΅ΡΡΠΎΡΠ°, Ρ ΠΊΠΎΡΡΠΎ ΡΠΈΠΊΡΠ°ΠΊΠ° ΡΠ°ΠΉΠΌΠ΅ΡΡΡ;
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΏΡΠ΅Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅, AR β Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π·Π°ΡΠ΅Π΄Π΅Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ, Π΄ΠΎ ΠΊΠΎΡΡΠΎ ΡΠ΅ Π±ΡΠΎΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΡΡ (ΠΏΠ΅ΡΠΈΠΎΠ΄ Π½Π° ΠΈΠΌΠΏΡΠ»ΡΠ°);
- Π‘ΡΠ±ΠΈΡΠΈΠ΅ Π·Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅, UEV β ΡΡΠ±ΠΈΡΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΡΡ Π΅ ΠΎΡΠ±ΡΠΎΠΈΠ» Π΄ΠΎ AR;
- Π Π°Π±ΠΎΡΠ΅Π½ ΡΠΈΠΊΡΠ» Π½Π° Π¨ΠΠ - PWM ΡΠ°Π±ΠΎΡΠ΅Π½ ΡΠΈΠΊΡΠ», ΡΠ΅ΡΡΠΎ Π½Π°ΡΠΈΡΠ°Π½ "ΡΠ°Π±ΠΎΡΠ΅Π½ ΡΠΈΠΊΡΠ»";
- Π£Π»Π°Π²ΡΠ½Π΅/Π‘ΡΠ°Π²Π½ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ β ΡΡΠΎΠΉΠ½ΠΎΡΡ Π·Π° Π·Π°ΡΠ½Π΅ΠΌΠ°Π½Π΅/ΡΡΠ°Π²Π½ΡΠ²Π°Π½Π΅, Π±ΡΠΎΠ΅Π½Π΅ Π΄ΠΎ ΠΊΠΎΡΡΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΡΡ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π½Π΅ΡΠΎ (Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π¨ΠΠ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠ° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»);
- ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ β ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π°ΡΠ΅Π΄Π΅Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ. ΡΡΠ°Π²Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΡΡ ΡΠΈΠΊΡΠ°ΠΊΠ°, Π² ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ Π¨ΠΠ ΡΠΈΠΊΡΠ»ΡΡ ΡΠ΅ ΡΠ΅ ΠΏΡΠ΅ΠΊΡΡΠ½Π΅. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΡ Π² Π±ΡΡΠ΅ΡΠ° ΠΈ ΡΠ΅ ΠΈΠ·ΡΠ΅Π³Π»ΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΡΡ Π΄ΠΎΡΡΠΈΠ³Π½Π΅ ΠΊΡΠ°Ρ Π½Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΎΡΠΎ Π±ΡΠΎΠ΅Π½Π΅ ΠΈ ΡΠ΅ Π½ΡΠ»ΠΈΡΠ°;
- ΠΠΎΠ΄ΡΠ°Π²Π½Π΅Π½ΠΈ ΠΏΠΎ ΡΡΠ±ΠΎΠ²Π΅ΡΠ΅ ΠΈ Π¦Π΅Π½ΡΡΠ°Π»Π½ΠΎ ΠΏΠΎΠ΄ΡΠ°Π²Π½Π΅Π½ΠΈ ΡΠ΅ΠΆΠΈΠΌΠΈ β ΠΏΠΎΠ΄ΡΠ°Π²Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΈ Π² ΡΠ΅Π½ΡΡΡΠ°, ΡΡΡΠΎΡΠΎ ΠΊΠ°ΡΠΎ atmelovskie ΠΡΡΠ· Π¨ΠΠ ΠΈ Π€Π°Π·ΠΎΠ²ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π΅Π½ Π¨ΠΠ.
- OCiREF, ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ΅Π½ ΡΠΈΠ³Π½Π°Π» Π·Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π° - ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ½ΠΈΡΡ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΡΠΈΠ³Π½Π°Π», Π²ΡΡΡΠ½ΠΎΡΡ ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π° Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΡΠΈΡΡ Π² ΡΠ΅ΠΆΠΈΠΌ PWM.
ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ ΡΡΠ°Π²Π° ΡΡΠ½ΠΎ ΠΎΡ pinout, Π΄Π²Π° ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΈΠΌΠ°Ρ PWM Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ - ΠΏΡΡΠ²ΠΈΡΡ ΠΈ Π²ΡΠΎΡΠΈΡΡ. Π Π΄Π²Π°ΡΠ° ΡΠ° 16-Π±ΠΈΡΠΎΠ²ΠΈ, ΠΊΠ°ΡΠΎ ΠΏΡΡΠ²ΠΈΡΡ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ (ΠΏΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠΎΠΈ Π½Π°Π³ΠΎΡΠ΅ ΠΈ Π½Π°Π΄ΠΎΠ»Ρ). Π’ΡΡΠ±Π²Π° ΠΈ Π΄Π²Π°ΡΠ° Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Π΅Π΄Π½Π°ΠΊΠ²ΠΎ, Π·Π°ΡΠΎΠ²Π° ΡΠ΅ΡΠΈΡ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π° Ρ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ ΠΏΠΎ-Π±Π΅Π΄Π½ΠΈΡ Π²ΡΠΎΡΠΈ, Π·Π° Π΄Π° Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π³ΠΎ Π½ΡΠΌΠ° Π² Π½Π΅Π³ΠΎ. ΠΠ·Π²Π΅ΡΡΠ΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΅, ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° PWM Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΠΈ Π² ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π΅ Π² Π³Π»Π°Π²Π°ΡΠ° Π·Π° ΠΏΡΡΠ²ΠΈΡ ΡΠ°ΠΉΠΌΠ΅Ρ (17.5.7 Π Π΅ΠΆΠΈΠΌ PWM), ΡΠ°ΠΊΠ° ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅ΡΠΊΠ°ΡΠ°ΡΠ΅ Π½Π°ΠΏΡΠ΅Π΄-Π½Π°Π·Π°Π΄ ΠΏΡΠ΅Π· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΠΏΡΠ΅Π· ΡΡΠ»ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅.
PWM Π½Π° STM8 ΠΈΠΌΠ° Π²Π°ΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎ ΠΏΡΠ΅Π΄ Atmega PWM:
PWM Ρ ΠΏΠΎΠ΄ΡΠ°Π²Π½ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ±Π°
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π°ΠΊΠ°ΡΠ½ΡΠ° ΠΎΡΠ΄ΠΎΠ»Ρ Π½Π°Π³ΠΎΡΠ΅
ΠΡΠ΅Π±ΡΠΎΡΠ²Π°Π½Π΅ΡΠΎ Π½Π°Π³ΠΎΡΠ΅ Π΅ Π°ΠΊΡΠΈΠ²Π½ΠΎ, Π°ΠΊΠΎ Π±ΠΈΡΡΡ DIR Π² ΡΠ΅Π³ΠΈΡΡΡΡΠ° TIM_CR1 Π΅ ΠΈΠ·ΡΠΈΡΡΠ΅Π½
ΠΡΠΈΠΌΠ΅Ρ
ΠΡΠΈΠΌΠ΅ΡΡΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΡΠ²ΠΈΡ Π¨ΠΠ ΡΠ΅ΠΆΠΈΠΌ. Π Π΅ΡΠ΅ΡΠ΅Π½ΡΠ½ΠΈΡΡ PWM ΡΠΈΠ³Π½Π°Π» OCiREF ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π²ΠΈΡΠΎΠΊ, Π΄ΠΎΠΊΠ°ΡΠΎ TIM1_CNT < TIM1_CCRi. Π ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ. ΠΠΊΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π·Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π² ΡΠ΅Π³ΠΈΡΡΡΡΠ° TIM1_CCRi Π΅ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ° ΠΎΡ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ (ΡΠ΅Π³ΠΈΡΡΡΡ TIM1_ARR), ΡΠΈΠ³Π½Π°Π»ΡΡ OCiREF ΡΠ΅ Π·Π°Π΄ΡΡΠΆΠ° Π½Π° 1. ΠΠΊΠΎ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»Π½Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π΅ 0, OCiREF ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π½Π° Π½ΡΠ»Π°....
STM8 ΡΠ°ΠΉΠΌΠ΅Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ Π·Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ ΠΏΡΡΠ²ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΡΡΠ°Π²Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡ, ΠΈ Π΅Π΄Π²Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΡΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ΅Π½ ΡΠΈΠ³Π½Π°Π». Π Atmega ΡΠ°ΠΉΠΌΠ΅ΡΡΡ ΠΏΡΡΠ²ΠΎ ΡΡΠ΅ΠΏΡΠΈ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΠ°Π²Π½ΡΠ²Π°, Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΠΊΠΎΠ΅ΡΠΎ ΠΊΠΎΠ³Π° compare value == 0
ΠΈΠ·Ρ
ΠΎΠ΄ΡΡ Π΅ ΠΈΠ³Π»Π°, Ρ ΠΊΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ΅Π· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΎ ΠΎΠ±ΡΡΡΠ°Π½Π΅ Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ°).
Π ΡΠ°ΠΊΠ°, ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ: 8-Π±ΠΈΡΠΎΠ²Π° Π¨ΠΠ (AR == 255
), ΠΊΠ°ΡΠΎ ΡΠ΅ Π±ΡΠΎΠΈ ΠΎΡΠ΄ΠΎΠ»Ρ Π½Π°Π³ΠΎΡΠ΅, ΠΏΠΎΠ΄ΡΠ°Π²Π½ΡΠ²Π°Π½Π΅ ΠΏΠΎ Π³ΡΠ°Π½ΠΈΡΠ°ΡΠ°. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΊΡΡΡΠΊΠΈΡΠ΅ ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΊΡΠΌ ΡΠΈΠΏΠ° ΡΡΠ΅Π· ΠΊΠ°ΡΠΎΠ΄ΠΈ, Π¨ΠΠ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π° 0 (LED ΡΠ²Π΅ΡΠΈ), Π΄ΠΎΠΊΠ°ΡΠΎ ΡΡΠ°Π²Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΈ 1 ΡΠ»Π΅Π΄.
ΠΠ΅ΡΠ΅ ΡΠΌΠ΅ ΡΠ΅Π»ΠΈ Π·Π° Π½ΡΠΊΠΎΠΈ PWM ΡΠ΅ΠΆΠΈΠΌ, ΡΠ°ΠΊΠ° ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°ΠΌΠ΅ ΠΆΠ΅Π»Π°Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΡ Π½Π° Π²ΡΠΎΡΠΈΡ ΡΠ°ΠΉΠΌΠ΅Ρ, ΠΊΠ°ΡΠΎ ΡΡΡΡΠΈΠΌ Π² ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° ΡΠ°Π·ΠΈ ΡΡΠ°Π·Π° (18.6.8 - TIMx_CCMR1):
110: ΠΡΡΠ²ΠΈ Π¨ΠΠ ΡΠ΅ΠΆΠΈΠΌ - ΠΏΡΠΈ Π±ΡΠΎΠ΅Π½Π΅ ΠΎΡΠ΄ΠΎΠ»Ρ Π½Π°Π³ΠΎΡΠ΅, ΠΏΡΡΠ²ΠΈΡΡ ΠΊΠ°Π½Π°Π» Π΅ Π°ΠΊΡΠΈΠ²Π΅Π½, Π΄ΠΎΠΊΠ°ΡΠΎ TIMx_CNT < TIMx_CCR1. Π ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ ΠΏΡΡΠ²ΠΈΡΡ ΠΊΠ°Π½Π°Π» Π΅ Π½Π΅Π°ΠΊΡΠΈΠ²Π΅Π½. [ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΠΊ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, Π³ΡΠ΅ΡΠ½ΠΎ ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅-ΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ ΠΎΡ ΡΠ°ΠΉΠΌΠ΅Ρ 1] 111: ΠΡΠΎΡΠΈ ΡΠ΅ΠΆΠΈΠΌ Π½Π° Π¨ΠΠ - ΠΏΡΠΈ Π±ΡΠΎΠ΅Π½Π΅ ΠΎΡΠ΄ΠΎΠ»Ρ Π½Π°Π³ΠΎΡΠ΅, ΠΏΡΡΠ²ΠΈΡΡ ΠΊΠ°Π½Π°Π» Π΅ Π½Π΅Π°ΠΊΡΠΈΠ²Π΅Π½, Π΄ΠΎΠΊΠ°ΡΠΎ TIMx_CNT < TIMx_CCR1. Π ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ ΠΏΡΡΠ²ΠΈΡΡ ΠΊΠ°Π½Π°Π» Π΅ Π°ΠΊΡΠΈΠ²Π΅Π½.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΈΡΠ΅ ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΊΡΠΌ 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 Mode 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-Π±ΠΈΡΠΎΠ²Π° Π¨ΠΠ, Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠ°ΠΌΠΎ Π½ΠΈΡΠΊΠΈΡΠ΅ Π±ΠΈΡΠΎΠ²Π΅:
#define TIM2_CCR1L *(volatile uint8_t *)0x005312
#define TIM2_CCR2L *(volatile uint8_t *)0x005314
#define TIM2_CCR3L *(volatile uint8_t *)0x005316
void setRGBled(uint8_t r, uint8_t g, uint8_t b)
{
TIM2_CCR1L = r;
TIM2_CCR2L = g;
TIM2_CCR3L = b;
}
ΠΠ½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΈΡΡ ΡΠΈΡΠ°ΡΠ΅Π» ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π»Π΅ΠΊΠΎ Π΄Π΅ΡΠ΅ΠΊΡΠ½Π° Π¨ΠΠ, ΠΊΠΎΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π°Π΄Π΅ 100% Π·Π°ΠΏΡΠ»Π²Π°Π½Π΅ (ΠΏΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ 255, ΡΠΈΠ³Π½Π°Π»ΡΡ ΡΠ΅ ΠΎΠ±ΡΡΡΠ° Ρ Π΅Π΄ΠΈΠ½ ΡΠΈΠΊΡΠ» Π½Π° ΡΠ°ΠΉΠΌΠ΅ΡΠ°). ΠΠ° ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΈΡΠ΅ ΡΠΎΠ²Π° Π½Π΅ ΠΈΠ³ΡΠ°Π΅ ΡΠΎΠ»Ρ ΠΈ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΈΡΡ ΡΠΈΡΠ°ΡΠ΅Π» Π²Π΅ΡΠ΅ ΡΠ΅ Π΄ΠΎΡΠ΅ΡΠ° ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈ.
PWM Π½Π° Π²ΡΠΎΡΠΈΡ ΡΠ°ΠΉΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΠΈ, ΠΎΡΠΈΠ΄Π΅ΡΠ΅ Π½Π° ΠΏΡΡΠ²ΠΈΡ.
ΠΡΡΠ²ΠΈΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ ΠΈΠΌΠ° Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΡΡΡΠΈΡΠ΅ Π±ΠΈΡΠΎΠ²Π΅ Π² ΡΡΡΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ (ΠΏΡΠΎΡΡΠΎ ΠΎΠ½Π΅Π·ΠΈ Π±ΠΈΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΠΎΡΡΠ°Π½Π°Π»ΠΈ "Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈ" Π²ΡΠ² Π²ΡΠΎΡΠΈΡ ΡΠ°ΠΉΠΌΠ΅Ρ, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎ Π·Π° Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ Π½Π΅ΡΠ° Π² ΠΏΡΡΠ²ΠΈΡ). Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π°Π΄ΡΠ΅ΡΠΈΡΠ΅ Π½Π° ΡΡΡΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ Π² Π»ΠΈΡΡΠ° Ρ Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π° ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠ΄Π°. Π, ΠΏΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ Π½Π° ΡΠ΅ΡΡΠΎΡΠ°ΡΠ°, Π·Π°ΡΠΎΡΠΎ. ΠΏΡΡΠ²ΠΈΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ ΠΈΡΠΊΠ° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ Π½Π΅ ΡΡΠ΅ΠΏΠ΅Π½ Π½Π° Π΄Π²Π΅, Π° ΡΠΎΡΠ½Π° 16-Π±ΠΈΡΠΎΠ²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π² Π΄Π²Π° ΡΠ΅Π³ΠΈΡΡΡΡΠ° Prescaler High ΠΈ Π½ΠΈΡΠΊΠΎ. ΠΡΠ°Π²ΠΈΠΌ Π²ΡΠΈΡΠΊΠΎ ΠΈ ... ΠΏΡΡΠ²ΠΈΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ. ΠΠ°ΠΊΡΠ² Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°?
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡΡ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ΡΠΈΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π΅ ΠΊΠ°ΡΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠ΅Π»ΠΈΡ ΡΠ°Π·Π΄Π΅Π» Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ Π½Π° ΡΠ°ΠΉΠΌΠ΅Ρ 1, ΠΊΡΠ΄Π΅ΡΠΎ ΡΡΡΡΠΈΠΌ ΡΠ°ΠΊΡΠ², ΠΊΠΎΠΉΡΠΎ Π²ΡΠΎΡΠΈΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ Π½ΡΠΌΠ°. ΡΠ΅ ΠΈΠΌΠ° 17.7.30 Π Π΅Π³ΠΈΡΡΡΡ Π·Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ (TIM1_BKR), ΠΊΡΠ΄Π΅ΡΠΎ ΠΈΠΌΠ° ΠΌΠ°Π»ΠΊΠΎ ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π°:
Π Π°Π·ΡΠ΅ΡΠ΅ΡΠ΅ Π³Π»Π°Π²Π½ΠΈΡ ΠΈΠ·Ρ
ΠΎΠ΄
#define TIM1_BKR *(volatile uint8_t *)0x00526D
TIM1_BKR = (1<<7);
Π’ΠΎΠ²Π° Π΅ Π²ΡΠΈΡΠΊΠΎ Π·Π° ΡΠ΅Π³Π°, ΠΊΠΎΠ΄ΡΡ
STM8 ΠΌΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡ
ΠΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡΠΈΡΠ°Π½Π΅ Π½Π° STM8
Π’ΡΠ΅ΡΠΈΡΡ ΠΌΠΈΠ½ΠΈ-ΠΏΡΠΎΠ΅ΠΊΡ Π΅ Π΄Π° ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ ΠΎΡΠ΅ΠΌ RGB ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π° ΠΊΡΠΌ Π²ΡΠΎΡΠΈΡ ΡΠ°ΠΉΠΌΠ΅Ρ Π² ΡΠ΅ΠΆΠΈΠΌ PWM ΠΈ Π΄Π° Π³ΠΈ Π½Π°ΠΊΠ°ΡΠ°ΡΠ΅ Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ²Π΅ΡΠΎΠ²Π΅. Π’Ρ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° Π·Π° LED ΠΌΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡΠΈΡΠ°Π½Π΅, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΡΡΡΠΎΠΈ Π² ΡΠΎΠ²Π°, ΡΠ΅ Π°ΠΊΠΎ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΠ·ΠΎ, ΡΠ΅ Π½ΠΈ ΡΠ΅ ΡΡΡΡΠ²Π°, ΡΠ΅ ΡΠ΅ ΡΠ° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ (ΠΏΠΎΡΡΠΎΡΠ½ΡΡΠ²ΠΎ Π½Π° Π·ΡΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΈΠ½Π΅ΡΡΠΈΡ Π½Π° Π·ΡΠΈΡΠ΅Π»Π½ΠΎΡΠΎ Π²ΡΠ·ΠΏΡΠΈΡΡΠΈΠ΅). ΠΠ΅Π΄Π½ΡΠΆ Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡ
ΠΠ»Π³ΠΎΡΠΈΡΡΠΌΡΡ Π½Π° ΡΠ°Π±ΠΎΡΠ° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:
- ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ Π°Π½ΠΎΠ΄Π° Π½Π° ΠΏΡΡΠ²ΠΈΡ RGB ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄;
- Π·Π°ΠΏΠ°Π»ΠΈ Π³ΠΎ, Π΄Π°Π²Π°ΠΉΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΈ Π½Π° ΠΊΠ°ΡΠΎΠ΄ΠΈΡΠ΅;
- ΠΈΠ·ΡΠ°ΠΊΠ° ΠΊΡΠ°Ρ Π½Π° Π¨ΠΠ ΡΠΈΠΊΡΠ»Π°;
- ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ Π°Π½ΠΎΠ΄Π° Π½Π° Π²ΡΠΎΡΠΈΡ RGB ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄;
- Π·Π°ΠΏΠ°Π»ΠΈ Π³ΠΎ...
Π ΠΈ Ρ.Π½. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π·Π° ΠΊΡΠ°ΡΠΈΠ²Π° ΡΠ°Π±ΠΎΡΠ° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π°Π½ΠΎΠ΄Π° ΠΈ βΠ·Π°ΠΏΠ°Π»Π²Π°Π½Π΅ΡΠΎβ Π½Π° ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. Π, ΠΏΠΎΡΡΠΈ. ΠΡΠ² Π²ΡΠ΅ΠΊΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·Π²Π΅Π΄Π΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π² ΡΡΠΈ ΠΊΠ°Π½Π°Π»Π° Π½Π° Π²ΡΠΎΡΠΈΡ ΡΠ°ΠΉΠΌΠ΅Ρ, ΡΠ΅ Π³ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ Π΄ΠΎΡΡΠΈΠ³Π½Π΅ UEV ΠΈ Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΠ΅ΠΊΡΡΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΈΡ RGB LED.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π° Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ "Π²ΠΈΠ΄Π΅ΠΎ ΠΏΠ°ΠΌΠ΅Ρ", ΠΎΡΠΊΡΠ΄Π΅ΡΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΎΡΡΡ Π½Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½ΠΈΡ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΎΡΡ ΠΌΠ°ΡΠΈΠ²:
uint8_t colors[8][3];
ΠΠ° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ²Π΅ΡΠ° Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄, ΡΠ΅ Π±ΡΠ΄Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΄Π° Π·Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π² ΡΠΎΠ·ΠΈ ΠΌΠ°ΡΠΈΠ². Π ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° ΡΠ΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄
uint8_t cnt;
ΠΠ΅ΠΌΡΠΊΡ
ΠΠ° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎΡΠΎ ΠΌΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡΠΈΡΠ°Π½Π΅ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΈ Π΄Π° Π΅ ΡΡΡΠ°Π½Π½ΠΎ, Π΄Π΅ΠΌΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡΠΎΡΡΡ CD74HC238. ΠΠ΅ΠΌΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ - ΡΠΈΠΏ, ΠΊΠΎΠΉΡΠΎ Ρ
Π°ΡΠ΄ΡΠ΅ΡΠ½ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° <<
. Π§ΡΠ΅Π· ΡΡΠΈ Π²Ρ
ΠΎΠ΄Π½ΠΈ ΠΏΠΈΠ½Π° (Π±ΠΈΡΠΎΠ²Π΅ 0, 1 ΠΈ 2) ΠΌΡ ΠΏΠΎΠ΄Π°Π²Π°ΠΌΠ΅ ΡΡΠΈΠ±ΠΈΡΠΎΠ²ΠΎ ΡΠΈΡΠ»ΠΎ X, Π° Π² ΠΎΡΠ³ΠΎΠ²ΠΎΡ ΡΠΎΠΉ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΎΡΠΎ ΡΠΈΡΠ»ΠΎ (1<<X
). ΠΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ Π²Ρ
ΠΎΠ΄ΠΎΠ²Π΅ Π½Π° ΡΠΈΠΏΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π»ΠΈΡ Π΄ΠΈΠ·Π°ΠΉΠ½. ΠΡΠΆΠ΄Π°Π΅ΠΌ ΡΠ΅ ΠΎΡ ΡΠΎΠ·ΠΈ ΡΠΈΠΏ Π½Π΅ ΡΠ°ΠΌΠΎ Π·Π° Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° Π±ΡΠΎΡ Π½Π° Π·Π°Π΅ΡΠΈΡΠ΅ ΠΏΠΈΠ½ΠΎΠ²Π΅ Π½Π° ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠ°, Π½ΠΎ ΠΈ Π·Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ - Π·Π° Π΄Π° Π½Π΅ Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΈ ΠΎΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΠΎ ΠΈ Π΄Π° Π½Π΅ ΠΈΠ·Π³ΠΎΡΠΈΠΌ MK. Π§ΠΈΠΏΡΡ ΡΡΡΡΠ²Π° Π΅Π΄Π½Π° ΡΡΠΎΡΠΈΠ½ΠΊΠ°, Π²ΠΈΠ½Π°Π³ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π΄ΡΡΠΆΠΈ Π² Π°ΠΏΡΠ΅ΡΠΊΠ°ΡΠ° Ρ Π΄ΠΎΠΌΠ°.
CD74HC238 ΡΠ΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° ΠΏΠΎΠ΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½Π°ΠΏΡΠ΅ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡΠΌ Π°Π½ΠΎΠ΄Π° Π½Π° ΠΆΠ΅Π»Π°Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄. Π ΠΏΡΠ»Π½ΠΎΡΠ΅Π½Π΅Π½ ΠΌΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡ ΡΠΎΠΉ ΡΠ΅ ΠΏΠΎΠ΄Π°Π²Π° Π½Π°ΠΏΡΠ΅ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΠΊΠΎΠ»ΠΎΠ½Π°ΡΠ° ΠΏΡΠ΅Π· P-MOSFET, Π½ΠΎ Π² ΡΠ°Π·ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ, Ρ.ΠΊ. Π΄ΡΡΠΏΠ° 20mA, ΡΠΏΠΎΡΠ΅Π΄ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΈ ΠΎΡΠ΅Π½ΠΊΠΈ Π² Π»ΠΈΡΡΠ° Ρ Π΄Π°Π½Π½ΠΈ. ΠΎΡ
H = Π½ΠΈΠ²ΠΎ Π½Π° Π²ΠΈΡΠΎΠΊΠΎ Π½Π°ΠΏΡΠ΅ΠΆΠ΅Π½ΠΈΠ΅, L = Π½ΠΈΠ²ΠΎ Π½Π° Π½ΠΈΡΠΊΠΎ Π½Π°ΠΏΡΠ΅ΠΆΠ΅Π½ΠΈΠ΅, X - Π½Π΅ ΠΌΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°
Π‘Π²ΡΡΠ·Π²Π°ΠΌΠ΅ E2 ΠΈ E1 ΠΊΡΠΌ ΠΌΠ°ΡΠ°, E3, A0, A1 ΠΈ A3 ΠΊΡΠΌ ΡΠΈΡΡΠΎΠ²Π΅ PD5, PC3, PC4 ΠΈ PC5 Π½Π° STM8. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ° ΠΊΠ°ΠΊΡΠΎ Π½ΠΈΡΠΊΠΈ, ΡΠ°ΠΊΠ° ΠΈ Π²ΠΈΡΠΎΠΊΠΈ Π½ΠΈΠ²Π°, Π½ΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠ²Π°ΠΌΠ΅ ΡΠ΅Π·ΠΈ ΡΠΈΡΡΠΎΠ²Π΅ ΠΊΠ°ΡΠΎ ΡΠΈΡΡΠΎΠ²Π΅ Π·Π° Π½Π°ΡΠΈΡΠΊΠ°Π½Π΅ ΠΈ ΠΈΠ·Π΄ΡΡΠΏΠ²Π°Π½Π΅.
Π¨ΠΠ
Π¨ΠΠ Π½Π° Π²ΡΠΎΡΠΈΡ ΡΠ°ΠΉΠΌΠ΅Ρ Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ ΠΏΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½, ΠΊΠ°ΠΊΡΠΎ Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΠΈΡΡΠΎΡΠΈΡ, Ρ Π΄Π²Π΅ ΡΠ°Π·Π»ΠΈΠΊΠΈ:
ΠΡΡΠ²ΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ΡΠΎ ΠΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ (UEV), ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ° ΡΡΠ½ΠΊΡΠΈΡ Π·Π° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄. Π’ΠΎΠ²Π° ΡΡΠ°Π²Π° ΡΡΠ΅Π· ΡΠΌΡΠ½Π° Π½Π° Π±ΠΈΡΠ° Π Π°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ Π½Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π² ΡΠ΅Π³ΠΈΡΡΡΡ Ρ Π³ΠΎΠ²ΠΎΡΠ΅ΡΠΎ ΠΈΠΌΠ΅
Π Π΅Π³ΠΈΡΡΡΡ Π·Π° ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅
#define TIM2_IER *(volatile uint8_t *)0x005303
//enable interrupt
TIM2_IER = 1;
ΠΡΠΎΡΠ°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° Π΅ ΡΠ²ΡΡΠ·Π°Π½Π° Ρ ΡΠ°ΠΊΠΎΠ²Π° ΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΡΠ»ΡΠΈΠΏΠ»Π΅ΠΊΡΠΈΡΠ°Π½Π΅ ΠΊΠ°ΡΠΎ ΠΎΡΠ±Π»ΡΡΡΡΠΈΡΠ΅ - ΠΏΠ°ΡΠ°Π·ΠΈΡΠ½ΠΎ ΡΠ²Π΅ΡΠ΅Π½Π΅ Π½Π° Π΄ΠΈΠΎΠ΄ΠΈ. Π Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠ°ΠΊΡΠ°, ΡΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΡΡ, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ Π΅ ΠΏΡΠΈΡΠΈΠ½ΠΈΠ» ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½Π΅ Π½Π° UEV, ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π° Π΄Π° ΡΠΈΠΊΡΠ°ΠΊΠ° ΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΎΡΡΡ Π½Π° ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½ΠΈΡΡΠ° Π½ΡΠΌΠ° Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠΈ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Π°, ΠΏΡΠ΅Π΄ΠΈ ΡΠ°ΠΉΠΌΠ΅ΡΡΡ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ Π΄Π° Π·Π°ΠΏΠΈΡΠ²Π° Π½Π΅ΡΠΎ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄ΠΈΡΠ΅. ΠΠ° Π΄Π° ΡΠ΅ Π±ΠΎΡΠΈΡΠ΅ Ρ ΡΠΎΠ²Π°, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° (0 = ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° ΡΡΠΊΠΎΡΡ, 255 = Π½ΠΈΡΠΎ Π½Π΅ Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ) ΠΈ Π΄Π° Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ΅ Π΅ΠΊΡΡΡΠ΅ΠΌΠ½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡ ΡΠΈΠΊΡΠ». Π’Π΅Π·ΠΈ. ΡΠ²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ ΡΠ»Π΅Π΄ UEV ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΈΡΠ΅ ΡΠ° Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΈΠ·Π³Π°ΡΠ΅Π½ΠΈ Π·Π° Π΅Π΄ΠΈΠ½ ΡΠΈΠΊΡΠ» Π½Π° Π¨ΠΠ.
Π‘ΠΌΠ΅Π½Π΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ½ΠΎΡΡΡΠ°:
//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