ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8

Π’ ΠΏΡŠΡ€Π²Π°Ρ‚Π° част ΠžΠΏΠΈΡ‚Π°Ρ… сС Π΄Π° ΠΊΠ°ΠΆΠ° Π½Π° Ρ…ΠΎΠ±ΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎ Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½ΠΈΠΊΠ°, ΠΊΠΎΠΈΡ‚ΠΎ са израснали ΠΎΡ‚ ΠΏΠ°Π½Ρ‚Π°Π»ΠΎΠ½ΠΈΡ‚Π΅ Π½Π° Arduino, ΠΊΠ°ΠΊ ΠΈ Π·Π°Ρ‰ΠΎ трябва Π΄Π° Ρ‡Π΅Ρ‚Π°Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³Π° докумСнтация Π·Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΈ. Π’Π΅ΠΊΡΡ‚ΡŠΡ‚ сС ΠΎΠΊΠ°Π·Π° голям, Π·Π°Ρ‚ΠΎΠ²Π° ΠΎΠ±Π΅Ρ‰Π°Ρ… Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ° практичСски ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π² ΠΎΡ‚Π΄Π΅Π»Π½Π° статия. Π•, Ρ‚ΠΎΠΉ сС Π½Π°Ρ€Π΅Ρ‡Π΅ Ρ‚ΠΎΠ²Π°Ρ€Π°Ρ‡ ...

ДнСс Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° доста прости, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° STM32 (Blue Pill) ΠΈ STM8 ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΈ. Всички Π΄Π΅ΠΌΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ са посвСтСни Π½Π° Π»ΡŽΠ±ΠΈΠΌΠΈΡ‚Π΅ ΠΌΠΈ свСтодиоди, Ρ‰Π΅ Π³ΠΈ Π·Π°ΠΏΠ°Π»ΠΈΠΌ Π² Π³ΠΎΠ»Π΅ΠΌΠΈ количСства, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ всякакви интСрСсни ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€Π½ΠΈ устройства.

Π’Π΅ΠΊΡΡ‚ΡŠΡ‚ ΠΎΡ‚Π½ΠΎΠ²ΠΎ сС ΠΎΠΊΠ°Π·Π° ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π·Π° удобство правя ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ:

STM32 Blue Pill: 16 свСтодиода с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ DM634
STM8: Настройка Π½Π° ΡˆΠ΅ΡΡ‚ PWM ΠΏΠΈΠ½Π°
STM8: 8 RGB свСтодиода Π½Π° Ρ‚Ρ€ΠΈ ΠΏΠΈΠ½Π°, ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ

Disclaimer: НС съм ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€, Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΠΈΡ€Π°ΠΌ Π΄Π° ΠΈΠΌΠ°ΠΌ Π·Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ΠΈ познания Π² Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½ΠΈΠΊΠ°Ρ‚Π°, статията Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Π·Π° Π°ΠΌΠ°Ρ‚ΡŒΠΎΡ€ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΌΠ΅Π½. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π°Π· сС смятах ΠΏΡ€Π΅Π΄ΠΈ Π΄Π²Π΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ Π·Π° Ρ†Π΅Π»Π΅Π²Π°Ρ‚Π° аудитория. Ако някой ΠΌΠΈ бСшС ΠΊΠ°Π·Π°Π» Ρ‚ΠΎΠ³Π°Π²Π°, Ρ‡Π΅ Π½Π΅ Π΅ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ Π΄Π° Ρ‡Π΅Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ Π·Π° Π½Π΅ΠΏΠΎΠ·Π½Π°Ρ‚ Ρ‡ΠΈΠΏ, нямашС Π΄Π° ΠΏΡ€Π΅ΠΊΠ°Ρ€Π°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π² Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° някои ΠΏΠ°Ρ€Ρ‡Π΅Ρ‚Π° ΠΊΠΎΠ΄ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΈ Π΄Π° измислям ΠΏΠ°Ρ‚Π΅Ρ€ΠΈΡ†ΠΈ с Π½ΠΎΠΆΠΈΡ†ΠΈ ΠΈ лСйкопласт.

Π€ΠΎΠΊΡƒΡΡŠΡ‚ Π½Π° Ρ‚Π°Π·ΠΈ статия са Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ, Π° Π½Π΅ Ρ‡Π΅Ρ€Π½ΠΎΠ²ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΊΠΎΠ΄ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π΅ Ρ‚Π²ΡŠΡ€Π΄Π΅ ΠΈΠ·ΠΏΠΈΠΏΠ°Π½ ΠΈ чСсто ΠΏΠ°Ρ‚Π΅Ρ€ΠΈΡ†Π°. Π‘Π°ΠΌΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ са ΠΌΠ½ΠΎΠ³ΠΎ прости, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ са подходящи Π·Π° ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ Π·Π°ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ с Π½ΠΎΠ² Ρ‡ΠΈΠΏ.

Надявам сС, Ρ‡Π΅ моята статия Ρ‰Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π½Π° някой Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π΅Ρ‚Π°ΠΏ Π½Π° Π³ΠΌΡƒΡ€ΠΊΠ°Π½Π΅ Π² Ρ…ΠΎΠ±ΠΈ.

STM32

16 свСтодиода с DM634 ΠΈ SPI

Малък ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ Blue Pill (STM32F103C8T6) ΠΈ DM634 LED Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ Ρ‰Π΅ сС справим с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, STM IO ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅Ρ‚Π΅ ΠΈ Ρ‰Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ SPI.

DM634

