Đ
áᏠá STM32 (á°ááŤá áááá˝) áĽá á STM8 áááŁá áŞáŤáá˝ áá ááĽá ááŽáááśá˝ ááá ᣠáá á áľááá á°ááŁáŤáľá ááááłáľ á¨ááἠááá˝á áĽáá´áľ áĽáá°áá áá á áłáŤá˝áááᢠááá á¨ááłáŤ ááŽáááśá˝ ááááłá¸á á¤áá˘á˛áá˝ á¨á°á°áĄ áá¸á ᣠá á¨áá°á áá á áĽáá áŤá¸ááá ᣠááá á áááá ááááľ áłá˘ áááááŤáá˝á áá áá á ááĽáá˘
á˝áá áĽáá°áá áľáá áá á°ááᣠáľááá ááážáľ á˛áŁá áááąá áĽá¨á áŤá áááĄ-
á¨áááááľ ááľá°áŁá áŤáĄ áĽá áááá˛áľ á áá°áááᣠá á¤áááľáŽáááľ ááľáĽ áĽáá áĽáááľ áĽááłáá á ááľááľááᣠá˝áá áĽáá° áĽá áá á áá°áŽá˝ á¨áłá°á ááᢠáĽáá°áá á¨áááľ á ááľ á ááľ áŤá´á áĽáá° á˘áá áłáłá ááĽáŹ áá áᢠá ááľ á°á áááááá áşá á¨ááἠááá˝á ááá ἠá áľá᪠áĽááłááá á˘ááá¨áᣠá áááá¨áĽ áá á ááłááľ á¨áŽáľ áááĽáŤáŽá˝á á áááá áĽá á áááľ áĽá á ááŁá á፠áááľá°á áá ááŤáá˝ á ááá á áĽá áá á áá áá áá áá˘
á¨áá á˝áá áľáŠá¨áľ á¨áá¨á ááá˝ áĽáá á¨ááá˝ á áá°ááᣠáľááá áŽáą á áŁá á¨á°áááá áĽá áĽá áá ááŤáá˝ áááá áá˝ááᢠááŽáááśáš áĽáŤáłá¸á á áŁá ááá áá¸á, ááá áĽááłá á¨á á˛áľ áşá áá áááááŞáŤ áá ááá°ááá á°áľáá áá¸á.
á˝áá á°ááłáłá á áá á¨áľáá áá ááłáá፠ááľáĽ áááĽáá á¨áá¨áłáá á°á áĽáá°áá¨áłá á°áľá á á°ááááá˘
STM32
16 LEDs á¨DM634 áĽá SPI áá
á°ááŤá ááá (STM32F103C8T6) áĽá DM634 LED áá á áá áá á ááľá°á ááŽáááľá˘ á áłáł ááá˝ áĽáá á¨ážááŠáŁ á¨á¤áľá˛á¤á á áጠáá°áŚá˝ áá áĽáááááá áĽá SPIá áĽááá áŤááá˘
DM634
á¨áłááá áşá á¨16 x 16-á˘áľ PWM áá¤áśá˝ ááᣠá á°áá°ááľ ááłá°á áá˝ááᢠááŁáą áŁá 12-á˘áľ áá´á á¨á áá ááľáĽ ááŽáááľ ááłááá
á ááŤáš áłááá áľááááŁ
á¨á˛áá á˛á˛ áááŽá˝ (áááľ ááłá˝)
ááá / áááľ-ááłá˝ áá ááľ - ááá˝áľ; á¨ááŞá áá áłá ááá; á áá áááł ááľáĽ á¨ááŹáľ áá á¨á°ááá áá¤áľ - LEDs á¨á á˝á¨ááŤáŞá áá á áŤáśáľ á°áŤááááᢠá á¤áááľáŞá áá á áĽááἠááá "áááľ ááłá˝" á¨áá (áááľ á¨ááłá˝ ááľááá), ááá áá á ááἠááá˝ ááľáĽ áĽáá˛á ááááą áľáŤá á ááłá˝ áááł ááľáĽ ááá¤áśá˝ áĽá áá á°áááˇá.
á¨áá¤áľ á¨á ááá áá ááááááľ á REXT áĽá GND ááŤá¨á áŤá á¨áá áá¨áá¨áŤáá˝
á¨áá¤áśášá ááľáŁá á°ááá á áááŁá á¨á REXT áá áĽá ááŹáľ ááŤá¨á á¨ááŁááť á°á¨ááŤá á°ááá ᣠá áá¨á áá¨ááą áá˝ 9 áá áŤááá ááŤá áááá¨áąá˘ á Რá¤á 634 ááľáĽáŁ á á ááá áľáááąá á áááááľ áá áá á°ááá á áśááľáá áááŁá áá áá˝ááá˘ááá á áá áĽáŠá ááľ); á áá á˝áá ááľáĽ á áááá á áááŁá, áĽáá 2.2 - 3 kOhm resistor á ááŤáá.
áşáá áĽáá´áľ áááŁá á áĽáá°ááťá ááá¨áłáľ á¨ááŁáŞáŤáá á áááá˝ ááá፠áĽáááá¨áľáĄ-
á áᣠáĽáá ááᣠáťááá áĽááááá á ááá ááĽáŠá˘ áá áá ááá°ááá á˝áá á áá ᾠᣠá¨ááá áá¨áąáľ áá˝áá ᣠáá áá ááááľ á á - á ááἠáá ááľáĽ á á°ááŁáŤá á áἠá¨ááá TLC5940 áá áŤáá áááááľ áĽáá´áľ áĽáá°áááá ááá¨áľ á˘
⌠áááĽá áá° ááłáŞáŤá áááľááŁáľ áśáľáľ áá áĽáť áŤáľááááᢠáĽá¨á¨áᨠáŤáá ᨠSCLK ááááľ áááĄá ᨠSIN áá áá° ááľáŁá ááááá˘áŤ áááá áá. ááá áá¨ááá˝ á¨á°áŤá á ááᣠá áá á¨áá°á XLAT á˛ááá á á°á¨áłáłá á¨á°ááááá áá¨á á ááľáĽ ááááŚá˝ ááľáĽ ááááᢠá¨ááľáĽ ááááŚá˝ á XLAT ááááľ á°á¨á á¨ááá°ááą á áŽá˝ áá¸áᢠááá áá¨ááá˝ ááááŞáŤ MSB áá°ááááá˘
áľáŤá - áááááŞáŤ / áááááŞáŤ / áááááŞáŤ.
á¨á áŤá áŤá ᨠpulse á᪠á áá áá
MSB ááááŞáŤ - á áŁá á áľáááá (á á፠á áŠá) áľáá˝ áá°ááľá˘
áá° á°ááľ ááἠ- áááĽá á á
á°á á°á¨á°á ááľá°ááá (á˘áľ á á˘áľ)á˘
áá áá¨á፠áĽááá áá ááşááľ á á°ááľ ááľáĽ áááá áĽá á á°ááŤáŠ ááááśá˝ áá°á¨ááá ᣠáľáááá ááá¨áłáľ áĽáŤá´á áĽáá áłááá˘
á ááľá°á á¨áľáá ááľ ááŽááŤáᨠLED ááá á áá á¨áą á¨áá¨á ááááá˘áŤ ááᢠ"Shift" (shift) á áľá - á ááŁáŞáŤá ááľáĽ áŤáá á¨ááἠá˘áľ-á˘áľ áĽáá áľáá´: áĽáŤááłááą á á˛áľ áá° ááľáĽ á¨á°ááá á°áá°ááąá á áá á¨ááľ áááľ ááááᢠá áá¨áá áá ᾠᨠLEDs áĽáá áľááá á¨áá áĽáá áľááá á¨áá ááá á°á áá¨áľ áľáááááá áá°áą á¨ááŤáá°á á¨á°áŤá°áá˝ á á°áአá ááá፠ááááŚá˝ ááľáĽ ááá˘áá¨ááŤ) á˘áľáľ á á°áááá á á°á á°á¨á°á á¨áá°ááá áľ á¨á ááŁá áľ ááá ááᢠááá ááá ááá á˛áá, áá¨ááŤá áá¨ááłá áĽá á˘áľáľ áá° áĽáŤ áááłá, á¨áá°ááá áľáĽáľáĽ áá°áŤáá. áá áá¨á፠ááááᎠá°ááŠááśá˝ á á°ááľ ááľáĽ áá áá áĽáá˛á ááááąá áĽááĽá áľ áŤáłáŤá ᣠá ááááá áĽáá¨áľ áĽá á áá ááááá˘
áľááá , á¨ááἠááľá°ááá áá° DM634 áĽáá°áá¨á°áá áá¨áááá: DAI ááĽááľ á áŠá ᨠLED á¨áá°á á˘áľ áá áá áŤáááĽáŠ, DCK áá° áá áĽá áá° áłá˝ áááľáą; ᨠDAI áá¤áľá áá° ááŁáŠ á˘áľ áĽá´áľ áŤáááĽáŠ, DCK áááľáą; áĽá ááá á˘áľáľ áĽáľáŞá°ááá áľá¨áľá°áááˇá), á¨á፠á áá LAT áĽáááľá°ááá. áá á áĽá áá ፠áá˝ááá˘áľ áŁáá), ááá áá ááá á á°áᨠááአá¨á°áłá ᨠSPI á áááá˝á áá áá á¨á°áťá áá, ááááŤáąá á áĽá STM32 áá á áááľ á ááá˝ ááááŁá.
á°ááŤá áłáĽááľ STM32F103
ááá˘áŤáĄ ᨠSTM32 á°ááŁáŁáŞáá˝ á¨á áľáá328 á áŁá á¨á°ááłá°áĄ áá¸áᢠá á°ááłáłá áá á ááá áá ᣠááááŤáľ ááá áááľ ááťáá á á
áᏠáá á°á°ááááá ᣠáĽá á¨á°ááľ áľáááá˝ á¨ááľáĽ ááá 8 áá¸á ááᢠáĽáá° áĽáľá ááᣠá¨á¤áľá˛á¤á ááŽááŤááŽá˝ áşáá áá° "á¨á°á°á" 72 áá¸á á¨ááŤáᣠáŽáľ áá áĽá áĽá á¨áááá¸á á¨ááá á áá˛á˘áá˝ á°áŤá˛áá˝ á áááť áá°áľ ááľáĽ á áŤáľá°ááłá ᣠáľááá
á°ááľ ááľá¨á á áŤáľááááá (áá
á°ááľáĄ áłááá STM32F103C8T6 áşá á áĽá áá áá á°áááᣠááĽáą áááľ á áá á°ááśá˝ á ááĄ
áłáł áá˝ ááááᎠáááŁá áŞáŤ STM32F103x8 áĽá STM32F103xB;á¨ááŁááť áááŞáŤ áá á ááá STM32F103 ááľáá áĽá ááá˝áá˘
á ááἠáá ááľáĽáŁ á¨áá¨á°ááľá áááá áá˝áááĄ-
- Pinouts - áşá pinouts - áĽá áĽáŤáłá˝á á°ááłáá˝á áááĽáŤáľ á¨áá°áá;
- á¨áá á°á¨ áľááľáł áŤááł - áá°áá°á áşá á¨ááľáłááť áŤááł. á¨ááŁááť áááŞáŤá áá á ááá ááľáá áŤááł á áá, á áĽá áá á¨áá ááááŚá˝á áá á áłá.
- á¨áá ááşáá˝ á°áá á¨áĽ - áá áĽá á ááŤá á¨áá á°ááŁáŤáľá ááááá; á á áááá¨áĽ áá ááá "á°ááŤá ááá" á¨áá áĽá á°ááŁáŽáťá¸á áááá áá á¨á áá ááš áľááá˝á ááááľ áá˝ááᢠáľááá ᣠáá˛áŤáá áĽá áá ááááľá ááá á áľááá áá á ááľá á áĽáá˝á áĽááá¨ááááĄ-
ááłá°á˘áŤ: á¨á áááá¨áĄ á áľáá áá áľá
á°áľ áá á, á á áľá°áŤá¨áśáš ááľáĽ áłááˇá, ááá
á á áá°áááá. áľáá á°á°ááˇá, ááá áá áá
áľáá
ááľ áá - áá¨áá á¨áłáł ááá˝ áłááá ááá°á˝ á¨á°áťá áá.
á¨ááἠáá
áá áĽááľááá°ááá, á¨ááŁááť áááŞáŤáá áĽáá¨áá°ááá, á¨á áá á áá á¨ááá ááá áĽáąá áĽáť áá.
á¨á á°áŤá áá°áľáĄ á¨áá°á á ááĽá áľ/áá
ááľ áá ááááᣠSPI á áŤáá
áŠáŁ á áľááááášá áááá˝ áŤáĽáŠá˘
á¨áá¤áľ áá ááľ
á Atmega328 ááᣠI/O áĽá á á áŁá ááá ááᣠááá á áá ᨠSTM32 á ááŤáŽá˝ áĽááľ á፠á¨ááŤáᣠá¨ááááᢠá áá áĽá áá°áá°ááŤáá˝ áĽáť áĽáááááá ᣠáá á áŤáľ á ááŤáŽá˝á á á-
á¨áá ááá¨á áá
ááľ ááᾠᣠá¨áá-ááľáľ áá
áᾠᣠá¨áááľ-ááľ á ááŤá ᣠáááľ-ááá°áť á ááŤá
"áá-áá" (ááááľ) - á¨á ááąáŞá á¨á°ááá°á áá
áᾠᣠáá á¨áá°á ááá áá
á°á ááá áá˝ááᢠááá áá á "áááľ ááłá˝" áááłá
á¨áá¤áľ áá
á / áá°áĽ ááá¤áľ á˛áá°áĽáĄ/ á¨áá¤áľ ááľ á˛áááĄ/- áááľ á¨ááłá˝ áááłáĄ- â0â á áá¤áľ ááááá˘áŤ áááἠááľáĽ N-MOSá áŤáľá˝ááᣠâ1â á áá¤áľ ááááá˘áŤ ááľáĽ áá°áĽ á Hi-Z ááľ (á. -MOS á áááá) / - á¨áá-áá áááł: "0" á áá¤áľ ááááá˘áŤ ááľáĽ N-MOS á áŤáááłá
á°áá, "1" á áá¤áľ áááἠááľáĽ P-MOS á áŤáááłá
á°áá.
ááá áááľ á¨ááłá˝ ááŠááľ (áááľ á¨ááłá˝ ááľááá) ᨠ"áá-ááľ" (ááááľ) á ááááŞáŤá áá ááľáĽ ᨠHIGH áááłá ááá°áľ áĽáá°ááá˝á áá-á ááľ ááá áá° áá ááľ ááááá˘áŤ á˛áá áá° á¨áá°á á¨áá¨áá¨áŤ áááł áááłá (á¨áá°á áá¨áá¨áŤ, á°áá- Z). ááŽá á áá˝áá áľ áá, á áááąá áááłáá˝ ááľáĽ áŤáá áá á ááá áĽá á á¤áááľáŞá á°ááłáłá áá.
á á°ááá°á á¨áá¤áľ áááł, áá á¨áá¤áľ ááááĄá áááśá˝ á ááá áá°á¨áááá. á "á ááŤá" ááľáĽ á á°ááá á°ááłá ááĽáĽá áľá áá (9.1.4 áááá¨áą):
á¨áá°áĽ á˘áľ áĽáá° á°ááá á°ááŁá áá
ááľ á¨á°ááᨠá¨áá¤áľ áááᥠá°á°áááá áĽá áá á¨áłááťá á¨áá¤áľ ááááľ áá áááááá˘
á¨áĽáŤááłááą áá á ááŤá á°ááŁá á ááľáĽ á°áááżá áľááááá˝á áá°áŠ á¨ááἠáá á áá¨á°á áĽáá áá ááᢠáá áĽá á ááŤá á°ááŁáŤáľ áŤáá áá ááľá¨á áĽááłáá áľ á˛á á¨á áááą á áłáł áá ááľáĽ áŁáá á¨ááá ááľáłááť áá°áŁááĄ-
áĽá ááŞááŤáá˝ á ááľ á áááľ áá á¨áá áá á¨ááᣠá á°ááá á°ááŁáŤáľ ááŤá¨á áááľ áĽááłááá áᣠá á ááľ áá á ááľ á°ááłá áĽáť áĽá
á áá ááá á áá áľáŁ áá
á á¨ááŞááŤá á°ááľ á áá á˘áľ (á á°ááá
ᨠRCC ááááá˘áŤ ááľáĽ) á áá áá ááá¨á á áá áľá˘
á áá¨á¨áťáᣠá áá¤áľ áááł áá áŤá ááá˝ áĽáá˛á á¨á°ááľ ááĽááľ á áá¸áᢠáá áá á¨ááá ááŁá˘ áŁá ᪠áá, á áĽá áááł á¨áá°ááá áĽáť áĽáááááá áĽá áĽáá¨áłááá.
áľááá : áĽá SPI áĽá¨á°á ááá áá, áá á áááľ áááľ áá (á áá¨á áĽá á á°ááľ ááááľ) "á ááŤá á¨áá-ááá°áľ á°ááŁá" ááá á áá áľ, áĽá á ááľ á°á¨á᪠(á¤áá˛) "áá°á á á¨áááľ-áá" ááá á áá áľ. áá á¨ááá°áĽá á ááľáŁ ᨠSPI áá áĽáááááá˘
SPI
áá áľáá˝ á áá
SPI ááá Serial Peripheral Interface (á°á¨áłáłá ááŞááŤá á áááá˝) MK á¨ááá˝ MKs áĽá á á á ááá á¨ááá á áá áá ááááŁáŁáľ ááá áĽá á áŁá áá¤áłá á¨áá á áááá˝ ááᢠáľá áťááá LED áá (á ááŁááť áááŞáŤ ááľáĽ ááá 25 áááá¨áą) á¨áľ á ááľáĄ ááá ááá , áá°á á˛á á°áááżá. SPI á ááľá°á ("ááľá°á") áĽá á áŁáŞáŤ ("áŁáŞáŤ") áááłáá˝ ááľáĽ áá°áŤ áá˝áá. SPI á áŤáľ áá°á¨áłá áťááá˝ áŤááľ á˛áá á¨ááá á ááľáĽ ááá ááłá°á á áá˝áááĄ
- MOSI, Master Output / Slave Input: áá áá á ááľá°á áááł áááĽá áááŤá, áĽá á áŁáŞáŤ áááł áá ááἠááá áá;
- MISO, áá ááĽááľ / á¨áŁáŞáŤ áá ááľ: á á°ááŤáá, ááł ááľáĽ ááá áá, áŁáŞáŤ ááľáĽ áá°áŁá;
- SCKᣠá°á¨áłáłá á°ááľáĄ á ááłá ááľáĽ áŤááá á¨áá¨á áľáááľ áľáááá˝ áŤáááá ááá á áŁáŞáŤá ááľáĽ á¨á°ááľ ááááľ ááá ááᢠá áá á¨áą, áľáĽá°áŁáá˝á áááłá;
- SS, Slave Select: á áá áťáá, áŁáŞáŤá á¨áĽáą á¨áá ááá áĽáá°áááá áŤááá. á STM32 áá NSS á°áĽá áá áŤá, N = á ááłá, áááľá. áá áťáá ááŹáľ áŤáá á°ááŁáŁáŞá áŁáŞáŤ ááááᢠá¨Open Drain Output áááł áá á á°áἠááŁááŤáᣠáá ፠áá áłáŞá ááá˘
áá áĽáá°áááš ááᣠá STM32 áá áŤáá SPI á á°ááŁáŤáááľ á¨á ááá ááᣠáá á ááá¨áłáľ á á°áá°á á°á¨á á áľá¸á᪠áŤá°ááááᢠáááłá, ᨠSPI áá áĽáť áłááá ᨠI2S á áááá˝ áá áá°áŤ áá˝áá, áĽá áááťááťá¸á á á°ááśá˝ ááľáĽ áá°áŁááá, áľáááá á áá ááá¨áĽ áŤáľáááááłá. á¨áĽá á°ááŁá áĽá á á áŁá ááá ááᥠMOSI áĽá SCK áĽáť á áá áá áá¨á ááľá áľ áĽáť áŤáľáááááłáᢠáá° ááá 25.3.4 (ááá˝-duplex áááááľ, ááá˝-duplex áááááľ) áĽáááłáá, áĽááŤá áĽááááá. 1 á°ááľ áĽá 1 áŁáá á áŁáŤ á¨ááἠá˝áŚ (á¨1 á°ááľ ááááľ áĽá 1 áŁáá á áŁáŤ á¨ááἠáĽá¨áľ)
á áá
áááłáŁ á áááŹá˝á SPIá á á°ááá-áĽáť ááá á á°ááŁáŠ áĽáť áá áááᢠ/ á¨ááľá°ááááŤ-áĽáť áááł á¨áąááááľ áááł áá á°ááłáłá áá-áá¨áĽ á ááľá°ááá፠áá áá áá°áááá (MOSI in master mode or MISO in áŁáŞáŤ áááł), á¨ááá ፠áá (á¤áá¤áľáŚ ááá MOSI á á
á°á á°á¨á°á) áĽáá° áá°á á I / O áĽá
á áá ááá áá˝áá. áá. á áá
á ááŁá á áááŹá˝á ᨠRx ááąá á˝á áááą á á áá (á¨á°áá á ááá á¨á°ááá áá¨á á áááá)á˘
á áŁá áĽáŠáŁ ᨠMISO áá áá ááᣠá¨LAT ááááľá á¨áĽáą áá áĽáááááᢠá STM32 áá á ááŽááŤá ááĽáĽá áá°á¨á á¨áá˝ááá Slave Select áá áĽáááááᣠáá á áĽá á á áŁá ááš ááᢠá ááá 25.3.1 SPI á á ááá ááá፠ááľáĽ áŤááá á°ááłáłá áľá á ááá áĽáááŁáááĄ-
NSS áśááľáá ááĽáĽá (á¤áľá¤áľá¤á = 1) / á¨áŁáŞáŤ áá፠áá¨á á SSI á˘áľ á SPI_CR1 ááááá˘áŤ ááľáĽ ááááᢠááŤáá á¨á¤á.á¤áľ.á¤áľ áá áááá˝ á¨áá°áá áŞáŤ ááááśá˝ á ááť áááˇáá˘
áá° áááá˘áá˝ áááťá ááá á áá áá. SPI2 á ááá áá áá°áአᣠá¨áá á¨áľ á áľáŤáťáá á ááἠáá ááľáĽ áĽáááááá - á ááá 3.3 á¨áá á°á¨ áľááľáł áŤááł (á¨áá á°á¨ áľááľáł áŤááł)
á°á áᣠáĽáááááĄ-
#define _SPI2_(mem_offset) (*(volatile uint32_t *)(0x40003800 + (mem_offset)))
ááá 25.3.3á âSPI in master mode á áááá ááâ á áá áááľ áĽáá¨ááłááá˘
1. á SPI_CR2 ááááá˘áŤ ááľáĽ á¨áá፠á áááá˝ á°ááąá á¨BR[0:1] á˘áľ áá áŤáááá˘
ááááŚáš á¨áá°á á°áĄáľ á á°ááłáłáŠ áľá á ááŁááťá áááŞáŤ ááá ááľáĽ áá. á¨á áľáŤáť ááἠ(á áľáŤáť ááŤáŤáťCR1 0x00 á ááᣠá ááŁáŞááľ ááá á˘áľ áá¸áłá (áĽá´áľá áłáá á áľááá 0x0000):
ᨠBR á˘áľáľ á¨áááŁá áŞáŤáá á°ááľ áá¨áá፠áŤáááá, áľááá SPI á¨áá°áŤá áľá áľáááá˝ áááľáá. á¨STM32 ááŞáŠááá˛á 72 áá¸á ááááᣠá¨á¤áᲠážáአá áłáł áá áá á¨áľ áĽáľá¨ 25 áá¸á á áá°ááľ áľáááá˝ áá°áŤáᣠáľááá á á áŤáľ ááŤáá á ááĽá (BR[2:0] = 001)á˘
#define _SPI_CR1 0x00
#define BR_0 0x0008
#define BR_1 0x0010
#define BR_2 0x0020
_SPI2_ (_SPI_CR1) |= BR_0;// pclk/4
2. á áá¨á ááľá°ááá áĽá á°á¨áłáłá á áááá˝ á°ááľ ááŤá¨á áŤááá áááááľ áááá°á CPOL áĽá CPHA á˘áľ áŤááá (á áá˝ 240 áá áŤááá ááľá áááá¨áą)
áĽáá á¨ááἠáá áĽáŤáá áĽá áĽáá áľááśá˝á áĽá¨á°ááá¨áľá áľááááᣠá áá˝ 704 áá áŤááá á¨CPOL áĽá CPHA á˘áľáľ á˝ááá ááááŤá á áá áĽáá áĽááááá (SPI General Description):
á¨á°ááľ á°á¨á áĽá polarity
ᨠSPI_CR1 ááááá˘áŤ CPOL áĽá CPHA á˘áľ á áá ááᣠá áá áŹážáá˝ á áŤáľ á ááŤáŽá˝á á ááŽááŤá ááá¨áĽ áľá˝ááá
ᢠááá áá¨á á ááá°áááá áľ áá CPOL (Clock Polarity) á˘áľ á¨á°ááľ ááááľ áááłá áááŁá áŤáᢠáá
á˘áľ á¨ááľá°á áĽá á¨áŁáŞáŤ áááłáá˝á áááŁá áŤáᢠCPOL áłáá á¨á°ááá¨áŁ ᨠSCK áá á áĽá¨ááľ áá
á°á ááᢠᨠCPOL á˘áľ á¨á°ááá á¨áŁ áľáŤ á˛á᳠ᨠSCK áá á¨áá°á ááá˘
ᨠCPHA (á¨á°ááľ á°á¨á) á˘áľ á¨á°ááá á¨áŁ á¨á¤áá¤áľá˘ ááĽááľ áľáľáŽáĽ ᨠSCK á˛ááá ááá°á á áá áá (CPOL á¨á°á¸áł ááá°á
ááá CPOL á¨á°ááá áá° áá á¨á ááá)ᢠááᥠá ááá°áá á¨á°ááľ ááἠáá á°áááˇáᢠᨠCPHA á˘áľ á¨á°á¸áłáŁ á¨áá°áá á¨á˘áľ ááĽááľ áľáľáŽáĽ ᨠSCK á˛ááá á¨á áŤá á áá áá (á˛ááŚá á¨á°ááá ááá°á
ááá CPOL ááá˝ á¨áá á áá á¨á áááᢠá ááááŞáŤá á¨á°ááľ ááἠáá ááἠá°áááˇáá˘
áá áá áĽáááľ á¨áááľá á áá áááąá á˘áľ áᎠááá á ááŁá¸á áá°áá áá°áá°á፠á°áá°áá ᣠááááŤáąá áĽá á áá á ááááá áľ áá á¨á¤áľáŹáŹ ááááą áá á°á áá áĽáá˛áá áĽá áá¨áá á¨á áŁá á¨áἠááľ á áá áá áĽáá˛á°ááá áĽáááááá (ááľá XNUMX áááá¨áą)ᢠáĽá¨á¨áᨠá áá á ááἠáá DM634)á˘
á áááŤá˝á áá, áĽáá á ááááŞáŤ á ST á¨ááἠááá˝ ááľáĽ á¨áááľ á ááŁáĽ áŁá ᪠á ááĽááá: á áĽááą ááľáĽ "áľáášá áá° áᎠáłáá á áľááá" á¨ááá áá¨á á°á˝áá. áľáá˝ áĽáá°áá áááľáááá áá°áá áľáá˝ ááá˝áłáľ, áĽáá°, áááłá, á áľáá.
3. áŁá 8-á˘áľ ááá 16-á˘áľ áłáł áĽáá á áá¸áąá áááá°á á¨á˛á¤áá¤á á˘áľá áŤááá
áĽáá° DM16 áŁá 634-á˘áľ PWM ááἠááľá°ááá áá áááá¨áá á á°áá áŁá 12-á˘áľ á˛á¤á633á ááľáááᢠá˛á¤áá¤á á ááľááąá ááľááᥠááááŤáłá áááĄ-
#define DFF 0x0800
_SPI2_ (_SPI_CR1) |= DFF; // 16-bit mode
4. á¨ááááá á áá¸áľ áááá°á á¨LSBFIRST á˘áľá á SPI_CR1 áááἠááľáĽ áŤáá áŠáľ
LSBFIRSTᣠáĽáá° áľá áĽáá°ááŤáááá°áᣠááááŞáŤ á áľááš ááá á áá ááአáľáááąá áŤááááᢠáá DM634 á ááááŞáŤ MSB ááἠááá á áááááᢠáľááá , áłáá ááľáááá áĽáá°áááá.
5. á áááľáá áááłáŁ á¨á¤á á¤áľ á¤áľ áá ááĽááľ á¨ááŤáľááá á¨ááᣠá á á ááá á¨áŁááľ ááľá°ááá፠á á°á á°á¨á°á ᨠNSS áá á¨á áŤáľáááľá˘ á NSS ááŽááŤá áááłáŁ á SPI_CR1 ááááá˘áŤ ááľáĽ SSM áĽá SSI á˘áľ áŤáááᢠᨠNSS áá áĽáá˛áᣠá¨á°áááᣠᨠSSOE á˘áľ áĽáť áá áááá á á¨ááŤáľááááá˘
áľá NSS áááľáá áááł ááááłáľ SSM áĽá SSI ááŤááĄ-
#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 ááľ á˛áťá ááá˘
á¨ááἠáŁááľ á shift áááἠááľáĽ á°ááá áľáአáááł (á¨ááľáĽ á ááśáĄáľ) á¨ááááŞáŤáá á˘áľ á áá°áááá áľ áá, á¨á፠á áá áá° ááľáĽ áá°áááá ááĽááľ áŤáá MOSI áá áááłáŁ á CPI_CR1 ááááá˘áŤ ááľáĽ áŁáá ᨠLSBFIRST á˘áľ á
ááĽá áá á áááľá¨áľ ááááŞáŤ ááá á¨áá¨á¨áťá áľáá˝ áá°ááľá˘ TXE áŁáá˛áŤ á¨ááἠááľá°ááá á áá á°áááĽáŻáᢠá¨Tx ááľ áá° áá¨á ááááá˘áŤáŁ áĽá á CPI_CR1 ááááá˘áŤ ááľáĽ áŤáá TXEIE á˘áľ á¨á°ááá ᨠááá¨áĽ ááá áŤáá˘
á á¤áľá˛á¤á áááŁá áŞáŤáá˝ ááľáĽ ᨠSPI áľáá áŤá áá° á ááľ áŁá ᪠áááłáĽ á áľááá ááľáĽ áĽááľ áááľá á áááťááᢠá á áľááᣠá¨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] á¨ááἠááááá˘áŤ
á¨á°áá áá ááá á¨áá°ááá áááĽ.
á¨áá¨á ááááá˘áŤ ááááá˘áŤ á áááľ ááśá˝ á¨á°á¨áá á˛áá á áá°áá áááťá (ááľá°ááá፠ááľ) áĽá á ááľ áááá ἠ(ááŤáŁ á°áá á)ᢠááá¨á ááááá˘áŤ ááááá˘áŤ á˝áá á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
}
á°á á ᣠá LED ááá á¨áá¤áśá˝ áĽááľ áá á¨áľ 16 áá áááľ áŁááľ ááľá°ááá áľáááŤáľáááá áĽáá°áá áŤá áááá˘
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 á¨á áá áĽáááš áĽááłá ááá˝ áá, ááá áá á¨ááá˝ á¨á¤áľá˛á¤á áşááľ á¨á°áአáá¸á. ááá 9.1 GPIO á á ááá ááááŤáĄ-
áĽáŤááłááą á á ááá ááá I/O áá°áŚá˝ (GPIO) áááľ áŁá 32-á˘áľ á¨áá
á ááááŚá˝ (GPIOx_CRL áĽá GPIOx_CRH)ᣠáááľ áŁá 32-á˘áľ áłáł ááááŚá˝ (GPIOx_IDR áĽá GPIOx_ODR)ᣠáŁá 32-á˘áľ á ááá
/áłáá ááľáááŞáŤ áááἠ(GPIOx_BSRR)ᣠáŁá 16-á˘áľ áłáá ááľááá áááἠ(GPIOx_BRR) áĽá 32 -á˘áľ á¨áááľ áááἠ(GPIOx_LCKR)á˘
áŤáá°áááą áĽá ááááá á¨ááááš áĽáá á¨ááááŞáŤááš áááľ ááááá˘áŤáá˝ áá¸á, ááááŤáąá 16 á¨áá°áĄ áá á "á áŤáľ á˘áľ á áááľá" á áá¸áľ á áĽááą áá á°á áłáľáá áááá. áĽáááŤá˘ áá XNUMX áĽáľá¨ XNUMX á CRL ááľáĽ áá¸áᣠá¨á°ááŠáľ á°áá á CRH ááľáĽ áá¸áᢠá á°ááłáłá áá á¨ááŠáľ ááááŚá˝ á¨áááá á¨áá°áĽ áá á˘áľ á á°áłáŤ áááł áŤááá - áĽááá áá á ááá˝ áááŤá "á¨á°áŤá".
ááááááľáŁ á¨áááአáá¨á¨áť áá áĽááááá˘
á¨ááá áááἠá áááááá˘
á¨áľáĽáľáĄ áĽá áłáá ááľáááŞáŤ ááááŚá˝ áĽááľ á áĽááłá¸á á á¨áá á¨ááŁá á áááá¸á á áŁá á áľáá áá¸áᥠáááá ááá á BSRR ááľáĽ áĽáť ááá áá˝ááᣠá¨ááááš 16 á˘áľ áá áá° áᎠáłáá á¨ááŤáľáááŠáľ áĽá áá á°áááš áá° 1 áááá áŤá ááá á°áá áá˝ááᢠBRR á°á ááᣠá¨áłá˝áá 16 á˘áľ ááá áĽáť áłáá áŤáľáááŤáᢠááá°ááá á ááŤá ááľááááᢠáĽááá ááááŚá˝ á áľááá áá¸á ááááŤáąá ááá á¨á áśáá ááłá¨áť áá°áŁááĄ-
á áśáá ááŤá ááá áłáá ááľááá
GPIOx_ODRá á á˘áľ á°á¨á á˛áŤááá ááá¨áŚá˝á áá°áá¨á á áŤáľáááááĄá á ááľ APB2 á áśáá áá áŚááŹá˝á á ááľ ááá áĽá á˘áľ ááá¨á áá˝ááᢠáá
á¨áááá "1" áá° á´á˛áá/áłáá ááľáááŞáŤ áááἠ(GPIOx_BSRR ááá áĽáá°áá áááľááá áĽáť GPIOx_BRR) ááááá á á˘áľ á ááá ááᢠááá˝ á˘áľ áłáááᥠáááŤáá˘
á¨áá¨á áááá˘áá˝ á áŁá á¨áááአáľáá˝ á áá¸á - IDR = áá¤áľ á¨á á áŁáŤ ááááá˘áŤ, á¨áá¤áľ ááááá˘áŤ; ODR= áá¤áľ á¨á á áŁáŤ ááááĽ, á¨áá¤áľ ááááá˘áŤ. á áá áŁáá ááŽáááľ áĽá á ááááá¸ááá˘
áĽá á áá¨á¨áťá áááŁá áŞáŤá áááááŁá. á¨ááá°áá SPI áá áááľá PB13ᣠPB14 áĽá PB15 ááááľ áľááá áá˛áŤáá CRHá áĽáááá¨áłáááĄ-
áĽá ᨠ20 áá áĽáľá¨ 31 á áŁáá áá ááľáĽ á ááľ ááá á á˘áľ ááťá á áľááá áĽáá°ááá áĽááŤáá.
á¨áá áŤááľ ááá˝ á¨ááááááá á áľááľáá á ááááᣠáľááá áĽáá áŤá á á˝á áłá áá˝ áĽááł á á°ááááᣠMODE á á áŁáŤáá áŤáááá áá á (áááąá á˘áľ áá° 0 á¨á°ááá አáá¤áľ) áĽá á¨áá ááĽááľ (50 áá¸á áĽáááááá ᣠáááľá)ᢠáááąá áá áá° "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;
áĽáᣠá áá áá°á¨áľáŁ ᨠBRR áĽá BSRR ááááŚá˝á á¨ááŤá˝á¨á¨áá¨á á LAT ááááŤáá˝á ááťá áľá˝ááá áĄ-
/*** 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 á inertia áĽáťáŁ áĽáá°ááá áááá áá áᣠááŤáľá ááá)
á áá ááá ááá áĽáŠ áá, áá á áá°áŤá. áá 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 áá á ááľ áááľ á¨áťáá á°ááłáá˝ áá á, áĽá ááá°á, á áŁá á°ááłá á áá°áá, áĽá áľááá á á˘áá°áááľ áá ááá ἠáĽá áááľá áááááľ áá°á áĽááá á°ááłáłá áááľááá˝ á áááá áá áŤááá.
áşá á°áá á áá
Clocking áĽá I/O
á ááŁáŞ, STM8 á 2 MHz áľáááá˝ áá°áŤá, áá áá˛áŤáá ááłá¨á á áá áľ.
HSI á°ááľ (á¨áá°á ááľáŁá)
á¨HSI á°ááľ á¨ááľáŁá 16 MHz RC oscillator á ááŽááŤá áá°áŤ á¨áá˝á á áŤáá (1 áĽáľá¨ 8) á¨á°áá ááᢠá á°ááľ áá¨áá፠áááἠ(CLK_CKDIVR) á°áááĽáŻáá˘
ááłá°á˘áŤáĄ- HSI RC oscillator 8 á áŤáá áŤáá á
áá áá áĽáá° áá á¨á°ááľ ááá áá á°ááá§áá˘
á¨ááááá˘áŤáá á áľáŤáť á áá¨á á°áĽá°á ááľáĽ ᣠááááŤáá á áŞááá ááľáĽ áĽááááá áĽá ááááĄá áá˝áłáľ áĽááłáá áľ áĽááŤáá á˘
#define CLK_CKDIVR *(volatile uint8_t *)0x0050C6
CLK_CKDIVR &= ~(0x18);
PWM á áááľáŹáľ áĽá LEDsá áľááááááᣠááĽáĄá áĽáááĄ-
áşáá áľáá˝ áá, áĽá á°ááŁáŤáľ á á°ááłáłá áá áá á°áá ááĽááá. á áŤáŹ á ááá˝ ááľáĽ áŤáá âá ááŤá á°ááŁáâ ááᣠá âá ááŤá áŁááľâ ááá¨áŤáá˘á ááŤá áŁááľ) - áĽáá° Atmega ááá áŤá áááᢠáĽá´áśáťá¸áá á ááŽááŤá áááἠáá˝áá ᣠáá á áľááá á áá°áá ᣠááááŤáąáᢠá á˛áą á°ááŁá á¨áááá áłáá á¨á°ááᨠá áá ááᢠáĽááá á áŁááśá˝ áááá á á¨áá˝ááá ST áŞáĽáá ááŽááŤáá (á Visual Develop á¨áá¨á°) áá áá ááá ááᢠááááľ á¨ááŤáłá¨á á¨ááááŞáŤá á¨á°ááľ ááŁáŞ CH1 áĽá CH2 áá¤áśá˝ á áŤáŹ á ááá˝ ááľáĽ á°á°áĽáááᢠá STVP ááľáĽ AFR1 áĽá AFR0 á˘áľ áááááľ á áľááá áá, áĽá ááá°áá á°áá á¨ááá°á áá ááŁáŞáá CH1 ᨠPD4 áá° PC5 áŤáľá°áááá.
áľááá , 6 áá LEDs áááŁá áŤá PC6, PC7 áĽá PC3 áááááŞáŤ áá ááŁáŞ, PC5, PD3 áĽá PA3 áááá°á.
ᨠI/O ááá˝á á STM8 áá áááá á¨STM32 á¨á áá ááá áĽá á¨á áá ááááŤáłá ááá˘
- á áľáá á¨ááłáá á¨áá¨á á á áŁáŤ ááááá˘áŤ DDR (á¨ááἠá á áŁáŤ áááááĄ): 1 = áá ááľ;
- á¨ááááŞáŤá á¨ááĽáĽá ááááá˘áŤ CR1, á˛ááŁ, á¨áá-ááá°áľ áááłá (1) ááá áááľ ááłá˝ (0) áŤáááá; LEDs á á¨áŤáśá´áľ áá áá° áşá áľáááááᣠáĽáá ááŽáá˝á áĽá°ááááá˘
- ááá°áá á¨ááĽáĽá ááááá˘áŤ 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 áá°áľ áá°á áŤáᢠáľááá ᣠá¨á°ááľ ááŁáŞá áá áŤá áá¨á¨áť áá á˛á°ááľ áĽá áłáá á˛ááá á á˛áľ á¨áá°ááá áĽá´áśá˝ áłáá°á áááŁáá˘
- á¨áŤá áá á¨á°áľá°áŤá¨á и á¨ááá áá á¨á°áŁáŁá áááłáá˝ - áľáá á áá áĽá ááá áá á á°ááá, atmelovskie áá á°ááłáłá ááŁá PWM и á°á¨á-áľáááá PWM.
- OCiREFᣠá¨áá¤áľ á ááłáľá á¨ááŁááť ááááľ - á¨áááłá¨áŞáŤá á¨áá¤áľ ááááľ, á áĽáááą, á á°ááá áá áá á PWM áááł áá á¨ááłá¨á.
áá°á á˛á á¨áááŽááľ ááá˝ áá, áááľ áá ááŁáŞáá˝ PWM á˝ááłáá˝ á áá¸á - á¨ááááŞáŤá áĽá ááá°á. áááąá 16-á˘áľ áá¸á, á¨ááááŞáŤá áĽá á°á¨á᪠áŁá áŞáŤáľ á ááľ (á á°áá, áááąáá áá°áá áĽá áá° áłá˝ áááĽá¨á áá˝áá). áááłá˝áá á á°ááłáłá ááááľ áĽáá˛á°áŠ áĽáááááá, áľááá á áĽáą ááľáĽ áŤáááá ááá á á ááŁá áááá áá, á ááá˝ áľá á ááá ááá°á ááááá áá°ááŠ. á ááłááľ á˝áá á¨ááá á¨á°ááľ ááŁáŞáὠᨠPWM á°ááŁá ááá፠á ááŁááť áááŞáŤá ááľáĽ áľá ááááŞáŤá áá ááŁáŞ (17.5.7 PWM áááł) á áááŤá ááľáĽ áá ᣠáľáááá áá áá á á°ááą ááľáĽ áá° áá áĽá áá° ááľ áááá á ááĽááľá˘
PWM á STM8 áá á¨á áľáá PWM á áá áĽá á á áááĄ-
PWM á¨áŤá á á°ááá áá
á¨áá፠áá
á á¨áľá áá° áá
á TIM_CR1 ááááá˘áŤ ááľáĽ áŤáá DIR á˘áľ ááá˝ á¨áá ááá á áá˘á ááááá˘
áááłá:
ááłáá á¨ááááŞáŤáá PWM áááł áá ááá. á¨PWM áááłá¨áŞáŤ á˛ááá OCIREF áĽáľá¨ TIM1_CNT <TIM1_CCRI áľá¨áľ ááŤááᢠá áá áá፠áá
á°á á°á¨á áááľáłá. á TIM1_CCRi ááááá˘áŤ ááľáĽ á¨áááłá°á¨á áá á¨á ááś áŤá áá (TIM1_ARR ááááá˘áŤ) á¨á áá á¨ááᣠᨠOciREF ááááą á 1 áá á°áááᢠá¨áá
á
á ááá 0 á¨ááᣠOciREF á áᎠá°áááá˘...
STM8 áá ááŁáŞ ááľá°áľ á ááá ááááŞáŤ áźáŽá˝ áá áááłá°á, áĽá á¨á፠á áá áĽáť á¨ááŁááť ááááľ áááĽáŤá. á á áľááᣠá°ááľ ááŁáŞá ááááŞáŤ áááá ááŁáᣠá¨ááŤá áŤááłáľáŤáᣠá áá¤áąáᣠááź compare value == 0
áá¤áą á áá ááááľ ááłá¨á áŤáá áľ ááá áá (áááłá ᣠá ááááŽáá á ááŽááŤá á áááá áĽ)á˘
áľááá
áĽá ááľá¨á á¨áááááá: 8-á˘áľ PWM (AR == 255
), á¨áłá˝ áá° áá á ááá á, á áľáá አáá ááľá°áŤá¨á. á ááááš á¨áşá áá á áŤáśáľ á¨á°ááá á áááá¸á PWM 0 (LED on) áĽáľá¨ áľá¨áľ áááŁáľ á áá áľá˘ áá áááłá°á áĽá 1 á áá.
áľá á ááłááśáš áá°á áĽáá á ááĽá ááᢠPWM áááłáľááá á¨áá á áá¨á áááłá¨áŞáŤ (18.6.8 - TIMx_CCMR1) á áááá á¨á°ááááá á¨ááá°á áá ááŁáŞ áááἠáĽáááááá˘
110: á¨ááááŞáŤá PWM áááł - á¨áłá˝ áá° áá á˛áá á á¨ááááŞáŤá á°áἠáĽáľá¨ TIMx_CNT < TIMx_CCR1 áľá¨áľ áá°áŤáᢠá áá áá፠á¨ááááŞáŤá áťáá áĽáá
áľáá´-á áᣠááᢠ[á á°á¨á᪠á á°ááą ááľáĽáŁ á¨á°áłáłá° á
á-ááá á ᨠá°ááľ ááŁáŞ 1] 111ᥠááá°á PWM áááł - á¨áłá˝ áá° áá á˛áá á á¨ááááŞáŤá áťáá áĽáľá¨ TIMx_CNT < TIMx_CCR1 áľá¨áľ á áá°áŤáᢠá áá áá፠á¨ááááŞáŤá áťáá ááŁáŞ ááá˘
á¤áá˘á˛áὠᨠMK áá á¨áŤáśáľ áá á¨á°ááá áľááá, ááá°áá áááł áĽáá ááľáááá (á¨ááááŞáŤá á°áá, áá áá á áĽáľáŤáá á ááá á).
á˘áľ 3 OC1PEᥠá
áľá áááľ áá
ááľ 1á á áá
0ᥠá
áľá áááľ áááᣠá TIMx_CCR1 á°á°ááááᢠá ááááá áá áTIMx_CCR1 ááťá áá˝ááᢠá á˛áą áá áá˛áŤáá áá°áŤá.
1ᥠááľá áŤá áááᣠTIMx_CCR1 áá
áˇáᢠááááá˝ ááá áĽ/ááá á¨á
áľá áááľ ááááá˘áŤáá ááľá¨áąá˘ ááľá á¨á°áŤáá á¨TIMx_CCR1 áĽá´áľ á áĽáŤááłááą á¨ááá ááľá°áľ á áĽá ááááá˘áŤ ááľáĽ ááŤááá˘
*ááľáłááťáĄ á¨PWM áááł á áľááá áĽáá˛á°áŤ á¨á
áľá áááľ ááááŚá˝ ááááľ á ááŁá¸áᢠáá
á áá á á˛ááá áááł á ááŤá áá (ᨠOPM á˘áľ á TIMx_CR1 ááááá˘áŤ ááľáĽ á°ááá§á)á˘
áĽáşáŁ áááá°á áá ááŁáŞá áśáľáľ áťááá˝ á¨áááááľá áá áŤáĽáŠáĄ
#define TIM2_CCMR1 *(volatile uint8_t *)0x005307
#define TIM2_CCMR2 *(volatile uint8_t *)0x005308
#define TIM2_CCMR3 *(volatile uint8_t *)0x005309
#define PWM_MODE2 0x70 //PWM mode 2, 0b01110000
#define OCxPE 0x08 //preload enable
TIM2_CCMR1 = (PWM_MODE2 | OCxPE);
TIM2_CCMR2 = (PWM_MODE2 | OCxPE);
TIM2_CCMR3 = (PWM_MODE2 | OCxPE);
AR áááľ áľáááľ-á˘áľ ááááŚá˝á áŤáá áá ᣠááá ááá áĽáá ááá áá-
#define TIM2_ARRH *(volatile uint8_t *)0x00530F
#define TIM2_ARRL *(volatile uint8_t *)0x005310
TIM2_ARRH = 0;
TIM2_ARRL = 255;
ááá°áá á°ááľ ááŁáŞ á¨áłá˝ áá° áá áĽáť ááá á áá˝áá, á áľáá አáá ááľá°áŤá¨á, ááá áááἠá áŤáľáááá. ááŞáŠááᲠáá¨áááá áááłá áá° 256 áŤáá áŠáľá˘ áááá°á áá ááŁáŞáŁ á áŤáአá TIM2_PSCR ááááá˘áŤ ááľáĽ á°ááá áˇá áĽá á¨áááľ ááá ááá˘
#define TIM2_PSCR *(volatile uint8_t *)0x00530E
TIM2_PSCR = 8;
áá°áá°ááŤáá˝á áĽá ááá°ááá á°ááľ ááŁáŞ áĽáŤáą áááĽáŤáľ áááŤá. á¨ááááŞáŤá á°ááŁá á ááááá˘áŤáá˝ áááłá áááłáľ/á ááłáľá á áá: á¨ááŤá¨áá¸á áááą á á ᣠáśáľáľ áťááá˝ áŁáá°ááŁá á áááł á áĽááą áá á°á áłáľáááᢠáĽáá á°áá á¨ááááľ ááááľá áááŞá˛ áááἠáĽáá°ááťá ááá áĽáá˝ááá, áááľá. á ááá á°á¨áᣠPWM Mode 1 áĽá á áá ááá áá˝áááĄ-
#define TIM2_CCER1 *(volatile uint8_t *)0x00530A
#define TIM2_CCER2 *(volatile uint8_t *)0x00530B
#define CC1E (1<<0) // CCER1
#define CC2E (1<<4) // CCER1
#define CC3E (1<<0) // CCER2
TIM2_CCER1 = (CC1E | CC2E);
TIM2_CCER2 = CC3E;
áĽá á áá¨á¨áťáŁ á°ááľ ááŁáŞáá á á˛á¤áá¤ááľ_CR1 ááááá˘áŤ ááľáĽ áĽááááŤáááĄ-
#define TIM2_CR1 *(volatile uint8_t *)0x005300
TIM2_CR1 |= 1;
áľáááááášá áĽá´áśá˝ áááááá áá ááŁáŞáá á¨ááŤáá á ááá áŤááľ () ááá á ááá áĽáááᢠááááŚáš ááááą áá˝áá ááááŚá˝á áŤááą/áŤááłáľáŠááĽáŤááłááą áťáá áááą á áᥠáá á°áá 8 á˘áľ TIM2_CCRxL áĽá á¨áá°á á˘áľ á TIM2_CCRxHᢠáŁá 8-á˘áľ PWM áľááááá áá á°ááá á˘áľ áĽáť ááťá á á áááĄ-
#define TIM2_CCR1L *(volatile uint8_t *)0x005312
#define TIM2_CCR2L *(volatile uint8_t *)0x005314
#define TIM2_CCR3L *(volatile uint8_t *)0x005316
void setRGBled(uint8_t r, uint8_t g, uint8_t b)
{
TIM2_CCR1L = r;
TIM2_CCR2L = g;
TIM2_CCR3L = b;
}
á áľáŠá¨áľ á¨áá¨áłá°áá á ááŁá˘ 100% ááááľá ááľá áľ áŤááťáá áľáá˝ ááľááľ áŤáá áľ PWM áĽááłáá áŤáľá°ááá (á á¨áá°áá 255 áĽá´áľ ááááą á á ááľ á¨á°ááľ ááŁáŞ áá°áľ áááá áŁá)ᢠá LEDs, áá áá á ááŤááľá, áĽá á áľáŠá¨áľ á¨áá¨áłá°áá á ááŁá˘ áĽáá´áľ ááľá°áŤá¨á áĽááłáá áľ á áľááľá ááááłá.
PWM á ááá°áá á°ááľ ááŁáŞ áá áá°áŤá, áá° ááááŞáŤá áááą.
á¨ááááŞáŤá á°ááľ ááŁáŞ á á°ááłáłáŠ ááááŚá˝ ááľáĽ á áľááá á°ááłáłá á˘áľ á áá (á ááá°áá á°ááľ ááŁáŞ ááľáĽ âá¨á°áŤááľâ á¨ááŠáľ á˘áľ á ááááŞáŤááš áááá ááááľ á¨áá áááŽá˝ á áááľ áĽá á áá áááá)ᢠáľááá , á áá¨á á°áĽá°á ááľáĽ á°ááłáłá á¨ááááá˘áŤ á áľáŤáťáá˝á ááááľ áĽá áŽáąá áá áłáľ á á áá. áááŤá, á¨áľáááá˝ áá¨áááŤáá áá ááááĄ, ááááŤáąá. á¨ááááŞáŤá á°ááľ ááŁáŞ á¨áááľ ááá áłááá áľáááá áŁá 16-á˘áľ áá á áááľ ááááŚá˝ ááľáĽ ááááľ ááááá Prescaler á¨áá°á и áá áŤá. áááá ááá áĽáá°áááá áĽá ... á¨ááááŞáŤá á°ááľ ááŁáŞ á áá°áŤá. áááľáá á˝ááŠ?
á˝ááŠá ááááłáľ áĽá¸áá ááááľ áľá á°ááľ ááŁáŞ 1 á¨ááĽáĽá ááááá˘áŤáá˝ áááá ááá á áááá¨áľ áá, ááá°áá á°ááľ ááŁáŞ á¨áááá áĽá¨áááá áá. á á°áá 17.7.30 ááľá á áááἠ(TIM1_BKR)áľáá˝ áĽáá°áá áŁáá áľ áŚáłáĄ-
áááá áá¤áľ á áá
#define TIM1_BKR *(volatile uint8_t *)0x00526D
TIM1_BKR = (1<<7);
áá áá ፠áĽáť ááᣠáŽáą
STM8 Multiplex
á STM8 áá ááŁááľá˘
áśáľá°áá áá-ááŽáááľ áľáááľ RGB LEDs á¨ááá°áá á¨á°ááľ ááŁáŞ áá á PWM áááł áááááľ áĽá á¨á°ááŤáŠ áááá˝á áĽáá˛áŤáłáŠ ááľá¨á ááᢠáĽáą á áŁá ᣠá áŁá á ááĽááľ LEDs á áŤá አáĽá áŤá ááľ áŤáááá¨áĽ áĽáá°áááľáá á áááľáá ᨠLED multiplexing á˝áá°-ááłáĽ áá á¨á°áá á¨á° ááá˘á¨áĽááł á˝ááľ, á¨áĽááł áááᤠáá¨ááá
). á áá´ á á°á¨áá
á¨áĽáŤá áľáá° ááá áá áá áááľáá
- á¨ááááŞáŤáá RGB LED anode á°ááááˇá;
- á áĽááśáłá, á áľááááášá ááááśá˝ ááŤáśáśá˝ ááľá áľ;
- ᨠPWM áá°áľ áá¨á¨áť áá á áĽáá;
- á¨ááá°áá RGB LED anode á°ááááˇá;
- á á áŤá...
áĽááá˛á ááá°. áĽááἠáá, áááá áĽáŤ, á¨á ááľ áááááľ áĽá ᨠLED "ááĽáŤáľ" á á ááľ áá áĽáá˛á¨á°áľ áŤáľáááá. á°á á, á¨áá áá°á. á ááááá áááł á ááá°áá á¨á°ááľ ááŁáŞ áśáľáľ á°ááŚá˝ ááľáĽ áĽá´áśá˝á á¨ááŤáᣠáŽáľ ááťá ᣠUEV á˛á°ááľ áááἠáĽá á á°ááłáłá áá á áá áŤááá ᨠRGB LED áááἠá ááĽáá˘
ᨠLED ááá¨á á ááśáá˛á áľááá á¨á ááŤá á°ááŁáŁáŞá áá¨á á¨ááá áá áľ "á¨áŞá˛áŽ áá á°á¨ áľááľáł" ááá á áŤáľáááááłá. áá ááá áľááľá áááĄ-
uint8_t colors[8][3];
á¨á ááľ á¨á°áá°á LED ááá áááá¨á á áľááááášá áĽá´áśá˝ á áá áľááľá áá ááťá á á ááááᢠáĽá á°ááááá ááá LED ááĽá á°á áŤá áááá
uint8_t cnt;
á´áááľ
ááľááááá ááŁáᾠᣠá ááŤáľá°áá
áá᳠ᣠCD74HC238 demultiplexer áĽááááááᢠDemultiplexer - áŚááŹá°áŠá á áááľáá ááľáĽ á¨áá°áá á áşá <<
. á áśáľáľ á¨ááĽááľ áá (á˘áľ 0ᣠ1 áĽá 2) áŁá áśáľáľ á˘áľ ááĽá X áĽáááá áááᣠá ááášá á¨áá¤áľ ááĽáŠá áŤáááá˘1<<X
). á¨á°ááŠáľ á¨áşá ááĽááśá˝ áááá ááľá ááááŤáľ áĽá
á áá áááá. áá
áá áşá á¨áááááá á¨áááᎠáááŁá áŞáŤáá á¨á°áŤááľá ááá˝ áĽááľ áááááľ áĽáť áłááá áá°á
áááľá ááá - á á°áťá áá á áĽá á¤áá˘á˛áá˝á áĽááłáŤá አáĽá á¤ááŹá áĽááłáŤááĽá ááᢠáşáá á ááľ áłáá˛á áŤáľá¨ááá, ááááá á á¤áľ ááľáĽ á¨ááááŞáŤ áĽááłáł ááľáŤ ááľáĽ áááἠá áá áľ.
CD74HC238 áŽáá´á
á áá° á°áááá á¨á¤áá˘á˛ á ááľ á¨áá
á¨áĽ áááááľ á áá áľá˘ áá áŁá áĽá áĽááľ á P-MOSFET á áŠá áŽáá´á
á áá° á ááľ áŤáááŁá, ááá áá á áá
ááłáŤ ááľáĽ á ááĽáł áá ፠áá˝áá, ááááŤáąá áĽáá°ááá, 20mA áááľáłá áášá á¨áá°á á°á¨ááá˝ á ááἠáá
ááľáĽ. á¨
H = á¨áá°á á¨áŽáá´á
á°á¨á, L = áá
á°á á¨áŽáá´á
á°á¨á, X - ááľ á¨áá˝
E2 áĽá E1á á¨ááŹáľ ááᣠE3ᣠA0ᣠA1 áĽá A3 á¨áá˛5ᣠáá˛3ᣠáá˛4 áĽá áá˛5 ᨠSTM8 áá áĽááááááᢠá¨áá áŤáá á°áá á¨áĽ áá á°á áĽá á¨áá°á á°á¨ááá˝á áľáááá áĽááá á ááá˝ áĽáá° áá-áá áá á áľááá áĽááááá¸ááá.
PWM
PWM á ááá°áá á°ááľ ááŁáŞ áá áĽáá° ááľáá áłáŞá á á°ááłáłá ááááľ á°áá áŻá ᣠá¨áááľ ááŠááśá˝ ááá˘
á ááááŞáŤ áááŤá¨áĄá ááááľ á ááĽá ááľá°áľ á ááá (UEV) á¨áááá LED áááá¨á á°ááŁáá á¨áá áŤáᢠáá á˘áľ á áááἠáá á ááá ááá¨áĽ á áá á áááá áľá áááἠááľáĽ
ááááá˘áŤ á ááá á áááĽ
#define TIM2_IER *(volatile uint8_t *)0x005303
//enable interrupt
TIM2_IER = 1;
ááá°áá ááŠááľ áĽáá° multiplexing áĽáá˛á áŤá ááľá°áľ áá á¨á°áŤáŤá áá ghosting - á¨á˛áŤáśáľ áĽáá ááŤáľá˘ á áĽá áááłáŁ á°ááľ ááŁáŞá á UEV áá ááľá°ááá á ááá áŠáŁ ááĽááŻá áľááááĽáᣠáĽá á¨á ááŤá á°ááŁáŁáŞá á°ááľ ááŁáŞá áá° áá¤áśáš á ááľ ááá ááťá á¨áááአá ááľ á¤áá˘áąá áááá¨á áá áľáááá áááľá áá˝ááᢠáá áá áááááľ á ááááŽáá áááá ἠáŤáľáááááłá (0 = á¨áá°á áĽáŠá áᾠᣠ255 = ááá á áá áŤá) áĽá á¨áá°á á¨áá´áł áá°áľ áĽá´áśá˝á á ááááąá˘ áĽáááŤá˘ ᨠUEV á áá á¤áá˘á˛áá˝ áá ááľ PWM áá°áľ áá á áá ááĽááłá¸áá áŤá¨áááĄá˘
áááŞá˛áá ááááŠ;
//set polarity
TIM2_CCER1 |= (CC1P | CC2P);
TIM2_CCER2 |= CC3P;
r, g áĽá bá áá° 255 á¨áááá á ááá ᥠáĽá á˛á áá áĽááąá áááá áĽáá áŤáľáłááąá˘
ááá¨áŁá
á¨ááá¨áĽ ááá ááá á á°áá°á áááłáá˝ ááľáĽ áşá áááá ááŽááŤá áá°áá áŠá áŤááá áĽá á ááłááľ ááŤá á°ááŁáŤáľá áá áŤá. ááá¨áŚá˝ á¨áá¨á°áąáľ á áá ááŁáŞá á¨áᎠá ááŤá ááá ááľáŁá á°á˝áĽááá˝ ááááŤáľ áá.
á ST Visual Develop ááľáĽ ááŽáááľá áááááŞáŤ áá áľáááĽáᣠᨠmain.c
ááľáĽáŤá ááá áŤáá ááľáŽáľ á ááá°áá stm8_interrupt_vector.c
á ááŽáááą ááľáĽ á áŤáľ-á°á á°áŤáˇá. á áá
ááá ááľáĽ á¨áĽáŤááłááą áááŤá¨áĽ áá á ááľ á°ááŁá á°áŤáááᢠNonHandledInterrupt
. á°ááŁáŤá˝áá á¨á°áááá áááŤá¨áĽ áá áá°á á ááĽáá˘
á¨ááἠáá á¨ááááááá á¨ááááá áľ á¨á ááŤá áŹáá°á á áá á¨áĽ á áááĄ
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;
}
ááá¨áŚá˝á áááááľ áááŤáᢠáá
á¨áá¨áááá á á á°áŁáłá˘ áľáĽáá ááᢠrim
- áĽáąá áááá á ááĽááľ
//enable interrupts
_asm("rim");
áá á°áĽáłá˘ áááŞáŤ- sim
- ááá¨áŚá˝á áŤá áá. á á˛áľ áĽá´áśá˝ áá° "á¨áŞá˛áŽ áá
á°á¨ áľááľáł" á ááťáá áľ áá áá°áá¨á á ááŁá¸á áľááá
á á áłáá áá á¨á°áá á¨á ááá¨áĽ áľááľáá áĽááłáŤá áá˝á˘
ááá áŽáľ -
áá á˝áá á˘áŤááľ á ááľ á°á á áá á¨áá áĽá á á¨ááą á ááťááŠáᢠáá áľá°áŤá¨áśá˝ áĽá á áľá°áŤá¨áśá˝ á°áľ áááá, áááá áááááľ áĽáááŤáá.
ááá: hab.com