Π
ααααααααααα»αααΉααααα αΆαα’αααααΈααααααααΎ datasheets ααΎααααΈαααααααΆααααΆαααΆαααα ααα»ααααα αΆαααΆα ααααααΆααααααααααΆα αααΎα ααΆααα·α αα αα ααΎ STM32 (Blue Pill) αα·α STM8 controllersα ααααααααΆαααααααΆααα’ααααααΌαααΆαα§αααα·αααα LEDs ααααααα»αα αΌαα α·ααα ααΎαααΉαααααααΊαα½αααΆαααα»αααα·ααΆαα αααΎα αααααΎαααΉαααααΌαααααΎααααΏααα»αααααΌαααααααα½αα±ααα αΆααα’αΆαααααααααααααααααα
α’αααααααααααΆααααααααα ααΌα ααααααΎααααΈααΆαααΆααααα½α αααα»ααααα»ααααααΎαααααΉαααΆαα
ααΆαααα·αααα αααα»ααα·ααααααΆαα·ααααααα αααα»ααα·αααααΎαα»αααΆααΆαα ααααααΉααααα αααααααα»ααααααα’αα‘α·α ααααΌαα·α αα α’αααααααΊααΆααααααααααΆααα’ααααααα αΌαα α·αααααΆαααΆαααΌα ααΆαααα»αα ααΆααα·ααα αααα»αααΆαα αΆαααα»ααααα½αα―αααΆαααΈααΈαααααΆααα»αααΆααΆαααααα·αααααααα α ααααα·αααΎααααΆααααΆααααΆαααααΆαααααα»αααΆ αααααΉααα·αααααααα ααΎαααααααΈαααααα·αααααΆααααααΆαααα·ααα½αα±ααααααΆα αααα»αααΆαα’αΆααα αααα»ααα·αα αααΆααααα αααΎααααα»αααΆαααααααααααααααααΌααα ααΎα’ααΈαααΊαα·α αα·ααααααΎαααΎα αααααααααααΎααααααα αα·αααΆαααααα’α·ααααααα
ααΆααααααα’αΆααααααααα’ααααααααααΊαα ααΎαααααΉααα·αααααα αα·ααααααΆαααααααα ααΌα ααααααΌααααα ααααΆαα·αααΌαααα’αΆααα α αΎαααΆααΏααα ααα’ααα αααααααααα½αααααΊααΆααααααΆαα ααΎαααααΈααΆααΆααααααααΆααα’αααααααΆααααααΆααααΌαααΆαα½ααααααααΈαααααΈαααααα
αααα»ααααααΉαααΆα’ααααααααααααα»αααΉααα½αααααΆααααΆαααα ααααΆααααΆαααααααααααΆααααΆαααααα»ααα αααα»αα ααααα αααΌαα α·αααα
STM32
16 LEDs ααΆαα½α DM634 αα·α SPI
ααααααααΌα αα½ααααααααΎααααΆαα Blue Pill (STM32F103C8T6) αα·α DM634 LED driverα αααααααΎα―αααΆααα·αααααα ααΎαααΉααααααααα’αααααΎααα α ααα STM IO αα·αααααααα ααΆαααααααα SPI α
DM634
αααααααΈααααααΆαααααααΆααα·ααααα PWM 16 αααΈα α’αΆα
ααααΌαααΆαααααΆααααΆα
ααααΆααα αααΌααα 16-bit ααααα·αααΆαααααΌαααΆαααααααΆααααΈαααααααααα»ααααα»α
α
αΆααααΆααααΈαααα»αα αα»αααα·αααΊαααααΆααα
ααααα DC Sink (Open Drain)
αα·α / αα·αααααααΎαα αα - αααα αΌα; αααααααααα αΌαα αΌα; αα·αααααααααΌαααΆαααααΆαααα ααΉαααΈαααα»αααααΆαααΆαααααα - α’αααΌα LED ααααΌαααΆαααααΆαααα α’αααααΎαααααα cathodes α ααΆαβαααβα’αααα·αααΈ αααβααΊβααΆβααΆαβαα·αβααΆααβαα·αβαααβααΆ "ααΆαβαααα αΌαβα αα" (ααΎααααα αΌα) ααα»αααααα αααα»αα―αααΆααα·αααααα ααΆααααααααααααααΆαααααα»ααα αααα»ααααααααα αΌαααααΌαααΆαααααΎαααΆααΉαααΆααα
α§αααααααααααααΆααααα
αααΆα REXT αα·α GND ααΎααααΈαααααααααααα
αα
α»αααααααα·ααααα
αααααΈαααααααααα½αααααΌαααΆαααα‘αΎααα α ααααααααα»α REXT αα·αααΈ ααααααααααααααΆααααααΆααααα»ααααα·ααααα ααΌαααΎαααααΆα αααα αααααααΈ 9 αααααααΉααα·ααααααα αα αααα»α DM634 ααΆαααααααααα’αΆα ααααΌαααΆααααααααααααααααααα·ααΈααααα αααααααααααααΊααΆααααΌα (αααααΊααα); αααα»αααΉααα·αα αΌααα αααα»αααααααΆααααα’α·ααα αααα»αα’αααααααααα αααα»αααΉαααΆαααααααΈααααα 2.2 - 3 kOhm αα ααΈαααα
ααΎααααΈαααααΈααααααααααααααααααααΈα ααΌαααΎαααΆααα·αααααΆααα ααα»α αααααΆααα§αααααα
ααΆα αααβααΊβααΆβααΆααΆβα’αααααααβα α·αβαααα»αβαα·ααΈβααα’βααΆααβα’ααβααααβααΆβα ααΆααααααααααααΊααΆααααα αΆ α’αααα’αΆα αααααΆαααααα·αααΎα’αααα αα ααα»ααααααΆααα·ααΈαα½ααααααααα - ααΎαααΈαααααααααΆααααααΆαααα TLC5940 αααααΆααα»αααΆαααααααααααΆααααΌαααΆααα·αααααΆαα αααα»αααΆααΆααα·ααααααα
... ααΆααααααα»αααΈααα»ααααααααααααΌααααα
αΌααα·αααααααα
αααα»αα§αααααα αααααΎαα‘αΎααααααααΆ SCLK ααααΆααααααΌααα·ααααααααΈ SIN pin αα
ααΆαα
α»ααααααααΆααααα»αα αααααΆααααΈαα·ααααααααΆααα’ααααααΌαααΆααααα»α αααααΆ XLAT αααααααααΈαα½αααΉαααααΆαααα·αααααααααααΆααααααααΆαααααααααΆαααα
αααα»ααααααΈααΆααααα»αα ααΆαα
α»ααααααααΆααααα»αααΊααΆα
ααααααααααα‘αΎααααααααα·ααααααΆ XLAT α αα·ααααααβααΆααα’ααβααααΌαβααΆαβαααααΌαβααααΌαβαααα»αβααααα·α
α
ααΆα
α - αα / αα / ααα
αααααΎαα‘αΎα - αααααΆααα»αααααΈαα
α
MSB ααααΌα - ααααΆαααααα»α (ααααααααα»α) αα
αα»αα
αα
αα·ααααααααΆα‘α·ααΆ - αααααΌααα·ααααααααΆαααααΆααααααα (ααααα·α
ααααα)α
ααΆααα α αΆαααα ααΆααΉαααΆααααααΌαααΆαααααΎααα αααα»αα―αααΆααααααΆαααααααααααααΈ α αΎαααααΌαααΆαααααααααΆααα·ααΈαααααα ααΌα αααααααααΆααααΆααααααααααααΆααααααΉα αααα»αααΉαα’αα»ααααΆαα±αααααα½ααααα»α
αααααα·ααΈα’ααααααΌα αα½ααααααα·ααΈαααααΆ LED ααΊααααΆαααααααΆααααΆαα α»ααααααααααΆααααααΌαα "ααααΌα" (shift) αα αααα»αααααα - α αααΆαααΈααααα·αααααααα ααΆααααα»αα§αααααα αααΈαααααΈααΈαα½ααααααα»ααα ααΆααααα»ααα»αα αααααΆααααΆααααΌααα αα»ααα ααΈαα»αααΆα αααααΆαααααΆαααααΆααααΆααα ααααααααααΎαααΆαααααΉααααααααα LEDs ααα‘α»ααααααααΆααααααΌαααααΎαααΆααααααΎαα‘αΎααα αααα»αααΆαα α»ααααααΈααα·ααααααα’αΆααααααααααααα ααααΈαααααΈααΆαααΆαααα damper (α αΆαααα) ααΊααΆαααααααααααααααα αΆαααααααΈαααααΌαααΆααααα αααΆαααααΆαααααα ααααΆαα αα ααααααα’αααΈαααααααααΆααα½α ααΆαα ααααααα·αααΎα α αΎααααΈαααΉαααααΎαααΆα ααααααα½αααΆα ααα»αα ααΆααα α αΆαααα αα αααα»αα―αααΆααααααΆαα microcircuits ααααΎαααααααααααααααααααΌα ααΆ damper αα·αααΆαα αααα»ααααααα’αααΈαααααΆααααΌαααΆαααααΎα
ααΌα ααααααΆαααααααα·αααααααα DM634 ααααΌαααΆαα’αα»ααααααΌα ααα: αααααααΆααααα αΌα DAI αα ααΉαααααααααααΈαααααααΆαααααα»ααα LED ααααΆα ααΆα DCK α‘αΎαααΎα α»ααααααα αααααααΆααααα αΌα DAI αα ααααααααααΈααααααΆαα ααΆα DCK; α αΎααααααα αΌαααααααΈαααΆααα’ααααααΌαααΆααααααΌα (ααΆα‘α·ααΆα αΌα) αααααΆααααΈαααααΎαααΆα LAT α αααα’αΆα ααααΌαααΆαααααΎααααα (αααΈα) ααα»ααααααΆααΆααΆααααααΎααααα»αααΆαααααΎα ααα»α αααααΆαα SPI αααααααΌαααΆααα ααΆα‘αΎαααΆαα·ααααααααΆααααΆαααα αααααααΆααααΌαααΆααααα αΆααα ααΎ STM32 ααααααΎαααΆααΈαα αααΆααα ααααα
ααααΆαααααΆαααααααα STM32F103
ααΆαααααΆαα α§ααααααααααΆ STM32 ααΆαααΆααααα»αααααααΆαααΆα Atmega328 ααΆαααΆα αΆααααΌα
ααΆαα½αα±ααααααΆα
α ααΎαααΈααααα
ααα αααααΆααα ααα»ααααααΆααααααααΆααα ααααΏααα»αααααΌαααααααΎαααααΆααα’ααααααΌαααΆααα·ααα
αααα
αΆααααααΎα α αΎααααααααααΆα‘α·ααΆααΊ 8 MHz ααΈαααααααΆααααα»αα ααΆααααΆαααα’ α’αααααααααααααα·ααΈ STM ααΆααααααααΌααααααΆααααααααΈαα‘αΎαααα "ααααΆ" 72 MHz α αΎαα’ααααα·αααααα IDE ααΆααα’ααααααααα»αααααΆααααΆααααα
αΌαααΆαα
αααα»αααααΎαααΆαα
αΆααααααΎα ααΌα
ααααααΎααα·αα
αΆαααΆα
αααΆα‘α·ααΆαα (ααα»αααα
α―αααΆαα Blue Pill ααααΌαααΆαααααΆααααααααααααΈαααααααα·αα STM32F103C8T6 ααΆαα―αααΆαααΆαααααααααααΈααααααΆααααΆα
αααααΉααα·αααααα αααααΆαα microcontrollers STM32F103x8 αα·α STM32F103xB;ααααα ααααα αααααΆαααααα STM32F103 ααΆααααΌα αα·αα αααΎααααα
αα αααα»αααΆααΆααα·αααααα ααΎαα’αΆα α αΆααα’αΆααααααα
- Pinouts - chip pinouts - αααα»αααααΈαααααΎααααααα α α·αααααααΎααααΆαααααααα½αα―α;
- Memory Map - αααααΈααα·αααααΆαααααααααΈαααΆααααΆαααα½αα ααααα ααααΆαα―αααΆααααααΆααααααΈαααααΆαααααααΆααααΆααααΌα α αΎαααΆαα·ααΆαα’αααΈααΆαα α»αααααααααααΎααα·αααΆαα
- ααΆααΆααα·ααααα Pin - ααΆααα»αααΆαααααΆαα αα·ααααα½ααααααα»α; αααααΆαα "ααααΆαααααΆαααααααα" α’αααα’αΆα αααααααααΌαααΆαααΆααααααΆααααα½ααα ααΎα’ααΈαααΊαα·α ααΆαα½αααΉααααααΈαααα»α αα·ααα»αααΆαααααααΆα ααΌα ααααα αΎα ααΎαααααΆαα google Blue Pill pinout α αΎααααααΆααΌαααΆαααααα ααΉαααα
NB: ααΆαααα α»ααα
αααα»αααΌαααΆαααΈα’ααΈαααΊαα·α αααααααΌαααΆαααααααααΆαααα
αααα»αααα·ααααα ααΌαα’ααα»αα
ααααααΆα ααΌαααΆαααααΌαααΆααααα½αααα»αααααααααΊααΆααααααα½α - ααΆααΆααΆααααααΎααααα»αααΆααααα½ααα·αα·αααααααααΆααα·ααααααΈαααααΉααα·ααααααααα
ααΎααααααααΉααα·ααααααα
αα ααΎαααααα
ααααΆαα―αααΆαααα α αΎαα
αΆααααΈααααααααα
ααΎαααααΎααααΆααα»αααααα
ααΈαα·αα·ααΈα ααΎααααααααΆαααΆαα½αααΉαααΆααααα
αΌα/αα·ααααααααααααΆα ααααααα
ααΆαααααααα SPI ααΎαα§αααααα
αΆαααΆα
αα
αααα αΌααα·ααααα
αα ααΎ Atmega328 I/O ααααΌαααΆαα’αα»αααααααΆαααΆαααα ααααααααΆααΌαα ααα»αααααΆααααααΌαααααααααααΎα STM32 α’αΆα ααΆαααΆααααααα ααα‘αα α₯α‘αΌααααααΎαααααΆααααααααΌαααΆαααΆαααααα·ααααΆαααα»ααααα ααα»ααααααΌααααΈαααααααΎαααΆαααααααααΆααααααΎααα½ααααα
αααα αΌαααΎαα
αα , αα»αααΆα, αα»αα
αααΆααααα½α, αααα αΌαααΎαα
αα αααα½α
"ααΆα-αα»α" (αααα»α - ααΆα) ααΊααΆαα·αααααααααααΆααΈ Arduino αααα»αα’αΆα
αααααααααΆαααΆαα HIGH α¬ LOW α ααα»ααααααΆαα½αααΉα "αααα αΌαααΎαα
αα " ααΆα
ααΆαααααααα
ααΆαααααααααα·ααααα / αα
ααααααα
αααααααΌαααΆαααααααα
αα·ααααα: / ααα·ααααααα’αΆαααααα·αααααααΆαααΎα: / β ααΎααααααααα αΌα: "0" αα
αααα»ααααααΈαα·αααααααΎα N-MOS, "1" αα
αααα»ααααααΈαα·ααααααα»αα
ααααααα»ααααα Hi-Z ( P-MOS αα·αβααααΌαβααΆαβααααΎβα±ααβαααααβ) / β ααααβαα»αβααΆαβ: "0β" αα
βαααα»αβααΆαβα
α»αβαααααβααααααβααααΎβα±ααβααααα N-MOS, "1β" αα
βαααα»αβαααααΈβαα·αααααβααααΎβα±αα P-MOS αααααβα
ααΆααα»αααααΆααΆααα’αααααΆαααΆααααα αΌαααΎαα αα (ααΎααααα αΌα) ααΈ "αα»α - ααΆα" (αααα»α - ααΆα) ααΊααΆαα αααα»ααααα»αααΈαα½ααα·αα’αΆα ααα½αααααααΆαααΆα HIGH ααΆαααα αα αααααααααα½ααα αααααΈαα·ααααα ααΆα αΌααα αααα»ααααααααααααΆαααααα (impedance αααααα, α ααΈα ααα) αα αααααααααααααΌααα αααα»αααΆαααααΎαααΆαααΌα ααααΆαααα»αααααααΆααααΈα ααΆααα‘αΌααΈαα αα·αα’αα‘α·α ααααΌαα·α α
αα αααα»ααααααα·αααααααααααΆ αααα»αααααΆααααααααΆαααΆαα·ααΆαααααααΈααααααα αα αααα»α "αααααΎα" ααΆααααΌαααΆαααααααααααααααααΏααα»αααααΌααααααααααΌαααααΆ (ααΌαααΎα 9.1.4):
ααααα·αααΎβα
αααβαααΈαβααααΌαβααΆαβαααααβαα
ααΆααααααααβααΆβαααα»αβαα»αααΆαβαααα½α αααβααΆαβα
α»ααααααβαααα»αβααααΌαβααΆαβαα·α α αΎαβαααα»αβααααΌαβααΆαβαααααΆααβαα
βαααα»αβααααΏααα»αααααΌαααα
αα»αααΆααααα½ααααααα»αααΈαα½ααααααΌαααΆααα·αααααΆαα αααα»α αα·ααα·ααααα αααααΉααα·ααααααααΊαα ααΎααΌαααΆααααααΆαααΆαααα α αααααααα½αααα’αααΈαααααααΌαααααΎααααα·αααΎαααα»αααΆααα»αααΆααααα½αααΆα αααΎα α ααααΎαααααΌαααΆααααααααααααααααα αααα»αααΆααΆααα·ααααααα
ααααα·αααΎααααΏααα»αααααΌαααα
αααΎαααααΎαααα»αααΌα
ααααΆ ααΎααααΈαααααΆαααΆααααααααα·α
αααΆααα»αααΆααααα½α ααΆαααααααΏααα»αααααΌααααα½αααα»ααααααα½αααααααΌαααΆαααααΎαααα»αααααααα½α ααααα·αααΎααααααααΎααΆα‘α·ααΆααααΏααα»αααααΌαααααΎααααΈα (αα
αααα»αααΆαα
α»αααααα RCC ααααααααα)α
α α»αααααα αααα»ααα αααα»ααααααα·αααααααααΆαααααΏαααΆα‘α·ααΆαααααα αααααΊααΆαα»αααΆααααααααα αααΆααααα½ααααααααα αααα»αααααΈααααααΎα ααΎαααααΆαααααααααααΆαααα’αα·ααααΆ α αΎαααααααα ααΆα ααα
ααΌα ααααα ααΎααααα»αααααΎ SPI αααααΆααααααΆαααα»αααΈα (ααΆαα½ααα·αααααα αα·ααααααΆααΆα‘α·ααΆ) αα½αααααΆ "αα»αααΆααα»αα αααΆααααα½α" α αΎααα½αααα (LAT) αα½αααααΆ "ααΆααα»αα αααΆααααααΆαα" α ααα»ααααβαα»αβααΉαβα αΆααααΆααβαα½ααα ααΌαβαααααααΆαβααΆαα½α SPI α
SPI
αααααα·ααΈα’ααααααΌα αα½ααααα
SPI α¬ Serial Peripheral Interface (serial peripheral interface) ααΊααΆα ααα»α αααααΆααααΆαααα αα·αααΆαααααα·αααααΆααααα»ααααααΆααααααΆαα MK ααΆαα½α MKs αααααααα αα·ααα·ααααΆααααα ααΆααΌαα α αααααΆαααααααααα·ααααα·ααΆαααααααΆααααΌαααΆααα·αααααΆααΆαααΎαα½α α αΎααααα’αααΈαααααα·ααΈαααααΆ LED ααααα α·α (αα αααα»αααααα ααααΆααααααΌαααΎααααααααΈ 25) α SPI α’αΆα ααααΎαααΆααα αααα»ααααααα ("αα") αα·αααΆααα ("ααΆααα") α SPI ααΆααααααΆαααΌαααααΆαα ααα½α XNUMX ααααα·ααααααΆααα’ααα’αΆα ααααΎααΆαααα
- MOSI, Master Output / Slave Input: αααα»αααααααααΌααα·αααααααααα»ααααααααα αα·αααα½ααα·αααααααααα»ααααα slave α
- MISO, Master Input / Slave Output: αααα»ααα αα·α ααΆααα½αααΆααα αααα»ααα αα·ααααααΌααα αααα»αααΆαααα
- SCK, Serial Clockα ααααααααααααααααΆααααααΌααα·αααααααα αααα»ααα α¬ααα½ααααααΆααΆα‘α·ααΆαα αααα»α slave α ααΆαααΆαααααααΆαα;
- SS, Slave Selectα αααααΆααααα½αααΈααΆαααααα ααΆαααααΉαααΆα’αααΈαα½αααααΌαααΆαααα ααααΆαααΈααΆααα αα ααΎ STM32 ααΆααααΌαααΆαααα α ααΆ NSS ααα N = negative, i.e. α§ααααααααααΆααααΆαααΆααΆαααααααα·αααΎααΆαααΈαα αααα»αααΆααααααα ααΆαα½ααααα αΌαααααΆαααΆαααα’ααΆαα½αααααααΎααααα αΌαα αα ααα»αααααααααΆααΏααα½ααααα
ααΌα α’αααΈααααααααααα SPI αα ααΎ STM32 αααααΌααα ααααα»αααΆα αααααααΎα±ααααΆαα·ααΆαααααααααα ααΆα§ααΆα ααα ααΆα’αΆα ααααΎαααΆααα·αααααΉαααααΆαα½α SPI ααα»ααααααα ααα»ααααααααΆαα ααα»α αααααΆαα I2S ααααα α αΎααα αααα»αα―αααΆα ααΆααα·αααααΆαααααα½αααααααΌαααΆαααΆααααα αΌαααααΆ ααΆα αΆαααΆα ααααα»αααΆαααΆααααααΆα αααΎααααα»αααααααααΆαααααααααΆα ααΆααα·α αα ααααααΎαααΊααΆαααααααα»αα ααΎαααααΆααααααααΌαααΆαααααΎαα·αααααααααααααΎαα MOSI αα·α SCK ααα»αααααα ααΎααα ααααα 25.3.4 (ααΆαααααΆααααααααΆαααααααΆαααΈα ααΆαααααΆααααααααΆαααααααΆαααΈα) αααααΎαααααΎα ααΆα‘α·ααΆ 1 αα·ααααααα·αααααα 1 α―ααα·α (1 αααααΆααΆα‘α·ααΆ αα·α 1 ααα αΌααα·αααααα unidirectional):
αα
αααα»αααααααα αααααα·ααΈααααΎααααΆαα 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 Memory Mapα
α’ααα αΉααααα αΆααααααΎαα
#define _SPI2_(mem_offset) (*(volatile uint32_t *)(0x40003800 + (mem_offset)))
ααΎαααααα 25.3.3 ααΆαα½αααΉαα αααααΎαααααααααααααα½αα―α "ααΆαααααααα ααΆαααααααα SPI αα αααα»ααααααα"α
1. ααααααααααααααΆα‘α·ααΆαααααααΆαα½ααααΈα BR[2:0] αα αααα»αααΆαα α»αααααα SPI_CR1α
ααΆαα α»ααααααααααΌαααΆααααααΌααα αααα»ααααααααααα ααααααααααααααΌα ααααΆα ααΆαααααΆααααααΌαα’αΆααααααΆα (α’αΆαααααααΆαα’α»α αααα·α) αααααΆαα CR1 β 0x00 ααΆαααααΆαααΎααααΈαααΆααα’ααααααΌαααΆαααααα (ααααααααααα‘αΎααα·α 0x0000)α
αααΈα BR αααααααΆααααα ααααΆα‘α·ααΆααααα§ααααααααααΆ ααΌα ααααααααααααααααααα SPI ααΉαααααΎαααΆαα ααααααα STM32 ααααααΎαααΉαααΆα 72 MHz αααααΆαααααα·ααΈαααααΆ LED αααααΆααααααΉααα·ααααααααααααΆααααΎαααΆαααΆαα½αααΉαααααααααα αΌαααα 25 MHz ααΌα ααααααΎαααααΌααααα ααααααα½α (BR[2:0] = 001) α
#define _SPI_CR1 0x00
#define BR_0 0x0008
#define BR_1 0x0010
#define BR_2 0x0020
_SPI2_ (_SPI_CR1) |= BR_0;// pclk/4
2. ααααααααΈα CPOL αα·α CPHA ααΎααααΈαααααααααΆαααααααααΆαααΆαααααααα·αααααα αα·αααΆααααααααΆα‘α·ααΆααααα (ααΌαααΎαααααΆααααΆααα ααααα 240)
αααααΆαααΎααααα»αα’αΆαααΆααΆααα·αααααααα ααΈααα α αΎααα·αααΎαααΆααααααααΆααα ααΌαααΎαααΆααα·αααααΆα’ααααααααααΈα CPOL αα·α CPHA αα ααΎααααα 704 (SPI ααΆααα·αααααΆααΌαα )α
ααααΆααααΆαααΆα‘α·ααΆ αα·αααΆααααΌαα
αααααααΎαααΈα CPOL αα·α CPHA ααααΆαα
α»αααααα SPI_CR1 α’αααα’αΆα
ααααΎαααΎαααααΆαααααααααααααΆα
ααα½ααα½αααΆααααααα·ααΈα αααΈα CPOL (ααΆααααΌαααααΆα‘α·ααΆ) αααααααααααααΆαααΆααααααααΆααΆα‘α·ααΆ αα
ααααααααααΆααα·ααααααααααΌαααΆααααααΌαα αααΈααααααααααααααααααα αα·αααΆαααα ααααα·αααΎ CPOL ααααΌαααΆααααααα‘αΎααα·α αααα»α SCK ααΆαααααα·αααΆααα
αααα»ααααααααααΆαα ααααα·αααΎαααΈα CPOL ααααΌαααΆαααααα αααα»α SCK αααααα’αα‘α»αααααααααΆαα
αα
αααααα CPHA (ααααΆααααΆαααΆα‘α·ααΆ) αααΈαααααΌαααΆαααααα ααααααΈαα’ααααΆαααααΈααααααααΊααΆαααααΈααΈααααααααΆ SCK (ααααΆααα
α»αααααα·αααΎ CPOL α
αααΆααααΆαα ααΎαα‘αΎαααααα·αααΎ CPOL ααααΌαααΆαααααα) α αα·ααααααααααΌαααΆαα
αΆαααααααααΆαααααΆααααααΌαααΈααΈααα
αααα»ααααααΆααΆα‘α·ααΆα ααααα·αααΎαααΈα CPHA ααΆαααΆαα
αααΆααααΆααααα ααααααΈαα’ααααΆαααααααααΊααΆαααααΎαα‘αΎααααααααΆ SCK (αααααααΆααα
α»αααααα·αααΎ CPOL ααααΌαααΆαααααα αααααΎαα‘αΎαααααα·αααΎ CPOL ααααΌαααΆαααααα) α αα·ααααααααααΌαααΆαα
αΆαααααα
ααΆαααααΆααααααΌαααααΌααα
αααα»ααααααΆααΆα‘α·ααΆα
αααααΆαααααΌαααα ααααααΉαααα ααΎαααΆααααααΆαααααα·ααααΆαααΆ αααΈαααΆααααΈαααααΌααααα ααααΌααα ααΈααααα ααΎαα ααα±αααααααΆ SCK αα ααΆααα ααααα·αααααΎ α αΎααα·ααααααααααΌαααΆααααααΌααα ααΎαααααΎαα‘αΎαααααΈαα α (ααΌαααΎαααΌαααα αααααΎαα‘αΎα αααα»ααα·αααααα DM634)
αα·ααΆαα’αΈααα αΉα αα ααΈαααααααΌαααΎαααΆααα½αααααααααααααα·ααααα½αααααΆααααααααα αααα»α ST datasheets: αα αααα»ααα½αααααααΆ "αααααα‘αΎααα·ααααΈααα ααΌααα" ααααΌαααΆααααααα ααΎααααΈαααααα‘αΎααα·αααααα·α αα·ααα·α ααΎααααΈαααααααααα·α α§ααΆα αααααΌα ααΆ Atmega α
3. ααααα DFF bit ααΎααααΈαααααααΆααΎαααα»ααα·ααααααααΆαααααα 8-bit α¬ 16-bit
ααΆαα·ααααααα»αααΆααα 16-bit DM634 ααΎααααΈαα»αα±ααααααΆααααααΆααααααΌααα·αααααα PWM 12-bit ααΌα ααΆ DM633 ααΆααΎαα ααΆααα ααα»αααααα»αααΆαααααα DFF αα αα½αα
#define DFF 0x0800
_SPI2_ (_SPI_CR1) |= DFF; // 16-bit mode
4. ααααααα ααΆαααααααααααΈα LSBFIRST αα αααα»αααΆαα α»αααααα SPI_CR1 ααΎααααΈααααααααααααααα»α
LSBFIRST ααΌα ααααααααααααααΆααΆααααα αΆα ααααααα ααΆααααααααααΆααααααΌαααΆαα½αααΉααααΈαααααΆααααααΌαα ααα»αααα DM634 α ααααα½αααΆααα·αααααααααα αΆααααααΎαααΈαααΈαααααααΆαααααα»αα ααΌα ααααα αΎα ααΎααα»αααΆα‘αΎααα·αα
5. αα αααα»ααααααααααααΉα ααααα·αααΎααΆααααα αΌαααΈαααα»α NSS ααααΌαααΆαααΆαααΆα ααΌαα’αα»αααααααααΆααααααα ααΆαααααα»α NSS ααα‘α»ααααααααΆαααααααααααΆααααΌαα αα αααα»ααααααααααα·ααΈ NSS ααααα SSM αα·α SSI αααΈααα αααα»αααΆαα α»αααααα SPI_CR1 α ααααα·αααΎαααα»α NSS ααααΌαααΆαααααΎααΆαααααα ααΆααααααΈα SSOE ααα»ααααααααααααΌααααααα
ααα‘αΎα SSM αα·α SSI ααΎααααΈααααα α’αααΈαααααααααααΉα NSSα
#define SSI 0x0100
#define SSM 0x0200
_SPI2_ (_SPI_CR1) |= SSM | SSI; //enable software control of SS, SS high
6. αααΈα MSTR αα·α SPE ααααΌαααααααα (αα½αααΆαα αααααααααΆααα»αααααΆαααααααΆ NSS ααααα)
ααΆααΆααα·αααΆαα ααΆαα½αααΉααααΈαααΆααααα ααΎαααααα SPI ααααααΎαααΆαα α αΎαααΎαααΆα
#define MSTR 0x0004
#define SPE 0x0040
_SPI2_ (_SPI_CR1) |= MSTR; //SPI master
//ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΎ, Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ SPI
_SPI2_ (_SPI_CR1) |= SPE;
SPI ααααΌαααΆαααααααα ααΆαααααααα α αΌαααΎαααααααα»αααΆααααααααΎαααα α’αααααΎαααααααΆααα ααααα’αΆα 25.3.3 "ααΆαααααααα ααΆαααααααα SPI αα αααα»ααααααα"α
ααααΆααααααααα·αααααα
ααΆααααααΌαα
αΆααααααΎααα
αααααααααα½αααααΌαααΆαααααααα
ααα·ααααααα’αΆαααα Tx α
αααα·ααααααααααΌαααΆααααα»ααα
αααα»αααΆαααααΆααααααΌαα
α»αααααααα
αααΆαααΆα‘αα αααα (ααΈα‘αΆααααα»αααΆααααα»α) ααα‘α»αααααααααΌααααΈαααααΌα αααααΆααααααΆααααΌαααΆααααααΌααα
αααααααααΆααααααΆα MOSI pin mode αα
αα»αααααα·α
α¬α
α»αααααα α’αΆαααααααΎααΆαααααα LSBFIRST bit αα
αααα»αααΆαα
α»αααααα CPI_CR1α ααα TXE ααααΌαααΆαααααααααααΆααααΈααΆααααααΌααα·αααααα ααΈ Tx buffer αα
shift registerα αΎααααααααΎαααΆαααααΆαααααα ααααα·αααΎαααΈα TXEIE αα
αααα»αααΆαα
α»αααααα CPI_CR1 ααααΌαααΆααααααα
αααα»αααΆαααΌααααααΆααααΆααααα½αα ααα½ααα αααα»αααΆααααααα ααΎααααΈααΆααααΆαααΆαααα α·ααααα»αααΆααα αααααααααααα·ααααα½αααααΆαα’αα»αααα SPI αα αααα»αα§ααααααααααΆ STM α αα ααΎ Atmega ααα TXE (Tx ααα, tx ααΊααα αα·ααα½α ααΆαααααα»αααΆαααα½ααα·αααααα) ααααΌαααΆαααααααααααααΆααααΈααααΆααααΌαααααΌαααΆαααααΎ ααΆααααα . α αΎααα ααΈαααααααααααααΌαααΆαααααααααααΆααααΈααααααΌαααΆααααα αΌααα αααα»ααααααΈααΆαααααΆααααααΌαααΆααααα»αα αααααΆαααΆααααΌαααΆααα»ααα ααΈαααααΆαα½ααααΈαααΆααα’αααααα»αααααααα½α (ααααααααΆ) α αΎααααααΆαααααα·ααααααααααΌαααΆααααααααΆαααααααααΆαα TXE ααααΌαααΆαααααααα»ααααααααααΌαααΆαααααΎααΆαααααα»αα αααβααΆβααΆαβααααΆααβαααβααΆαβααβ αα αααα»αααααΈαααααααα·ααΈαααααΆ LED ααααααΎαααΎαααααΌαααΆααααα»α LAT αααααΆααααΈααααΎ Π²ΡΠ΅Ρ αα·αααααα, α§α ααα TXE ααα―αααΉααα·ααααααααααΆαααααααΆααααΎαααα
αααααΆααααααΆααΎαααααΌαααΆααααααΆαα·αα½ααααα αααααΎα 25.3.7 - "αααααααΆαααΆα"α
<β¦>
ααα BUSY
ααα BSY ααααΌαααΆαααααα αα·ααααααααααααααααΉα (ααΆαααααααα
ααΆαα·αααΆαααααα·αααα·ααΆααα) α ααα BSY αααα αΆαααΈααααΆαααΆααααααααΆααααααΆαααααα SPI α
ααΆαααααα‘αΎααα·αα
αα
αααααΆααααααααααΌαααΆααααα
αα (ααΎαααααααα
αααα»ααααααα ααααα·αααΎααΆαααααααααα)
αα
αααααα SPI ααααΌαααΆααα·α
αα
αααβααΆαβααα α»αβααααβααβααΎαα‘αΎα (MODF=1)
ααααα·αααΎααΆαααααααα·ααααα ααα BSY ααααΌαααΆαααααααααΆαααΆαααααααα·ααααααααΈαα½αα
αα·αα’αΈαα ααΆααΉαααΆαααααααααα α αΌαααΎαααααααααααΆααΎαααααααααα»α Tx αααα·ααα αααααααΆα ααΎααααΈααααΎααΌα αααααΌαα’αΆα "ααΆαα α»αααααααα·αααααα SPI"α
Bits 15:0 DR [15:0] ααΆαα
α»αααααααα·αααααα
αα·αααααααααααα½αααΆα α¬αα·αααααααααααααΌααααααΌαα
ααΆαα
α»αααααααα·ααααααααααΌαααΆααααα
ααααΆ buffers ααΈα - αα½ααααααΆααααΆαααααα (αααααΌαααα·ααααααα’αΆαααα) αα·ααα½αααααααααΆααααΆαα’αΆα (ααα½αααΆαααα·ααααααα’αΆαααα)α ααΆαααααααα
αααααΈαα·αααααα ααααααα
ααα·ααααααα’αΆαααα 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 αα XNUMX αααααααΎαααααΆαα ααα½ααααααααααααααα·ααΈαααααΆ 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 ααααΌαααΆαααΆααααΆααα ααΌααΆαααα½αααΆαααα»ααααααα "αα½ααααΈααααα»ααα½αααααα’αΌα" α ααΆαααααα αααα»αααΈααΌααααααααααΆαααΈαααΊαα αααα»α CRL α αΎααα αααααΊαα αααα»α CRH α αααααΉαααΉααααααΆαα α»ααααααααααα ααααααααααααααΆααααΈααααααα»αααΆααα’ααααα ααα - ααΆααΉαααΆαααα αααααΆαααααααΆα "ααΆαααααα»ααα»α" α
αααααΆααααΆαααΆαααα α αΌαα αΆααααααΎαααΈα α»ααααα αααααααααΈα
ααΎααα·αααααΌαααΆαα α»αααααααααααααΆααααα
ααΆαααααααα·ααααααααΆαα α»ααααααα‘αΎααα·αααΊαα½αα±ααα’ααααααΎα ααΆααααααα½αααΆα ααααααααΆααααααααα α’αααα’αΆα αααααα’αααΈαααααααααΆααααα αααα»α BSRR ααα 16 αααΈααααααααΉαααααααααα»αα‘αΎααα·ααα ααΌααα α αΎααααααΆαααΉαααααΌαααΆαααααααα 1 α¬α’αααααα’αΆα ααααΎ BRR αααααΆ 16 αααΈαααΆα αααααααααααααα»αα‘αΎααα·αα αααα»αα αΌαα α·ααααααααΎαααΈααΈαα ααΆαα α»ααααααααΆαααααααΆαααΆααααααΆαααααααααΆαααααααΌαααΆαα αΌαααααΎα’αΆααΌαα·ααα ααΆαααααα»αα
α’αΆααΌαααααα α¬αααααα‘αΎααα·α
αα·αα
αΆαααΆα
ααα·αααΆαααααΆααα
αααααααααααααα·ααΈ GPIOx_ODR αα
ααααα·ααααΈαααα αααΈααα½α α¬α
αααΎαα’αΆα
ααααΌαααΆαααααΆααααααΌαααΆαα½αααΉαααααα·ααααα·ααΆααααααα’αΆααΌαα·ααααα½α APB2α αααααααΌαααΆααααααα
αααααΆαααααα "1" αα
αααααΈααααα/αααααα‘αΎααα·α (GPIOx_BSRR α¬αααααΆαααααααα‘αΎααα·αααααα»ααααα GPIOx_BRR) αααααΈααααααααΌαααααΆααααααΌαα αααΈαααααααααααΉααα
αααα·αααααΆααααααΌαα
ααΆαα α»αααααααα·ααααααααΆααααααααααααααααααα½αα―α - IDR = αααα αΌα ααΆαα α»αααααααα·ααα , ααΆαα α»αααααααααα αΌα; ODR = αα·ααααα ααΆαα α»αααααααα·ααα , ααΆαα α»ααααααααααααα ααΎαααΉααα·αααααΌαααΆαααΆαα αααα»ααααααααα αα α»ααααααααα
α αΎαααΈαααα»αααΆαα α»αααααααααα½ααα·αα·αααα αααααΆαααΎαα αΆααα’αΆααααααααΎαααα»α SPI ααΈααΈαααΊ PB13, PB14 αα·α PB15 ααΎαααΎααα CRH ααααΆααα
α αΎαααΎαααΎαααΆααΎαααΉαααααΌαααΆααααααα’αααΈαα½αααΆαααΈαααΈ 20 ααα 31 α
ααΎαααΆααα·ααα½α α αΎαααΈα’αααΈαααααΎαα ααααΆαααΈαααα»α ααΌα αααααα ααΈααααααα»αααΉαααααΎαααααααΆαααΌαααα’αααααα αααα»αααΉααα·ααΆαααΆ MODE αααααΆαααα·ααα (αααα αΌαααααα·αααΎαααΈαααΆααααΈαααααΌαααΆαααααααα 0) αα·αααααΏα pin (ααΎαααααΌαααΆα 50MHz αααααΊα§α ααΆαα pin αα β1β) α αΎα CNF αααααααααα βpush-pullβ ααααααΆ β 00, βalternativeβ β 10. ααΆαααααΆαααΎα ααΌα αααααΎαααΎαααΆαααΎ αααα»αααΆααα’ααααΆααααΈαααΈααΈααΈααΆα (CNF0)α ααΆααααααα½αααΆαα ααΆαααα ααΆααααα αΌαα’ααααα.
αααααΆααααα»αααΆαααααααααααΎα’αααΈαα½αααααααααααΆαα½ααααααααΈαααα ααΎααααΈααΆαααΆαααα αααα»αααΆααααααααααα MODE αα·α CNF αααα’αΆα ααααΎααΆαααΆααα’αααααααΆααααΆααααΆαα α»ααααααΈααΆααααααααααααααα αα·αααΆαααΎα
ααΌα ααααα
#define CNF0_0 0x00000004
#define CNF0_1 0x00000008
#define CNF1_0 0x00000040
#define CNF1_1 0x00000080
#define CNF2_0 0x00000400
#define CNF2_1 0x00000800
#define CNF3_0 0x00004000
#define CNF3_1 0x00008000
#define CNF4_0 0x00040000
#define CNF4_1 0x00080000
#define CNF5_0 0x00400000
#define CNF5_1 0x00800000
#define CNF6_0 0x04000000
#define CNF6_1 0x08000000
#define CNF7_0 0x40000000
#define CNF7_1 0x80000000
#define CNF8_0 0x00000004
#define CNF8_1 0x00000008
#define CNF9_0 0x00000040
#define CNF9_1 0x00000080
#define CNF10_0 0x00000400
#define CNF10_1 0x00000800
#define CNF11_0 0x00004000
#define CNF11_1 0x00008000
#define CNF12_0 0x00040000
#define CNF12_1 0x00080000
#define CNF13_0 0x00400000
#define CNF13_1 0x00800000
#define CNF14_0 0x04000000
#define CNF14_1 0x08000000
#define CNF15_0 0x40000000
#define CNF15_1 0x80000000
#define MODE0_0 0x00000001
#define MODE0_1 0x00000002
#define MODE1_0 0x00000010
#define MODE1_1 0x00000020
#define MODE2_0 0x00000100
#define MODE2_1 0x00000200
#define MODE3_0 0x00001000
#define MODE3_1 0x00002000
#define MODE4_0 0x00010000
#define MODE4_1 0x00020000
#define MODE5_0 0x00100000
#define MODE5_1 0x00200000
#define MODE6_0 0x01000000
#define MODE6_1 0x02000000
#define MODE7_0 0x10000000
#define MODE7_1 0x20000000
#define MODE8_0 0x00000001
#define MODE8_1 0x00000002
#define MODE9_0 0x00000010
#define MODE9_1 0x00000020
#define MODE10_0 0x00000100
#define MODE10_1 0x00000200
#define MODE11_0 0x00001000
#define MODE11_1 0x00002000
#define MODE12_0 0x00010000
#define MODE12_1 0x00020000
#define MODE13_0 0x00100000
#define MODE13_1 0x00200000
#define MODE14_0 0x01000000
#define MODE14_1 0x02000000
#define MODE15_0 0x10000000
#define MODE15_1 0x20000000
αααα»αααααααΎαααΆαααΈααΆαααα α ααα 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 αα½α α αΎαα ααΎααααααααααΆαα αααα»αα―αααΆαα αααααΊααΆααΆααααααα‘αΎααα·α αα·αααΆααααααααααααΆα‘α·ααΆα
ααΌα
αααααααΌαααΆααααα·ααΆαααΆαααΎ ααΆααααΆαααα’ αααααααααααΆααααα»ααααααααΆαααααΆα‘α·ααΆααααΌαααΆαααααΎαααααΆααααΎααααααα»αααααααΈ STM αααααΎαααΌαα’ααα»ααα½ααααααΆαααααΆαα (ααΆααααΈααααααααααα»αααΉαααααααααααααΆαααα
#define _RCC_(mem_offset) (*(volatile uint32_t *)(0x40021000 + (mem_offset)))
α αΎαβαααααΆααβααβα α»α βααΎβαααβαααβα’αααβααααΆααΆαβααβα’αααΈβαα½αβαα βαααα»αβα αΆα α¬βααα’βααΆαβαααβαα βααΆαβααΆαβαα·αααααΆβααβααΆαβα α»ααααααβαααβα’αα»ααααΆαβααΈβαααααβα’αααΈ ααΎαααΆαα α»αααααα. αααααααααααΎαααΉαααααΎα RCC_APB1ENR αα·α RCC_APB2ENRα
α αΎαααΆαααα αα½αααΆααΆααααΈαααααα½ααααα αΌαααΆαααααααααααααα SPI2, IOPB (I/O Port B) αα·ααα»αααΆααααα½α (AFIO)α
#define _APB2ENR 0x18
#define _APB1ENR 0x1C
#define IOPBEN 0x0008
#define SPI2EN 0x4000
#define AFIOEN 0x0001
//Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ° B ΠΈ Π°Π»ΡΡ. ΡΡΠ½ΠΊΡΠΈΠΉ
_RCC_(_APB2ENR) |= IOPBEN | AFIOEN;
//Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ SPI2
_RCC_(_APB1ENR) |= SPI2EN;
αααααΌαα
α»ααααααα’αΆα
ααααΆα
ααααα·αααΎα’αααααΆαα±ααΆα αα·αα ααααΆααααα αααααΆααααααααΆαα DM634 ααΌα αααα DAI αα PB15, DCK αα PB13, LAT αα PB14α ααΎααααααααΆααααααα’αααααΎαααααΈ 5 ααα»ααα»αααααα ααααΆααααΈα
STM8 PWM
PWM αα ααΎ STM8
αα αααααααααα»αααΎααααααα αααααααα’αααααααα αααα»αααΆααααααα α α·αααααΆα§ααΆα ααα ααΎααααΈααααΆααΆαααααααααααα»αααΆααα½αα ααα½ααααααααααΈαααααα·αααααΆααααααΆαα αααααααΎαααααααΉααα·αααααα ααΌα αααααααα»αααΉααα·ααααα ααααΆαα½αααΉαα’αααααα·ααααααααΎααααααααΆααααααααΎααααααααααα STM8 ααΊααα’αααααΆαααα½ααΆααΈαααα ααΈαα½α αααα»αααΆααααααα α·αααΈαααΈααΆαα½α STM8S103 α αΎαααΈααΈαααΆαα·αααΆααααααΆαααα·αααΆαααααΆαααα ααΌα ααααα αΎαααΆααααα½αα±ααα’αΆα αα·αααααααααααααααααΆααα ααΎα’ααΈαααΊαα·αααΊαααα·ααα ααΎααααααααααααααΆαααΆαααααα
αααααααΈαααααΆααααααα
ααΆα‘α·ααΆ αα·α I/O
ααΆαααααΆαααΎα STM8 ααααΎαααΆααα ααααααα 2 ββMHz ααΆααααΌααααααααααΌαααααΆααα
HSI (High Speed ββββInternal) ααΆα‘α·ααΆ
αααααΆααΆα‘α·ααΆ HSI ααααΌαααΆαα
ααααααΈ 16 MHz RC oscillator ααΆααααα»α ααΆαα½αααΉαααΆααααα
αααααα’αΆα
ααααααααααα·ααΈααΆα (1 ααα 8) α ααΆααααΌαααΆαααααααα
αααα»ααααααΈαααα
ααααΆα‘α·ααΆ (CLK_CKDIVR) α
α
αααΆαα αα
αααα
αΆααααααΎα ααααα HSI RC αααααΆαααΆααααα
αα 8 ααααΌαααΆαααααΎαααΎαααΆαααααααΆααα»ααααααααΆααΆα‘α·ααΆα
ααΎαααααΎαα’αΆααααααΆαα α»αααααααα αααα»αααΆααΆααα·αααααα ααΆααα·αααααΆαα αααα»α refman α αΎαααΎαααΆααΆαα α»ααααααα αΆαααΆα αααααΌααααα’αΆαα
#define CLK_CKDIVR *(volatile uint8_t *)0x0050C6
CLK_CKDIVR &= ~(0x18);
αααααΆαααΎαααΉαααααΎαααΆα PWM αα·αααααΆαα LEDs ααΌααααα‘ααααΎα pinoutα
αααααααΈαααΆαααα αααΌα αα»αααΆαααΆα αααΎαααααΌαααΆαααα’αΆααα ααΎαααα»ααααα½αα α’αααΈααααα αααα»αααααααααΆαααααΊ "αα»αααΆααααα½α" ααΆααααΌαααΆαααααΌαααα "αααααααΎα" (αααααΎααα) - α’αααΈαα½αααΌα ααΆ Atmega fuses α α’αααα’αΆα ααααΆααααααΌαααααααααααα½αααααΆααααααα·ααΈααα»ααααααΆαα·αα αΆαααΆα αααααααα αα»αααΆαααααΈααααΌαααΆαααααΎα±ααααααααααααααΆααααΈααΆαα αΆααααααΎαα‘αΎααα·αα ααΆααΆααααααΆααααα½αααααΎ ST Visual Programmer (ααΆαααααΆαα½α Visual Develop) αααα’αΆα ααααΆααααααΌαααααΆαααααα pinout αααα αΆαααΆαααα»α CH1 αα·α CH2 ααααα§ααααααααααααααααααΌαααααΌαααΆαααΆαααα αααα»αααααααααΆαααα ααΆα αΆαααΆα ααααα»αααΆαααααα AFR1 αα·α AFR0 αααΈααα αααα»α STVP α αΎαααΈααΈαααααΉαααααααααααα CH1 αααααααα·ααΈαααααααααααΈααΈαααΈ PD4 αα PC5 αααααα
ααΌα αααα 6 pins ααΉαααααααααα LEDs: PC6, PC7 αα·α PC3 αααααΆαααααααα·ααΈαααααααααααααΌα PC5, PD3 αα·α PA3 αααααΆααααΎαααΈααΈαα
ααΆαααα‘αΎα I/O pins ααααααα½αα―ααα ααΎ STM8 ααΊααΆαααα αα·αα‘αΌααΈααααΆααα ααΎ STM32α
- ααααΆααααΈααΆαα α»αααααααα·ααα αα·αααααα Atmega DDR (ααΆαα α»αααααααα·ααα αα·αααααα): 1 = αα·ααααα;
- ααΆαα α»ααααααααααα»αααααΆααααΌα CR1 αα αααααααα·αααααααααααααααα»αααΆα (1) α¬ααΎααααα αΌα (0); αααααΆααααα»αααααΆαα LEDs αα αααααααΈαααΆαα½α cathodes αααα»ααα»αααΌααααα ααΈαααα
- ααΆααααα½ααα·αα·αααααΈααΈαα α»αααααα CR2 αα αααααααα·ααααααααααααααΏαααΆα‘α·ααΆ: 1 = 10 MHz
#define PA_DDR *(volatile uint8_t *)0x005002
#define PA_CR2 *(volatile uint8_t *)0x005004
#define PD_DDR *(volatile uint8_t *)0x005011
#define PD_CR2 *(volatile uint8_t *)0x005013
#define PC_DDR *(volatile uint8_t *)0x00500C
#define PC_CR2 *(volatile uint8_t *)0x00500E
PA_DDR = (1<<3); //output
PA_CR2 |= (1<<3); //fast
PD_DDR = (1<<3); //output
PD_CR2 |= (1<<3); //fast
PC_DDR = ((1<<3) | (1<<5) | (1<<6) | (1<<7)); //output
PC_CR2 |= ((1<<3) | (1<<5) | (1<<6) | (1<<7)); //fast
ααΆαααααα PWM
ααααΌαβααΎαβαααααβααΆαααα
- ααααααα PWM - αααααααααααααααα·ααΈαααααααααααΌα;
- αααα»αα‘αΎααα·ααααααααααααααααα·, AR - ααααααααα’αΆα αααα»αααΆααααααααααααααααα·ααααααααα·ααΈαααααααααααΉαααΆαα (ααααααααΈαα α);
- ααααΎαα αα α»ααααααααΆαααααΉαααα·ααΆααα UEV - ααααΉαααα·ααΆααααααααΎαα‘αΎααα αααααααααααα·ααΈαααααααααααΆαααΆααααα AR α
- ααααααΆαααααα·α αα PWM - ααααααΆαααααα·α αα PWM αααααΆααΏααααααΌαααΆαααα α ααΆ "αααααΆααΆαααααα·α αα " α
- α αΆαααα/ααααααααααααα - ααααααααααΆααααΆαα αΆαααα/αααααααα ααααααααα·ααΈαααααααααααΆαααΆαα ααΉαααααΎα’αααΈαα½α (αααα»αααααΈ PWM ααΆαααα αααΆααααααΆαα·ααααα);
- ααααααααα»αααΆαα»α - ααααααααααΆααααα»αααΆαα»αα ααααααααααααα αα·αα’αΆα ααααΆααααααΌαααΆααα ααααααααααααααα·ααΈααααααααααααα»αααΌα ααΎαα·αααΌα αααααα αααα PWM ααΉαααΌα α ααΌα ααααααααααααααΌαααααΈααααΌαααΆαααΆαααααα»αααα·ααααααα’αΆαααα α αΎαααΆαα αααα αααααααααααα·ααΈαααααααααααΆααααα α»ααααα ααααααΆαααΆαααααααααααααααΆ α αΎαααααΌαααΆααααααα‘αΎααα·αα
- αααααΉαααα ΠΈ αααααααααΉααααααΆα - ααΆααααααΉαααΆαααααααα αα·ααα αααααΆα ααΌα ααααΆααΉα Atmel's PWM ααΏα ΠΈ PWM ααααΆααααΆαααααΉαααααΌαα.
- OciREF, αα·ααααααααααααααααααΆααα - αααααΆαα·αααααααα ααΆααα·αα’αααΈααααααα αΆααα ααΎαααα»ααααααααΌαααααΆαα αααα»ααααα PWM α
ααΌα αααααΆααααααΆαααα½α ααα αΎαααΈ pinout α§αααααααααααααααααΆααΈαααΆααααααααΆα PWM - ααΈαα½ααα·αααΈααΈαα ααΆααααΈαααΊ 16-bit αααααΈαα½αααΆααα»αααΆαααααααααΆα αααΎα (ααΆαα·αααααΆα’αΆα ααΆααααΆαααΆααα‘αΎαααΎ αα·αα α»αααααα)α ααΎαααααΌαααΆαααΆααααΈαααΎααααΈααααΎααΆαααααΎαααααΆ ααΌα αααααααα»αααΆααααααα α α·αααα αΆααααααΎαααΆαα½αααΉαααΈααΈααααααΆααααα’ααααΆαααα ααΎααααΈαα»αα±ααααααΎααααααααα·αααΆααααα αααααα αααα αΆααααααΊααΆααΆααα·αααααΆα’αααΈαα»αααΆα PWM αααααααα·ααΈαααααααααααΆααα’αααα αααα»αααααα ααααΆαααΊαα αααα»αααααΌαα’αααΈαααααα·ααΈαααααααααααααΌα (17.5.7 PWM Mode) ααΌα ααααα’αααααααΌαααααα ααααααααα―αααΆαααααααααα
PWM αα ααΎ STM8 ααΆαα’αααααααααααααααΆααααΆα PWM αα ααΎ Atmega:
αααααΉαααααααα PWM
ααΆαααααααα
ααΆααααααααααααΈααΈααΆαα‘αΎαααΎ
ααΆαααΆααααΈααΆαα‘αΎαααΎααΊααααα ααααα·αααΎαααΈα DIR αα
αααα»αααΆαα
α»αααααα TIM_CR1 ααααΌαααΆααααα’αΆα
α§ααΆα ααα:
α§ααΆα αααααααΎαααα PWM ααααΌαα αααααΆααα PWM OCiREF ααααΌαααΆααααααΆααααααααΆαααΆ TIM1_CNT < TIM1_CCRi α ααΎαα·αααΌα
ααααααααΆααααΌαααΆαααααα·αααΆαα ααααα·αααΎααααααααααααααα
αααα»αααΆαα
α»αααααα TIM1_CCRi ααααΆαααααα autoload (ααΆαα
α»αααααα TIM1_ARR) ααααααααΆ OCiREF ααΉααααα·ααα
ααα 1α ααααα·αααΎαααααααααααααααΊ 0 ααα OCiREF ααααΌαααΆααααααΆαα
ααΌαααα...
αααααα·ααΈααααααααα STM8 α’αα‘α»αααα ααααΎαα
αα
α»ααααααααΆαααααΉαααα·ααΆααα αα·αα·αααααΆαα»ααα·α αααααααααααααα αΎαααΆααααααααΆαααααααααΎααααααΆαααα αααααα·ααΈααααααααααααα Atmega α
αΆααααααΎαααααΌα α αΎααααααΆαααααααααααα αααααα compare value == 0
ααααααααΊααΆαααα»α αααααααΌααααααααααΆαααααα·ααΈααΆαα½α (α§ααΆα ααα αααααΆαααααα
αααΆααααααα·ααααΆααΆααααααα·ααΈ)α
ααΌα
ααααα’αααΈαααααΎαα
ααααααΎα 8-bit PWM (AR == 255
) ααΆααααΈααΆααααααααΌα αααααΉαααΆααααααααα αααααΆαα’αααΌαααααΎαααααΌαααΆαααααΆαααα
αααααααΈαααα cathodes PWM αα½ααααααα
αα 0 (LED on) αα αΌαααα ααααααααααααα αα·α 1 αααααΆααααΈα
ααΎαααΆαα’αΆααααααα½α α αΎα αααα PWMααΌα ααααααΎαααααΎαααΆαα α»αααααααααααααΌαααΆααααααααα·ααΈαααααααααααΈααΈααααααααααααααα»αααααα ααααΆααααααΆααααααΆααα (18.6.8 - TIMx_CCMR1)α
110α αααα PWM ααααΌα β αα
αααααΆααααΈααΆααααααααΌα ααα»αααα·αααΈαα½αααααΎαααΆαααααααααα TIMx_CNT < TIMx_CCR1 α ααΎαα·αααΌα
αααααα ααα»αααα·αααΈαα½αααΊα’αααααα [ααααααααααα
αααα»αα―αααΆαααΆαααΆαα
αααααα»αααΈαααααα·ααΈααααααααα 1] 111α αααα PWM ααΈααΈα β αα
αααααΆααααΈααΆααα
ααααΌα ααΆαααααΈαα½αααΊα’αααααααααααααα TIMx_CNT < TIMx_CCR1 α ααΎαα·αααΌα
αααααα ααα»αααα·αααΈαα½αααΊαααααα
αααααΆα LEDs ααααΌαααΆαααααΆαααα MK ααα cathodes ααααααΈααΈαααΆαααααΉαααΎα (ααΈαα½αααααα ααα»ααααααΎααα·αααΆααααΉααα α‘αΎα)α
Bit 3 OC1PEα ααΎαααααΎαααΆα pin 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;
α’αααΈααααα αααααΊααααΌαααΎαααΆαααααα·ααααΆα αα·ααααααα·ααΈαααααααααααΈααΈαααααααα½αα―αα αααα αΆααΈαα½αααααΌαααΆααααααααΆααααααΆαα α»αααααα α αΆαααα/αααααααα α’αα»ααααΆαα ααΆαβααΈα ααΈβααα»αααα·αβαααβααΆααααΆαβααΆααααβαα½αααΆβαααβαα·αβαααΈααααααΈα αα ααΈαααααΎαααα’αΆα αααααΆααΆα’αΆα ααααΎαα ααΆαααΎααααΈααααΆααααααΌααααααΆααααΆααααΌααααααααΆ, i.e. ααΆαααααΆααα ααΆα’αΆα ααααΎαααα PWM 1α ααΎααααααα
#define TIM2_CCER1 *(volatile uint8_t *)0x00530A
#define TIM2_CCER2 *(volatile uint8_t *)0x00530B
#define CC1E (1<<0) // CCER1
#define CC2E (1<<4) // CCER1
#define CC3E (1<<0) // CCER2
TIM2_CCER1 = (CC1E | CC2E);
TIM2_CCER2 = CC3E;
α αΎαα α»αααααα ααΎαα αΆααααααΎααααααα·ααΈααααααααααα αααα»αααΆαα α»αααααα TIMx_CR1α
#define TIM2_CR1 *(volatile uint8_t *)0x005300
TIM2_CR1 |= 1;
α αΌαααΎαααααα analogue ααΆαααααα AnalogWrite() αααααΉαααααααααααααΆααααααααα αααααα·ααΈααααααααααααααΆααααΆαααααααααα αααααΈαααααααααΌαααΆαααααΆαααα α αΆαααα/ααααααααααΆαα α»ααααααααΆαααΈααααα½αααΆαααααΆααααΆαααααΈαα½ααα ααααΆααααΆα 8 αααΈααα αααα»α TIM2_CCRxL αα·αααααΆααααααααα αααα»α TIM2_CCRxH α αααααΆαααΎαααΆααααααΎα PWM 8 αααΈα ααΆαααααααααΆααα αΎααααα»αααΆαααααααααααΈαααααα·αααΌαααααΆααα
#define TIM2_CCR1L *(volatile uint8_t *)0x005312
#define TIM2_CCR2L *(volatile uint8_t *)0x005314
#define TIM2_CCR3L *(volatile uint8_t *)0x005316
void setRGBled(uint8_t r, uint8_t g, uint8_t b)
{
TIM2_CCR1L = r;
TIM2_CCR2L = g;
TIM2_CCR3L = b;
}
α’αααα’αΆααααααα α·ααααα»αααΆααααΉααααααΆααααΎαααΆααΎαααΆα PWM αααααααααα·α αα·αα’αΆα ααα·αααΆααααααααΆα 100% (αα αααααα’αα·ααααΆ 255 αααααΆααααΌαααΆαααΆαααααα αααΆααααααΆααααααααααααααααααΆαα½α)α αααααΆαα LED ααααα·αααΆααααα αΆα’αααΈαα α αΎαα’αααα’αΆααααααα α·ααααα»αααΆααα’αΆα ααΆαααΈαααααα½ααα»αααΆααΆαα
PWM αα ααΎαααααα·ααΈαααααααααααΈααΈαααααΎαααΆα ααΎααααααα ααΈαα½αα
αααααα·ααΈαααααααααααΈαα½αααΆααααΈαααΌα ααααΆαα αααα»αααΆαα α»ααααααααΌα ααααΆ (ααΆααααΆααααααΆαααΈαααΆαααααααααα αα "ααααα»α" αα αααα»ααααααα·ααΈαααααααααααΈααΈαααΊααααΌαααΆαααααΎααααΆαααααΆαααααααα αααα»αααΈαα½ααααααΆααααααααααααα·ααααααααΆααα’αα)α ααΌα ααααααΆαααααααααΆααα αΎααααα»αααΆααααααααα’αΆααααααΆαααααΆαα α»ααααααααΌα ααααΆαα αααα»αααΆααΆααα·αααααα αα·αα ααααααΌαα ααΆααΆααααααΎαααΆαα, ααααΆααααααΌααααααααααΆααααα ααααααααα, αααααΆααα ... αααααα·ααΈαααααααααααααΌαα ααααα½αααΆααα·ααααααΆαααααΈααα ααα»ααααααααα 16 αααΈααα·αααααΆαααα αααα»αααΆαα α»ααααααααΈα Prescaler αααααα ΠΈ ααΆα. ααΎαααααΎα’αααΈααααααααΆα α αΎα... αααααα·ααΈαααααααααααααΌααα·αααααΎαααΆαααα ααΎβααΆαβααΏαβα’αααΈβααΎαα‘αΎα?
αααα αΆα’αΆα αααααααΆαααΆααααααααΆααααααΎααααααααΆααααΌαα’αααΈαααααΈαααα½ααα·αα·ααααααααααα·ααΈαααααααααααΈ 1 αααααΎαααααααααααααααααααααα·ααΈαααααααααααΈααΈααα·αααΆαα ααΉαααΆα 17.7.30 ααΆαα α»ααααααααααα (TIM1_BKR)αααααΆαααααααααααΆααααΈαααα:
ααΎαααααΎαααΆαααααααααααΆαα
#define TIM1_BKR *(volatile uint8_t *)0x00526D
TIM1_BKR = (1<<7);
αααα αΎαααΆααΆααα’αααααααΆααααααΆααααΆα₯α‘αΌαααααααααΌα
STM8 Multiplex
αα α»αα»ααα ααΎ STM8
ααααααααααΆαααΌα
ααΈααΈααΊααΎααααΈααααΆααα’αααΌα RGB α
ααα½αααααΆαααΈαα
ααΉαα§ααααααααααααααααΈααΈααα
αααα»ααααα PWM α αΎαααααΎα±αααα½αααΆαααα αΆαααααα»ααααααΆα ααΆααααΌαααΆαααα’ααααΎααααααα·ααα LED multiplexing αααααΊααΆααααα·αααΎα’αααααΎα αα·ααα·α LEDs αααΆαααΏα ααΆααΉαα αΆααααΈααΌα
ααΆαα½αααΎαααΆαα½αααααΎαααΆαα·α
αα
(ααΆαα’αααααααααα
αααα»αα·ααααα·α
αααΆαααααΆααααααΎααααααΎαααΎα) α αααα»αααααΆααααααΎ
αααα½ααααααααΆαααΆαααΆαααΎααα ααΌα αααα
- ααααΆαα anode αα RGB LED ααααΌα;
- ααααααΊααΆαααααΌααααααΆα αΆαααΆα ααα cathodes;
- αααα αΆααα αΌααααα α»ααααα αααααααα PWM;
- ααααΆαα anode αα LED RGB ααΈααΈα;
- ααααααΊααΆ...
α’ααα αΉαααα ααΆααΆααα·αααΆαααααααΆααααααα·ααααα·ααΆααααααααααα’αΆαααΆααααΌαααΆαααΆαααΆαααΆ anode ααααΌαααΆαααααΆααα αΎα LED ααααΌαααΆα "αααααα" αααα»αααααααα½αα αααα αΎαα¬ααααΎαααα αααα»αααααΈααΆααααα ααΎαααααΌααααααααΌααααααΉααααα αααααααααΆααΈααα»αααα·ααααααααα·ααΈαααααααααααΈααΈα ααααΆααααααΌααα½αααΆαα ααα UEV ααααΌαααΆααα ααα α αΎααααα»αααααααα½αααααΆααααααΌα RGB LED αααααααααα αα α»ααααααα
αααααΆαααΆαααααΌα LED ααΊαααααααααααααααα· ααΎαααααΌααααααΎα "α’αααα αα αΆαααΈααα’αΌ" αααα§ααααααααααααΆαααΆαααααΆαααΉαααα½αααΆααα·ααααααα αααααΊααΆα’αΆααααΆαααααα½αα
uint8_t colors[8][3];
ααΎααααΈααααΆααααααΌαααααα LED ααΆααααΆαααα½αααΆααΉααααααααααΆααααΎααααΈαααααααααααααααααΌαααΆααα αααα»αα’αΆαααααα α αΎαα’αααααΉαααα½ααα»αααααΌαα ααααα ααα½α LED ααααα
uint8_t cnt;
Demux
αααααΆααααΆααα α»αα»αααααΉαααααΌα ααΎαααααΌαααΆα α
αα ααααααααααΆαα CD74HC238 demultiplexer α Demultiplexer - αααααααΈααααα’αα»ααααααααα·ααααα·αααα
αααα»ααααααααΉα <<
. ααΆαααααααα»ααααα
αΌαααΈ (αααΈα 0, 1 αα·α 2) ααΎαααααααααααΈαααΈα X α αΎαααΆααΆαααααΎααα ααΆααααΎα±αααααααααααααααα (1<<X
) ααΆαα»αααα
αΌαααααα
ααααααααααααΈαααααΌαααΆαααααΎααΎααααΈααααΎααΆαααααααΆαααΆααα
ααΆααΆααααΌαα ααΎαααααΌαααΆααααααααΈαααααα·αααααΉαααααΆαααααααα
ααα½ααααα»ααααααΆααααΆαααααα microcontroller ααα»ααααααα ααα»αααααααααααΆαααα»ααααα·ααΆαααααα - ααΎααααΈαα»αα±ααααΎα LEDs α
αααΎαααΆαααΆααααα’αΆα
ααααΎααΆααααα
ααααα αα·ααα·αααα MK α αααααααΈααααααΆαααααααα½αααΆαααα½αααΆαα α αΎααα½ααααααΆαα»ααααα»αααΌααΆααααααΆααα
ααααααααα’αααααΆαα·α
αα
α
CD74HC238 ααααααΎαααΉαααα½ααα»αααααΌααααα»αααΆαααααααααααααα»ααα
anode αα LED αααα
ααααΆαα αα
αααα»α multiplex αααααα ααΆααΉαααααααααααααα»ααα
αα½αααααΆαααα P-MOSFET ααα»αααααα
αααα»αααΆααααα αΆαααα ααΆα’αΆα
ααααΎαα
ααΆααααααααΆαα αααααΆααα ααΆααΌα 20 mA αααααΎαααααΆα ββββ ααΆαααΆααααααα’αα·ααααΆααΆα
αααΆα αα
αααα»αα―αααΆααα·ααααααα ααΈ
H = ααααα·αααα»αααααα, L = ααααα·αααααααα»αααΆα, X β αα·αααααα
ααΎαααααΆαα E2 αα·α E1 αα ααΉαααΈ E3, A0, A1 αα·α A3 ααΎααααΈαααα»α PD5, PC3, PC4 αα·α PC5 αα STM8 α αααααΆαααΆααΆαααΆαααΎααΆαααΆααααααα·αααΆα αα·αααααα ααΎαααααααα ααΆαααααααααααα»αααΆαααααααΆαααα»ααα»αα
PWM
PWM αα ααΎαααααα·ααΈαααααααααααΈααΈαααααΌαααΆαααααααα ααΆααααααααααΆαααααααΌα ααααΆααΉαααΏααα»αααααααααΆαααΆααα»αααααΆααΈαα
ααααΌαααΎαααααΌαααΎαααΆαααααΆααα ααΎ ααααΎαα αα α»ααααααααΆαααααΉαααα·ααΆααα (UEV) αααααΉαα α αα»αααΆαααααα·αααΎα LED αααααα αααααααΌαααΆαααααΎαααααΆαααααΆααααααΌααααΈα ααααΎα±ααααΆααααααααΆαααααΆα ααΎαααααΎαααΆα αα αααα»αααΆαα α»αααααααααααΆααααααααααΆαα
ααααΆαααΆαα
α»αααααα
#define TIM2_IER *(volatile uint8_t *)0x005303
//enable interrupt
TIM2_IER = 1;
ααΆααα»αααααΆααΈααΈαααΊααΆαααααα ααΉαααΆαα»ααΌαααααΆααα»αααΌα ααΆ ααααα - αααααΊαααΆαααΆαααΈααα diodes α αααα»αααααΈααααααΎα ααΆα’αΆα ααα α‘αΎααααααΆαααααΆααα·ααααααΆαααααα·ααΈαααααααααααααααααΆαα±ααααΆαααΆαααααΆααα ααΎ UEV ααααααΌα α αΎαα§ααααααααααααΆαααΆαααααΆααα·αααΆααααααααΆααΎααααΈααααΌα LED αα»αααααααααα·ααΈαααααααααα αΆααααααΎααααααα’αααΈαα½ααα ααΆαααααα»ααααααα ααΎααααΈααααα»ααααααααΆααααΉααααα αΆααα α’αααααΉαααααΌαααΆαααααα αααΆααααααα·ααααΆ (0 = αααααΊα’αα·ααααΆ 255 = ααααΆαα’αααΈααααΊαα) α αΎααααααΆααααααααααααΆαααααα·α αα ααααΆααα ααΆαααααα ααααΌαααααΆααααΆαααααΆααααΈ UEV α’αααΌα LED ααααααΆαααααα»ααααααΆαααααα PWM αα½αα
ααΆαααααΆααααααΌαααΆααααΌαα
//set polarity
TIM2_CCER1 |= (CC1P | CC2P);
TIM2_CCER2 |= CC3P;
αααααΆαααΆαααααα r, g αα·α b ααα 255 α αΎααα»αααααα ααΆαααααα αααΆααα αααααααΎααΆα
ααααΆα
ααααΉαααΆαααααΆαααααΆαααΊααΆαα αααααααΆααααααααΆααααΆαααα½α αααααααΈααααααααΎαααΆααααααα·ααΈα αααα α αΎαα α αα»αααΆαααΆααααα αα½αα ααα½αα ααΆαααααΆαααΎαα‘αΎααααααΆαααα₯αααα·ααααΆααααα α¬ααΆααααα»α αα½αααΆαααααααα·ααΈααααααααααααααα
αα
ααααααααΎααααααΎαααααααααααΌααα
αααα»α ST Visual Develop ααααααααΈααΎ main.c
ααΎαααΆαααα½ααααα’α½α
αα½ααααααΆαα―αααΆαα’αΆααααααΆαα stm8_interrupt_vector.c
αα½ααααα
αΌααααααααααααααααα·αα
αααα»αααααααα αα
αααα»αα―αααΆαααα αα»αααΆααα½αααααΌαααΆαααααααα
α±ααααΆαααααΆαααΈαα½αα NonHandledInterrupt
. ααΎαααααΌαα
ααα»αααΆαααααααΎααα
ααΉαααΆαααααΆααααα
ααααΆαα
αααααΉααα·ααααααααΆαααΆααΆαααααα·α αααααααΆα αααααΎαααααΎααα½ααααααΎαααααΌαααΆαα
13 TIM2 α’αΆααααα/ααΎα
14 TIM2 α
αΆαααα/αααααααα
ααΎαααααΌαααΆαααααΆααααααΌα LED αα UEV ααΌα ααααααΎαααααΌαααΆαααααΆα #13 α
ααΌα
ααααα αΎαααΆααααΌααα
αααα»αα―αααΆα stm8_interrupt_vector.c
ααααΆααααααΌααααααααααΆαααΎααααα»αααΆααααααα½ααα»αααααΌαα
ααααααΆαααααΆαααα 13 (IRQ13) αα
ααΆααααα’αααααααΆααα
{0x82, TIM2_Overflow}, /* irq13 */
ααΈααΈα ααΎαβααΉαβααααΌαβαααααΎαβα―αααΆα main.h
ααΆαα½αααΉαααααΉαααΆαααΌα
ααΆααααααα
#ifndef __MAIN_H
#define __MAIN_H
@far @interrupt void TIM2_Overflow (void);
#endif
α αΎαα
α»αααααα ααααααα»αααΆαααααα
αααα»αααααα’αααα main.c
:
@far @interrupt void TIM2_Overflow (void)
{
PD_ODR &= ~(1<<5); // Π²ΡΡΡΠ±Π°Π΅ΠΌ Π΄Π΅ΠΌΡΠ»ΡΡΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ
PC_ODR = (cnt<<3); // Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π² Π΄Π΅ΠΌΡΠ»ΡΡΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
PD_ODR |= (1<<5); // Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π΄Π΅ΠΌΡΠ»ΡΡΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ
TIM2_SR1 = 0; // ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌ ΡΠ»Π°Π³ Update Interrupt Pending
cnt++;
cnt &= 7; // Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΡΡΠ΅ΡΡΠΈΠΊ LED
TIM2_CCR1L = ~colors[cnt][0]; // ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π² Π±ΡΡΠ΅Ρ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
TIM2_CCR2L = ~colors[cnt][1]; // Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΊΠ»Π° Π¨ΠΠ
TIM2_CCR3L = ~colors[cnt][2]; //
return;
}
α’αααΈααααα
αααααΊααΎααααΈααΎαααΆαααααΆαα αααααααΌαααΆαααααΎαααααααΎααΆααααααααΆ assembler rim
- α’αααααΉαααααΌαααααΎαααΆαα
αααα»α
//enable interrupts
_asm("rim");
ααΆααααααααΆα’αααααα‘αΎααα½ααααααΊ sim
- αα·αααΆαααααΆαα αα½αααααααΌααααα·αααααααααααααααααααΈαααα»αααααΌαααΆαααααααα
"α’αααα
αα
αΆαααΈααα’αΌ" ααΌα
ααααααΆαααααΆααααααΎαα‘αΎααα
ααααα»ααα·αααααΎα±ααααΌα
α’αΆαααααααα
αααααΌαααΆααα’αα -
ααααα·αααΎαααΆαα αα ααΆααααΆαααααΆααααΆαααααααΆα’ααααααααααΆααααααααα ααααααα»ααα·αααΆααααααααΆαααα₯αααααααααααα αααα»αααΉαααΈαααΆααααα»αααΆαααα½αααΆαααα·ααααα αα·αααΆαααααααααΆαα αααα»αααΉαααααΆααΆαααααΎαααααααααΆα
ααααα: www.habr.com