Вайвански Ρ‡ΠΈΠΏ с 16 x 16-Π±ΠΈΡ‚ΠΎΠ²ΠΈ PWM ΠΈΠ·Ρ…ΠΎΠ΄ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΡΠ²ΡŠΡ€Π·Π°Π½ във Π²Π΅Ρ€ΠΈΠ³Π°. По-младият 12-Π±ΠΈΡ‚ΠΎΠ² ΠΌΠΎΠ΄Π΅Π» Π΅ извСстСн ΠΎΡ‚ домашСн ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π»Π΅ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚. По Π΅Π΄Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅, ΠΈΠ·Π±ΠΈΡ€Π°ΠΉΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ DM63x ΠΈ Π΄ΠΎΠ±Ρ€Π΅ познатия TLC5940, сС спрях Π½Π° DM ΠΏΠΎ няколко ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ: 1) TLC Π½Π° Aliexpress ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π΅ Ρ„Π°Π»ΡˆΠΈΠ², Π½ΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π΅ Π΅; 2) DM ΠΈΠΌΠ° Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ΅Π½ ШИМ със собствСн чСстотСн Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€; 3) ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΡƒΠΏΠΈ Π΅Π²Ρ‚ΠΈΠ½ΠΎ Π² Москва ΠΈ Π΄Π° Π½Π΅ сС Ρ‡Π°ΠΊΠ° ΠΏΡ€Π°Ρ‚ΠΊΠ° ΠΎΡ‚ Али. И, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, бСшС интСрСсно Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠ°ΠΊ сами Π΄Π° управляватС Ρ‡ΠΈΠΏΠ°, Π° Π½Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π§ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π²Π΅Ρ‡Π΅ са прСдставСни Π³Π»Π°Π²Π½ΠΎ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π° SSOP24, Ρ‚Π΅ са лСсни Π·Π° запояванС Π½Π° Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°.

Въй ΠΊΠ°Ρ‚ΠΎ производитСлят Π΅ тайвански, Ρ„ΠΈΡˆ към Ρ‡ΠΈΠΏΠ° Π΅ написано Π½Π° китайски английски, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Ρ‰Π΅ бъдС Π·Π°Π±Π°Π²Π½ΠΎ. ΠŸΡŠΡ€Π²ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ pinout-Π°Pin Π²Ρ€ΡŠΠ·ΠΊΠ°), Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠΎΠΉ ΠΊΡ€Π°ΠΊ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅, ΠΈ описаниС Π½Π° Ρ‰ΠΈΡ„Ρ‚ΠΎΠ²Π΅Ρ‚Π΅ (ОписаниС Π½Π° Ρ‰ΠΈΡ„Ρ‚Π°). 16 ΠΏΠΈΠ½Π°:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
Мивка DC ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ (ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Π΄Ρ€Π΅Π½Π°ΠΆ)

ΠΌΠΈΠ²ΠΊΠ° / Π˜Π·Ρ…ΠΎΠ΄ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Π΄Ρ€Π΅Π½Π°ΠΆ - наличност; ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° входящ Ρ‚ΠΎΠΊ; ΠΈΠ·Ρ…ΠΎΠ΄, ΡΠ²ΡŠΡ€Π·Π°Π½ към маса Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ - свСтодиодитС са ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ към Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Ρ‡Ρ€Π΅Π· ΠΊΠ°Ρ‚ΠΎΠ΄ΠΈ. ЕлСктричСски Ρ‚ΠΎΠ²Π°, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π½Π΅ Π΅ "ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Π΄Ρ€Π΅Π½Π°ΠΆ" (ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Π΄Ρ€Π΅Π½Π°ΠΆ), Π½ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ с Π΄Π°Π½Π½ΠΈ чСсто сС срСща Ρ‚Π°ΠΊΠΎΠ²Π° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π° ΠΈΠ·Ρ…ΠΎΠ΄ΠΈ Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π²Π°Π½Π΅.

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
Π’ΡŠΠ½ΡˆΠ½ΠΈ рСзистори ΠΌΠ΅ΠΆΠ΄Ρƒ REXT ΠΈ GND Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° стойността Π½Π° изходния Ρ‚ΠΎΠΊ

ΠœΠ΅ΠΆΠ΄Ρƒ Ρ‰ΠΈΡ„Ρ‚Π° REXT ΠΈ зСмята Π΅ инсталиран Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π΅Π½ рСзистор, ΠΊΠΎΠΉΡ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎΡ‚ΠΎ ΡΡŠΠΏΡ€ΠΎΡ‚ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅, Π²ΠΈΠΆΡ‚Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠ°Ρ‚Π° Π½Π° страница 9 ΠΎΡ‚ листа с Π΄Π°Π½Π½ΠΈ. Π’ DM634 Ρ‚ΠΎΠ²Π° ΡΡŠΠΏΡ€ΠΎΡ‚ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ ΡΡŠΡ‰ΠΎ Π΄Π° сС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° ΠΎΡ‚ софтуСр Ρ‡Ρ€Π΅Π· настройка Π½Π° ΠΎΠ±Ρ‰Π°Ρ‚Π° яркост (Π³Π»ΠΎΠ±Π°Π»Π½Π° яркост); Няма Π΄Π° Π½Π°Π²Π»ΠΈΠ·Π°ΠΌ Π² подробности Π² Ρ‚Π°Π·ΠΈ статия, просто Ρ‰Π΅ слоТа Ρ‚ΡƒΠΊ рСзистор ΠΎΡ‚ 2.2 - 3 kOhm.

Π—Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° управляватС Ρ‡ΠΈΠΏΠ°, Π½Π΅ΠΊΠ° Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ описаниСто Π½Π° интСрфСйса Π½Π° устройството:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8

Π”Π°, Π΅Ρ‚ΠΎ Π³ΠΎ, китайски английски Π² цСлия ΠΌΡƒ блясък. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎ Π΅ Π΄Π° сС ΠΏΡ€Π΅Π²Π΅Π΄Π΅ Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅, Π°ΠΊΠΎ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅, Π½ΠΎ ΠΈΠΌΠ° Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½ - Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Π΅ описана Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° Π² листа с Π΄Π°Π½Π½ΠΈ към Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΎ близкия TLC5940:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
… Π—Π° въвСТданС Π½Π° Π΄Π°Π½Π½ΠΈ Π² устройството са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ само Ρ‚Ρ€ΠΈ ΠΏΠΈΠ½Π°. Нарастващият Ρ€ΡŠΠ± Π½Π° сигнала 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, ΠΈΠΌΠ° Π΄Π²Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π·Π° Π½Π΅Π³ΠΎ:

Π’ листа с Π΄Π°Π½Π½ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС интСрСсувамС ΠΎΡ‚:

  • Pinouts - Ρ‡ΠΈΠΏΠΎΠ²Π΅ ΠΏΠΈΠ½Π°ΡƒΡ‚ΠΈ - Π² случай, Ρ‡Π΅ Ρ€Π΅ΡˆΠΈΠΌ сами Π΄Π° си ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΠ»Π°Ρ‚ΠΊΠΈ;
  • ΠšΠ°Ρ€Ρ‚Π° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° - ΠΊΠ°Ρ€Ρ‚Π° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ‡ΠΈΠΏ. Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΡŠΡ‚ ΠΈΠΌΠ° ΠΊΠ°Ρ€Ρ‚Π° Π·Π° цялата линия, спомСнава рСгистри, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са Π½Π° нашия.
  • Π’Π°Π±Π»ΠΈΡ†Π° с Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ Π½Π° Ρ‰ΠΈΡ„Ρ‚ΠΎΠ²Π΅ - списък Π½Π° основнитС ΠΈ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Ρ‰ΠΈΡ„Ρ‚Π°; Π·Π° β€žΡΠΈΠ½ΡŒΠΎΡ‚ΠΎ Ρ…Π°ΠΏΡ‡Π΅β€œ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎ-ΡƒΠ΄ΠΎΠ±Π½ΠΈ снимки със списък Π½Π° Ρ‰ΠΈΡ„Ρ‚ΠΎΠ²Π΅Ρ‚Π΅ ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π—Π°Ρ‚ΠΎΠ²Π° Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Ρ‚ΡŠΡ€ΡΠΈΠΌ Π² Google Pinout Π½Π° Blue Pill ΠΈ Π΄ΡŠΡ€ΠΆΠΈΠΌ Ρ‚Π°Π·ΠΈ снимка ΠΏΠΎΠ΄ Ρ€ΡŠΠΊΠ°:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
NB: имашС Π³Ρ€Π΅ΡˆΠΊΠ° Π² снимката ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚, забСлязана Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅, Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ благодаря. ΠšΠ°Ρ€Ρ‚ΠΈΠ½Π°Ρ‚Π° Π΅ смСнСна, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ ΡƒΡ€ΠΎΠΊ - ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΅ Π΄Π° провСряватС информацията, Π° Π½Π΅ ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ с Π΄Π°Π½Π½ΠΈ.

ΠŸΡ€Π΅ΠΌΠ°Ρ…Π²Π°ΠΌΠ΅ листа с Π΄Π°Π½Π½ΠΈ, отварямС Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΎΡ‚ΠΎ Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ, ΠΎΡ‚Ρ‚ΡƒΠΊ Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ само Π½Π΅Π³ΠΎ.
ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°: Ρ€Π°Π±ΠΎΡ‚Π° със стандартСн Π²Ρ…ΠΎΠ΄ / ΠΈΠ·Ρ…ΠΎΠ΄, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° SPI, Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€Π½ΠΈ устройства.

Π’Ρ…ΠΎΠ΄ ΠΈΠ·Ρ…ΠΎΠ΄

ΠŸΡ€ΠΈ Atmega328 I/O Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ прост, ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±ΠΈΠ»ΠΈΠ΅Ρ‚ΠΎ ΠΎΡ‚ STM32 ΠΎΠΏΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΎΠ±ΡŠΡ€ΠΊΠ²Π°Ρ‰ΠΎ. Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° само ΠΎΡ‚ ΠΈΠ·Π²ΠΎΠ΄ΠΈ, Π½ΠΎ Π΄ΠΎΡ€ΠΈ ΠΈΠΌΠ° Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
Π˜Π·Ρ…ΠΎΠ΄ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Π΄Ρ€Π΅Π½Π°ΠΆ, ΠΈΠ·Ρ…ΠΎΠ΄ Push-Pull, Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π΅Π½ Push-Pull, Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π΅Π½ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Π΄Ρ€Π΅Π½Π°ΠΆ

"Π”ΡŠΡ€ΠΏΠ°ΠΌ Π±ΡƒΡ‚Π°ΠΌ" (Натисни Π”Ρ€ΡŠΠΏΠ½ΠΈ) - обичайният ΠΈΠ·Ρ…ΠΎΠ΄ ΠΎΡ‚ Arduino, Ρ‰ΠΈΡ„Ρ‚ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС HIGH ΠΈΠ»ΠΈ LOW. Но с "ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Π΄Ρ€Π΅Π½Π°ΠΆ" Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚ трудности, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ всичко Π΅ просто Ρ‚ΡƒΠΊ:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° / ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠΎΡ€Ρ‚ΡŠΡ‚ Π΅ присвоСн Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π°: / изходният Π±ΡƒΡ„Π΅Ρ€ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½: / – ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π²Π°Π½Π΅: "0" Π² изходния Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π° N-MOS, "1" Π² изходния Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ оставя ΠΏΠΎΡ€Ρ‚Π° Π² Ρ€Π΅ΠΆΠΈΠΌ Hi-Z (P -MOS Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ ) / - Ρ€Π΅ΠΆΠΈΠΌ Π½Π° натисканС ΠΈ изтСглянС: "0" Π² изходния Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° N-MOS, "1" Π² изходния Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° P-MOS.

Цялата Ρ€Π°Π·Π»ΠΈΠΊΠ° Π² отворСния Π΄Ρ€Π΅Π½Π°ΠΆ (ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ Π΄Ρ€Π΅Π½Π°ΠΆ) ΠΎΡ‚ "Π±ΡƒΡ‚Π°Π½Π΅-Π΄ΡŠΡ€ΠΏΠ°Π½Π΅" (Натисни Π”Ρ€ΡŠΠΏΠ½ΠΈ) Π΅, Ρ‡Π΅ Π² ΠΏΡŠΡ€Π²ΠΈΡ Ρ‰ΠΈΡ„Ρ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ HIGH: ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ†Π° бъдС записана Π² изходния Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€, тя ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° високо ΡΡŠΠΏΡ€ΠΎΡ‚ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ (висок импСданс, Π—Π΄Ρ€Π°Π²Π΅ΠΉ-Z). ΠŸΡ€ΠΈ писанС Π½Π° Π½ΡƒΠ»Π° Ρ‰ΠΈΡ„Ρ‚ΡŠΡ‚ ΠΈ Π² Π΄Π²Π°Ρ‚Π° Ρ€Π΅ΠΆΠΈΠΌΠ° сС Π΄ΡŠΡ€ΠΆΠΈ Π΅Π΄Π½Π°ΠΊΠ²ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ логичСски, Ρ‚Π°ΠΊΠ° ΠΈ СлСктричСски.

Π’ Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½ ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ Ρ‰ΠΈΡ„Ρ‚ΡŠΡ‚ просто ΠΏΡ€Π΅Π²Π΅ΠΆΠ΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° изходния Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€. Π’ "Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°" сС управлява ΠΎΡ‚ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° пСрифСрия (Π²ΠΈΠΆΡ‚Π΅ 9.1.4):

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
Ако Π±ΠΈΡ‚ΡŠΡ‚ Π½Π° ΠΏΠΎΡ€Ρ‚Π° Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ…ΠΎΠ΄ Π·Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π° функция, изходният Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π΅ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ ΠΈ Ρ‰ΠΈΡ„Ρ‚ΡŠΡ‚ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ към изходния сигнал Π½Π° ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€Π½ΠΎΡ‚ΠΎ устройство.

АлтСрнативната функционалност Π½Π° всСки Ρ‰ΠΈΡ„Ρ‚ Π΅ описана Π² ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π° ПИН Π›ΠΈΡΡ‚ΡŠΡ‚ с Π΄Π°Π½Π½ΠΈ Π΅ Π½Π° ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½Π°Ρ‚Π° снимка. На Π²ΡŠΠΏΡ€ΠΎΡΠ° ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅, Π°ΠΊΠΎ Ρ‰ΠΈΡ„Ρ‚ΡŠΡ‚ ΠΈΠΌΠ° няколко Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ Π΅ Π΄Π°Π΄Π΅Π½ ΠΎΡ‚ Π±Π΅Π»Π΅ΠΆΠΊΠ° ΠΏΠΎΠ΄ линия Π² листа с Π΄Π°Π½Π½ΠΈ:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
Ако мноТСство ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€Π½ΠΈ устройства ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ Ρ‰ΠΈΡ„Ρ‚, Π·Π° Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° само Π΅Π΄Π½ΠΎ ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€Π½ΠΎ устройство Π² Π΄Π°Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠ°Ρ‚ΠΎ сС ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π±ΠΈΡ‚Π° Π·Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° часовника Π½Π° пСрифСрията (Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ 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 СднопосочСн ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ):

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
Π’ Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅ΠΆΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° SPI Π² Ρ€Π΅ΠΆΠΈΠΌ само Π·Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ ΠΈΠ»ΠΈ само Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅. / Π Π΅ΠΆΠΈΠΌΡŠΡ‚ само Π·Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° дуплСксния Ρ€Π΅ΠΆΠΈΠΌ: Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚ Π½Π° Ρ‰ΠΈΡ„Ρ‚Π° Π·Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ (MOSI Π² Π³Π»Π°Π²Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ ΠΈΠ»ΠΈ MISO Π² ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ), Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ‰ΠΈΡ„Ρ‚ΡŠΡ‚ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ (ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ MISO ΠΈΠ»ΠΈ MOSI) ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½ I/O ΠΊΠ°Ρ€Ρ„ΠΈΡ†Π°. Π’ Ρ‚ΠΎΠ·ΠΈ случай Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΄Π° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π° Rx Π±ΡƒΡ„Π΅Ρ€Π° (Π°ΠΊΠΎ Π΅ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½, няма Π΄Π° ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½ΠΈ Π΄Π°Π½Π½ΠΈ).

Π‘Ρ‚Ρ€Π°Ρ…ΠΎΡ‚Π½ΠΎ, Ρ‰ΠΈΡ„Ρ‚ΡŠΡ‚ MISO Π΅ свободСн, Π½Π΅ΠΊΠ° ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ LAT сигнала към Π½Π΅Π³ΠΎ. НСка сС Π·Π°Π΅ΠΌΠ΅ΠΌ със Slave Select, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС управлява ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΎ Π½Π° STM32, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Π§Π΅Ρ‚Π΅ΠΌ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π° със ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅ Π² Ρ€Π°Π·Π΄Π΅Π» 25.3.1 ΠžΠ±Ρ‰ΠΎ описаниС Π½Π° SPI:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
Π‘ΠΎΡ„Ρ‚ΡƒΠ΅Ρ€Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° NSS (SSM = 1) / информация Π·Π° ΠΈΠ·Π±ΠΎΡ€ Π½Π° ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½ сС ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π² Π±ΠΈΡ‚Π° SSI Π½Π° Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° SPI_CR1. Π’ΡŠΠ½ΡˆΠ½ΠΈΡΡ‚ NSS Ρ‰ΠΈΡ„Ρ‚ Π΅ оставСн свободСн Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ Π½ΡƒΠΆΠ΄ΠΈ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π’Ρ€Π΅ΠΌΠ΅ Π΅ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π² рСгистритС. Π Π΅ΡˆΠΈΡ… Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ SPI2, Ρ‚ΡŠΡ€ΡΠΈΠΌ основния ΠΌΡƒ адрСс Π² листа с Π΄Π°Π½Π½ΠΈ - Π² Ρ€Π°Π·Π΄Π΅Π» 3.3 ΠšΠ°Ρ€Ρ‚Π° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° (ΠšΠ°Ρ€Ρ‚Π° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°):

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8

Π•, Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ:

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

ΠžΡ‚Π²Π°Ρ€ΡΠΌΠ΅ Ρ€Π°Π·Π΄Π΅Π» 25.3.3 с ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π½ΠΎΡ‚ΠΎ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ β€žΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° SPI Π² Π³Π»Π°Π²Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌβ€œ:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8

1. Π—Π°Π΄Π°ΠΉΡ‚Π΅ часовника Π½Π° сСрийния интСрфСйс с Π±ΠΈΡ‚ΠΎΠ²Π΅Ρ‚Π΅ BR[2:0] Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° SPI_CR1.

РСгистритС са ΡΡŠΠ±Ρ€Π°Π½ΠΈ Π² СдноимСнния Ρ€Π°Π·Π΄Π΅Π» Π½Π° справочното Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ. ΠŸΡ€ΠΎΠΌΡΠ½Π° Π½Π° адрСса (отмСстванС Π½Π° адрСса) CR1 ΠΈΠΌΠ° 0x00, ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ всички Π±ΠΈΡ‚ΠΎΠ²Π΅ са изчистСни (НулиранС Π½Π° стойността 0x0000):

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8

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

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
Π€Π°Π·Π° ΠΈ полярност Π½Π° часовника
Използвайки Π±ΠΈΡ‚ΠΎΠ²Π΅Ρ‚Π΅ 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 Π² Π³Π»Π°Π²Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌβ€œ:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π·Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ
Π’Ρ€Π°Π½ΡΡ„Π΅Ρ€ΡŠΡ‚ Π·Π°ΠΏΠΎΡ‡Π²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π±Π°ΠΉΡ‚ бъдС записан Π² Tx Π±ΡƒΡ„Π΅Ρ€Π°.
Π‘Π°ΠΉΡ‚ΡŠΡ‚ с Π΄Π°Π½Π½ΠΈ сС Π·Π°Ρ€Π΅ΠΆΠ΄Π° Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π·Π° смяна Π½Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ (ΠΎΡ‚ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° шина) ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ Π±ΠΈΡ‚, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΠΏΡ€Π΅Π΄Π°Π²Π° Π² послСдоватСлСн MOSI pin Ρ€Π΅ΠΆΠΈΠΌ, ΠΏΡŠΡ€Π²ΠΈ ΠΈΠ»ΠΈ послСдСн Π±ΠΈΡ‚ Π½Π°ΠΏΡ€Π΅Π΄ Π² зависимост ΠΎΡ‚ настройката Π½Π° Π±ΠΈΡ‚Π° LSBFIRST Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° CPI_CR1. Π€Π»Π°Π³ΡŠΡ‚ TXE сС Π·Π°Π΄Π°Π²Π° слСд ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Tx Π±ΡƒΡ„Π΅Ρ€ към прСмСстващ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ΠΈ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅, Π°ΠΊΠΎ Π±ΠΈΡ‚ΡŠΡ‚ TXEIE Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° CPI_CR1 Π΅ Π·Π°Π΄Π°Π΄Π΅Π½.

ΠŸΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Ρ… няколко Π΄ΡƒΠΌΠΈ Π² ΠΏΡ€Π΅Π²ΠΎΠ΄Π°, Π·Π° Π΄Π° ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅Ρ‚ΠΎ към Π΅Π΄Π½Π° особСност Π½Π° внСдряванСто Π½Π° SPI Π² STM ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ΠΈ. На Atmega Ρ„Π»Π°Π³ΡŠΡ‚ TXE (Tx ΠΏΡ€Π°Π·Π΅Π½, Tx Π΅ ΠΏΡ€Π°Π·Π΅Π½ ΠΈ Π³ΠΎΡ‚ΠΎΠ² Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ) сС Π·Π°Π΄Π°Π²Π° само слСд ΠΊΠ°Ρ‚ΠΎ цСлият Π±Π°ΠΉΡ‚ Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ навън. И Ρ‚ΡƒΠΊ Ρ‚ΠΎΠ·ΠΈ Ρ„Π»Π°Π³ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½, слСд ΠΊΠ°Ρ‚ΠΎ Π±Π°ΠΉΡ‚ΡŠΡ‚ Π΅ Π±ΠΈΠ» ΠΏΡŠΡ…Π½Π°Ρ‚ във Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π·Π° прСмСстванС. Въй ΠΊΠ°Ρ‚ΠΎ сС ΠΏΡŠΡ…Π²Π° Ρ‚Π°ΠΌ с всички Π±ΠΈΡ‚ΠΎΠ²Π΅ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ (ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ) ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚ послСдоватСлно, TXE сС Π·Π°Π΄Π°Π²Π° ΠΏΡ€Π΅Π΄ΠΈ Π±Π°ΠΉΡ‚ΡŠΡ‚ Π΄Π° бъдС напълно ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½. Π’ΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π² случай Π½Π° нашия LED Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, трябва Π΄Π° ΠΈΠ·Π΄ΡŠΡ€ΠΏΠ°ΠΌΠ΅ LAT Ρ‰ΠΈΡ„Ρ‚Π° слСд ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ всички Π΄Π°Π½Π½ΠΈ, Ρ‚.Π΅. само Ρ„Π»Π°Π³ΡŠΡ‚ TXE няма Π΄Π° Π½ΠΈ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½.

ΠšΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎ Π·Π½Π°ΠΌΠ΅. НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ 25.3.7 - "Π€Π»Π°Π³ΠΎΠ²Π΅ Π·Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅":

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
<…>
ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
Π€Π»Π°Π³ ЗАЕВ
Π€Π»Π°Π³ΡŠΡ‚ BSY сС Π·Π°Π΄Π°Π²Π° ΠΈ изчиства ΠΎΡ‚ Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π° (записванСто Π² Π½Π΅Π³ΠΎ няма Π΅Ρ„Π΅ΠΊΡ‚). Π€Π»Π°Π³ΡŠΡ‚ BSY ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° SPI комуникационния слой.
Нулира сС:
ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ (освСн Π² Π³Π»Π°Π²Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ, Π°ΠΊΠΎ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅Ρ‚ΠΎ Π΅ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΎ)
ΠΊΠΎΠ³Π°Ρ‚ΠΎ SPI Π΅ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½
ΠΊΠΎΠ³Π°Ρ‚ΠΎ възникнС Π³Ρ€Π΅ΡˆΠΊΠ° Π² главния Ρ€Π΅ΠΆΠΈΠΌ (MODF=1)
Ако ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π΅ Π΅ Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ΠΎ, Ρ„Π»Π°Π³ΡŠΡ‚ BSY сС изчиства ΠΌΠ΅ΠΆΠ΄Ρƒ всяко ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ.

Π”ΠΎΠ±Ρ€Π΅, Ρ‰Π΅ ΠΌΠΈ Π΅ ΠΎΡ‚ ΠΏΠΎΠ»Π·Π°. Π Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ къдС сС Π½Π°ΠΌΠΈΡ€Π° Tx Π±ΡƒΡ„Π΅Ρ€ΡŠΡ‚. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ "SPI Data Register":

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
Π‘ΠΈΡ‚ΠΎΠ²Π΅ 15:0 DR[15:0] Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅
ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅.
Π Π΅Π³ΠΈΡΡ‚ΡŠΡ€ΡŠΡ‚ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ Π½Π° Π΄Π²Π° Π±ΡƒΡ„Π΅Ρ€Π°, Π΅Π΄ΠΈΠ½ Π·Π° запис (Π±ΡƒΡ„Π΅Ρ€ Π·Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅) ΠΈ Π΅Π΄ΠΈΠ½ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ (Π±ΡƒΡ„Π΅Ρ€ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅). Π—Π°ΠΏΠΈΡΡŠΡ‚ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ записва Π² Tx Π±ΡƒΡ„Π΅Ρ€Π°, Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ ΠΎΡ‚ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ стойността, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰Π° сС Π² Rx Π±ΡƒΡ„Π΅Ρ€Π°.

Π•, Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ΡŠΡ‚ Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΈΠΌΠ° Ρ„Π»Π°Π³ΠΎΠ²Π΅ TXE ΠΈ BSY:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8

НиС пишСм:

#define _SPI_DR  0x0C
#define _SPI_SR  0x08

#define BSY         0x0080
#define TXE         0x0002

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

Π•, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ трябва Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈΠΌ 16 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ Π΄Π²Π° Π±Π°ΠΉΡ‚Π°, спорСд броя Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° LED Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ:

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

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

    LAT_pulse();
}

Но всС ΠΎΡ‰Π΅ Π½Π΅ Π·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·Π΄ΡŠΡ€ΠΏΠ°ΠΌΠ΅ LAT Ρ‰ΠΈΡ„Ρ‚Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ΠΊΠ° сС Π²ΡŠΡ€Π½Π΅ΠΌ към I/O.

Π—Π°Π΄Π°ΠΉΡ‚Π΅ Ρ‰ΠΈΡ„Ρ‚ΠΎΠ²Π΅

Π’ STM32F1 рСгистритС, ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π½ΠΈ Π·Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‰ΠΈΡ„Ρ‚ΠΎΠ²Π΅Ρ‚Π΅, са доста Π½Π΅ΠΎΠ±ΠΈΡ‡Π°ΠΉΠ½ΠΈ. Ясно Π΅, Ρ‡Π΅ ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Atmega, Π½ΠΎ Ρ‚Π΅ ΡΡŠΡ‰ΠΎ са Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ STM Ρ‡ΠΈΠΏΠΎΠ²Π΅. Π Π°Π·Π΄Π΅Π» 9.1 ΠžΠ±Ρ‰ΠΎ описаниС Π½Π° GPIO:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
ВсСки ΠΎΡ‚ 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 Π±ΠΈΡ‚Π° ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ само Π½ΡƒΠ»ΠΈΡ€Π°Ρ‚ Ρ‰ΠΈΡ„Ρ‚Π°. Π₯арСсвам втория Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Π’Π΅Π·ΠΈ рСгистри са Π²Π°ΠΆΠ½ΠΈ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ осигуряват Π°Ρ‚ΠΎΠΌΠ΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ‰ΠΈΡ„Ρ‚ΠΎΠ²Π΅Ρ‚Π΅:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
Atomic инсталиранС ΠΈΠ»ΠΈ Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅
НС Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° забраняватС ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡΡ‚Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Ρ‚Π΅ GPIOx_ODR Π½Π° Π±ΠΈΡ‚ΠΎΠ²ΠΎ Π½ΠΈΠ²ΠΎ: ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π±ΠΈΡ‚Π° с Π΅Π΄Π½Π° опСрация Π·Π° Π°Ρ‚ΠΎΠΌΠ½ΠΎ записванС Π½Π° APB2. Π’ΠΎΠ²Π° сС постига Ρ‡Ρ€Π΅Π· записванС Π½Π° "1" Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π·Π° настройка/Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅ (GPIOx_BSRR ΠΈΠ»ΠΈ, само Π·Π° Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅, GPIOx_BRR) Π½Π° Π±ΠΈΡ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. ΠžΡΡ‚Π°Π½Π°Π»ΠΈΡ‚Π΅ Π±ΠΈΡ‚ΠΎΠ²Π΅ Ρ‰Π΅ останат Π½Π΅ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΈ.

РСгистритС Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈΠΌΠ°Ρ‚ доста краснорСчиви ΠΈΠΌΠ΅Π½Π° - IDR = Π’Ρ…ΠΎΠ΄ Π Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π½Π° посоката, Π²Ρ…ΠΎΠ΄Π΅Π½ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€; ODR= ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡ Π Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π½Π° посоката, ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€. Π’ настоящия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ нямамС Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ тях.

И накрая ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈΡ‚Π΅ рСгистри. Въй ΠΊΠ°Ρ‚ΠΎ сС интСрСсувамС ΠΎΡ‚ Ρ‰ΠΈΡ„Ρ‚ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° втория SPI, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ PB13, PB14 ΠΈ PB15, Π²Π΅Π΄Π½Π°Π³Π° Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ CRH:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8

И Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ Ρ‰Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° напишСм Π½Π΅Ρ‰ΠΎ Π² Π±ΠΈΡ‚ΠΎΠ²Π΅ ΠΎΡ‚ 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 Π½ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…Π° Π½Π°ΠΉ-Ρ‚Ρ€ΡƒΠ΄Π½Π°Ρ‚Π° част ΠΎΡ‚ Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π·Π° ΠΊΠ»ΠΎΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ, Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠΌ благодаря (ΠΏΠ°ΠΊ Ρ‰Π΅ Π΄Π°ΠΌ Π»ΠΈΠ½ΠΊ към Π£Π΅Π±ΡΠ°ΠΉΡ‚ΡŠΡ‚ Π½Π° Di HaltΠ·Π° Π΄Π° станС ясно ΠΊΠΎΠ»ΠΊΠΎ Π΅ ΠΎΠ±ΡŠΡ€ΠΊΠ°Π½). НуТдаСм сС само ΠΎΡ‚ рСгистри, ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π½ΠΈ Π·Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΡ‚ΠΎΠ²Π°Π½Π΅ (Peripheral Clock Enable Registers). ΠŸΡŠΡ€Π²ΠΎ, Π½Π΅ΠΊΠ° Π½Π°ΠΌΠ΅Ρ€ΠΈΠΌ основния адрСс Π½Π° RCC, Ρ‚ΠΎΠΉ Π΅ Π² самото Π½Π°Ρ‡Π°Π»ΠΎ Π½Π° "ΠšΠ°Ρ€Ρ‚Π° с ΠΏΠ°ΠΌΠ΅Ρ‚":

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8

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

И слСд Ρ‚ΠΎΠ²Π° ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π°, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, ΠΈΠ»ΠΈ, ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅, ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°ΠΉΡ‚Π΅ описанията Π½Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰ΠΈΡ‚Π΅ рСгистри ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅ Π·Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΉΡ‚Π΅ рСгистритС. КъдС Π½Π°ΠΌΠΈΡ€Π°ΠΌΠ΅ RCC_APB1ENR ΠΈ RCC_APB2ENR:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8

И Π² тях, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, Π±ΠΈΡ‚ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ ΠΊΠ»ΠΎΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° SPI2, IOPB (I / O ΠΏΠΎΡ€Ρ‚ B) ΠΈ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (AFIO).

#define _APB2ENR 0x18
#define _APB1ENR 0x1C

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

//Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡ€Ρ‚Π° B ΠΈ Π°Π»ΡŒΡ‚. Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
_RCC_(_APB2ENR) |= IOPBEN | AFIOEN;

//Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ  Ρ‚Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ SPI2
_RCC_(_APB1ENR) |= SPI2EN;

ΠšΡ€Π°ΠΉΠ½ΠΈΡΡ‚ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Ρ‚ΡƒΠΊ.

Ако ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π·Π° тСстванС, Ρ‚ΠΎΠ³Π°Π²Π° ΡΠ²ΡŠΡ€Π·Π²Π°ΠΌΠ΅ DM634 Ρ‚Π°ΠΊΠ°: DAI към PB15, DCK към PB13, LAT към PB14. Π—Π°Ρ…Ρ€Π°Π½Π²Π°ΠΌΠ΅ Π²ΠΎΠ΄Π°Ρ‡Π° ΠΎΡ‚ 5 Π²ΠΎΠ»Ρ‚Π°, Π½Π΅ забравяйтС Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ основанията.

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8

STM8 PWM

ШИМ на STM8

ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ‚ΠΎΠΊΡƒ-Ρ‰ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€Π°Ρ… Ρ‚Π°Π·ΠΈ статия, Ρ€Π΅ΡˆΠΈΡ… Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π° сС ΠΎΠΏΠΈΡ‚Π°ΠΌ Π΄Π° овладСя някои Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π½Π΅ΠΏΠΎΠ·Π½Π°Ρ‚ Ρ‡ΠΈΠΏ само с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° лист с Π΄Π°Π½Π½ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΎΠ±ΡƒΡ‰Π°Ρ€ Π΄Π° Π½Π΅ ΠΈΠ·Π»Π΅Π·Π΅ Π±Π΅Π· Π±ΠΎΡ‚ΡƒΡˆΠΈ. STM8 бСшС ΠΈΠ΄Π΅Π°Π»Π΅Π½ Π·Π° Ρ‚Π°Π·ΠΈ роля: ΠΏΡŠΡ€Π²ΠΎ, ΠΈΠΌΠ°Ρ… няколко китайски дъски с STM8S103, ΠΈ Π²Ρ‚ΠΎΡ€ΠΎ, Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ популярСн ΠΈ слСдоватСлно ΠΈΠ·ΠΊΡƒΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΄Π° Ρ‡Π΅Ρ‚Π΅Ρˆ ΠΈ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡˆ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΏΠΎΡ‡ΠΈΠ²Π° Π½Π° липсата Π½Π° ΡΡŠΡ‰ΠΈΡ‚Π΅ Ρ‚Π΅Π·ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Π§ΠΈΠΏΡŠΡ‚ ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ° Ρ„ΠΈΡˆ ΠΈ справочно Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ RM0016, Π² ΠΏΡŠΡ€Π²ΠΈΡ pinout ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ адрСси, във втория - всичко останало. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° STM8 Π² C Π² Π³Ρ€ΠΎΠ·Π½Π° IDE ST Visual Develop.

Π’Π°ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ ΠΈ I/O

По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ STM8 Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° чСстота ΠΎΡ‚ 2 MHz, Ρ‚ΠΎΠ²Π° трябва Π΄Π° сС ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π° Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ.

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
HSI часовник (висок Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ΅Π½)
Π§Π°ΡΠΎΠ²Π½ΠΈΠΊΡŠΡ‚ HSI сС ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΎΡ‚ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ΅Π½ 16 MHz RC осцилатор с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€ΡƒΠ΅ΠΌ Π΄Π΅Π»ΠΈΡ‚Π΅Π» (1 Π΄ΠΎ 8). Π—Π°Π΄Π°Π²Π° сС Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π½Π° дСлитСля Π½Π° часовника (CLK_CKDIVR).
Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: HSI RC осцилатор с Π΄Π΅Π»ΠΈΡ‚Π΅Π» 8 Π΅ ΠΈΠ·Π±Ρ€Π°Π½ ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° Π³Π»Π°Π²Π΅Π½ часовник ΠΏΡ€ΠΈ стартиранС.

НамирамС адрСса Π½Π° Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π² листа с Π΄Π°Π½Π½ΠΈ, описаниСто Π² refman ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ΡŠΡ‚ трябва Π΄Π° бъдС изчистСн:

#define CLK_CKDIVR *(volatile uint8_t *)0x0050C6

CLK_CKDIVR &= ~(0x18);

Въй ΠΊΠ°Ρ‚ΠΎ Ρ‰Π΅ стартирамС ШИМ ΠΈ Ρ‰Π΅ ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ свСтодиоди, Π½Π΅ΠΊΠ° Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Ρ€Π°Π·Π²ΠΎΠ΄ΠΊΠ°Ρ‚Π°:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8

Π§ΠΈΠΏΡŠΡ‚ Π΅ малък, ΠΌΠ½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ са ΠΎΠΊΠ°Ρ‡Π΅Π½ΠΈ Π½Π° Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ Ρ‰ΠΈΡ„Ρ‚ΠΎΠ²Π΅. Π’ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΈ скоби, Π΅ β€žΠ°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ‚β€œ, ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π° сС ΠΎΡ‚ β€žΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ²Π΅β€œ (опция Π±Π°ΠΉΡ‚ΠΎΠ²Π΅) - Π½Π΅Ρ‰ΠΎ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠ°Π·ΠΈΡ‚Π΅Π»ΠΈ 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:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
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):

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
110: ΠŸΡŠΡ€Π²ΠΈ ШИМ Ρ€Π΅ΠΆΠΈΠΌ - ΠΏΡ€ΠΈ Π±Ρ€ΠΎΠ΅Π½Π΅ ΠΎΡ‚Π΄ΠΎΠ»Ρƒ Π½Π°Π³ΠΎΡ€Π΅, ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΠΊΠ°Π½Π°Π» Π΅ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ TIMx_CNT < TIMx_CCR1. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΠΊΠ°Π½Π°Π» Π΅ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π΅Π½. [ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π³Ρ€Π΅ΡˆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅-поставянС ΠΎΡ‚ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ 1] 111: Π’Ρ‚ΠΎΡ€ΠΈ Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ШИМ - ΠΏΡ€ΠΈ Π±Ρ€ΠΎΠ΅Π½Π΅ ΠΎΡ‚Π΄ΠΎΠ»Ρƒ Π½Π°Π³ΠΎΡ€Π΅, ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΠΊΠ°Π½Π°Π» Π΅ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π΅Π½, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ TIMx_CNT < TIMx_CCR1. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΠΊΠ°Π½Π°Π» Π΅ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½.

Въй ΠΊΠ°Ρ‚ΠΎ свСтодиодитС са ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ към MK с ΠΊΠ°Ρ‚ΠΎΠ΄ΠΈ, вторият Ρ€Π΅ΠΆΠΈΠΌ Π½ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π° (ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΡΡŠΡ‰ΠΎ, Π½ΠΎ всС ΠΎΡ‰Π΅ Π½Π΅ Π·Π½Π°Π΅ΠΌ Ρ‚ΠΎΠ²Π°).

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
Π‘ΠΈΡ‚ 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:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8

#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), ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΈΠΌΠ° ΠΌΠ°Π»ΠΊΠΎ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π°:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
Π Π°Π·Ρ€Π΅ΡˆΠ΅Ρ‚Π΅ главния ΠΈΠ·Ρ…ΠΎΠ΄

#define TIM1_BKR   *(volatile uint8_t *)0x00526D

TIM1_BKR = (1<<7);

Π’ΠΎΠ²Π° Π΅ всичко Π·Π° сСга, ΠΊΠΎΠ΄ΡŠΡ‚ Ρ‚Π°ΠΌ.

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8

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, спорСд Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΈ максимални ΠΎΡ†Π΅Π½ΠΊΠΈ Π² листа с Π΄Π°Π½Π½ΠΈ. ΠΎΡ‚ лист с Π΄Π°Π½Π½ΠΈ CD74HC238 ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Ρ‰ΠΈΡ„Ρ‚ΠΎΠ²Π΅ ΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΈΠ·ΠΌΠ°ΠΌΠ΅Π½ лист:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
H = Π½ΠΈΠ²ΠΎ Π½Π° високо Π½Π°ΠΏΡ€Π΅ΠΆΠ΅Π½ΠΈΠ΅, L = Π½ΠΈΠ²ΠΎ Π½Π° ниско Π½Π°ΠΏΡ€Π΅ΠΆΠ΅Π½ΠΈΠ΅, X - Π½Π΅ ΠΌΠ΅ интСрСсува

Π‘Π²ΡŠΡ€Π·Π²Π°ΠΌΠ΅ E2 ΠΈ E1 към маса, E3, A0, A1 ΠΈ A3 към Ρ‰ΠΈΡ„Ρ‚ΠΎΠ²Π΅ PD5, PC3, PC4 ΠΈ PC5 Π½Π° STM8. Въй ΠΊΠ°Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° ΠΏΠΎ-Π³ΠΎΡ€Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΊΠ°ΠΊΡ‚ΠΎ ниски, Ρ‚Π°ΠΊΠ° ΠΈ високи Π½ΠΈΠ²Π°, Π½ΠΈΠ΅ настройвамС Ρ‚Π΅Π·ΠΈ Ρ‰ΠΈΡ„Ρ‚ΠΎΠ²Π΅ ΠΊΠ°Ρ‚ΠΎ Ρ‰ΠΈΡ„Ρ‚ΠΎΠ²Π΅ Π·Π° натисканС ΠΈ ΠΈΠ·Π΄ΡŠΡ€ΠΏΠ²Π°Π½Π΅.

ШИМ

ШИМ Π½Π° втория Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ ΠΏΠΎ ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½, ΠΊΠ°ΠΊΡ‚ΠΎ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° история, с Π΄Π²Π΅ Ρ€Π°Π·Π»ΠΈΠΊΠΈ:

ΠŸΡŠΡ€Π²ΠΎ, трябва Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅Ρ‚ΠΎ АктуализиранС Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ (UEV), ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΈΠ·Π²ΠΈΠΊΠ° функция Π·Π° ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° активния свСтодиод. Π’ΠΎΠ²Π° става Ρ‡Ρ€Π΅Π· смяна Π½Π° Π±ΠΈΡ‚Π° Π Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅ Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ с Π³ΠΎΠ²ΠΎΡ€Π΅Ρ‰ΠΎ ΠΈΠΌΠ΅

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
Π Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅

#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. Врябва Π΄Π° ΠΎΠ±Π²ΡŠΡ€ΠΆΠ΅ΠΌ Π½Π°ΡˆΠ°Ρ‚Π° функция с ΠΆΠ΅Π»Π°Π½ΠΎΡ‚ΠΎ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅.

Π›ΠΈΡΡ‚ΡŠΡ‚ с Π΄Π°Π½Π½ΠΈ ΠΈΠΌΠ° Ρ‚Π°Π±Π»ΠΈΡ†Π° с ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Ρ‰ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π½Π°ΠΌΠΈΡ€Π°ΠΌΠ΅ Ρ‚Π΅Π·ΠΈ, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ:

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8
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 - Π˜Π·ΠΊΠ»ΡŽΡ‡Π²Π° ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡΡ‚Π°. Π’Π΅ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½ΠΎΠ²ΠΈΡ‚Π΅ стойности сС записват във "Π²ΠΈΠ΄Π΅ΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°", Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅Ρ‚ΠΎ, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½ΠΎ Π² Π·Π»ΠΎΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π΄Π° Π½Π΅ Ρ€Π°Π·Π²Π°Π»ΠΈ масива.

Всички ΠΊΠΎΠ΄ΠΎΠ²Π΅ - Π² Github.

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с Π΄Π°Π½Π½ΠΈ 2: SPI Π½Π° STM32; ШИМ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½ΠΈΡ Π½Π° STM8

Ако ΠΏΠΎΠ½Π΅ някой Ρ‚Π°Π·ΠΈ статия Π΅ ΠΏΠΎΠ»Π΅Π·Π½Π°, Ρ‚ΠΎΠ³Π°Π²Π° Π½Π΅ съм я написал Π½Π°ΠΏΡ€Π°Π·Π½ΠΎ. Π©Π΅ сС Ρ€Π°Π΄Π²Π°ΠΌ Π½Π° ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ ΠΈ Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠΈ, Ρ‰Π΅ сС ΠΎΠΏΠΈΡ‚Π°ΠΌ Π΄Π° отговоря Π½Π° всички.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com