Ð
áá®áá±á·áá±á¬á· áá±á¬áºáá±á¬áºááá¯ážááŸááºážáá±ááá·áº ááá±á¬áá»ááºáá»á¬ážá áœá¬á STM32 (Blue Pill) áá²á· STM8 controllers ááœá±ááŸá¬ ááá¯á¡ááºáá²á· áá¯ááºáá±á¬ááºá áá¬ááœá±ááᯠááŒá±ááŸááºážááá¯á· áá±áá¬á á¬ááœááºááœá±ááᯠáááºááá¯á¡áá¯á¶ážááŒá¯áááá²ááá¯áᬠáááºááŒáá«áááºá ááá¯ááºááŒááá±á¬áá»ááºá¡á¬ážáá¯á¶ážááẠáá»áœááºá¯ááºááŸá áºáááºáá±á¬ LED áá®ážáá»á¬ážá¡ááœáẠáááºá á°ážáá¬ážáá«áááºá áááºážááá¯á·ááᯠáá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá±á¬ááºá¡ááŒá¬ážááŒáá·áº á¡áááºážáá±ážáááºááŒá áºááŒá®ážá á áááºáááºá á¬ážá áá¬áá±á¬ááºážáá±á¬ á¡áá¶áá á¹á ááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááááºááŒá áºáá«áááºá
á á¬áá¬ážá ááŒá®ážáá¬ááŒááºááẠááá¯áá±á¬á· á¡áááºááŒá±ááá¯á·á¡ááœáẠáá»áœááºáá±á¬áº á¡ááŒá±á¬ááºážá¡áá¬ááᯠáááºáá®ážáá±áá«áááº-
ááŒááºážááá¯áá»ááº- áá»áœááºá¯ááºááẠá¡ááºáá»ááºáá®áá¬ááá¯ááºáá«á á¡á®áááºáááœááºážáá áºááá¬ááœáẠáááºáá²áá±á¬á¡ááááá¬ááŸáááẠááááºáá±á¬ááºáá«á áá±á¬ááºážáá«ážááẠáá»áœááºá¯ááºáá²á·ááá¯á· á¡áá»á±á¬áºáááºážáá»á¬ážá¡ááœáẠáááºááœááºáá«áááºá á¡ááŸááºáá±á¬á·á ááœááºáá²á·áá²á· ááŸá áºááŸá áºáá±á¬ááºá ááá¯áá·áºááá¯ááºááᯠáá áºááŸááºáá¬ážáá²á· ááááááºááá¯á· áááºááŸááºáá²á·áááºá á¡áááºá áá áºáá±á¬ááºáá±á¬ááºá áá»áœááºáááᯠááááá±ážáá²á· áá»á áºááºááŒá¬ážáá±á«áºá áá±áá¬á á¬ááœááºááœá±ááᯠáááºááᬠááŒá±á¬ááºá áá¬ááá¯ááºáá°ážá á¡ááºáá¬áááºáá±á«áºá áá¯ááºá¡ááá¯ááºážá¡á ááœá±ááᯠááŸá¬ááŒá®áž áááºááŒá±ážáá²á· áá±á¬áºááááºáá²á· áá»áá¯ááºážáá±á¬ááºááœá±ááᯠáá®ááœááºááá¯á· á¡áá»áááºá¡áá»á¬ážááŒá®áž ááá¯ááºáá«áá°ážá
á€áá±á¬ááºážáá«ážá á¡á¬áá¯á¶ááŸá¬ ááá±á¬áá»ááºáá»á¬ážááá¯ááºáá² áá±áá¬á á¬ááœááºáá»á¬ážáá±á«áºááœááºáᬠááŒá áºáá±á¬ááŒá±á¬áá·áº áá¯ááºááẠá¡ááœááºáááºáááºááŒá®áž áááŒá¬áá áá»ááºážáá»ááºáá±áááºááá¯ááºáá«á ááá±á¬áá»ááºáá»á¬ážááẠáá»á áºááºá¡áá áºááŸáá·áº ááááá¯á¶ážáááºážááŸá®ážáá°á¡ááœáẠááá·áºáá»á±á¬áºáá±á¬áºáááºáž ááá±á¬áá»ááºáá»á¬ážááẠá¡ááœááºááá¯ážááŸááºážáá«áááºá
áá»áœááºá¯ááºááá±á¬ááºážáá«ážááẠáá«ááá¬á ááŸá áºááŒáŸá¯ááºááŒááºážá á¡áá¬ážáá°á¡ááá·áºááœáẠáá áºá á¯á¶áá áºáŠážááᯠáá°áá®áá±ážáááá·áºáááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá
STM32
DM16 ááŸáá·áº SPI áá«ááŸááá±á¬ LED 634 áá¯
Blue Pill (STM32F103C8T6) ááŸáá·áº DM634 LED áááá¯ááºáá¬ááᯠá¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ ááá±á¬áá»ááºáááºá áá±áá¬á á¬ááœááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áá¬ááºáá±á¬ááºážá STM IO á¡áá±á«ááºáá»á¬ážááᯠááŸá¬ááœá±ááŒá®áž SPI ááᯠááŒááºáááºáááºááŸááºáá«áááºá
DM634
16 16-bit PWM á¡ááœááºáá»á¬ážáá«ááŸááá±á¬ ááá¯ááºááẠáá»á
áºááºááŒá¬ážááᯠááœááºážáááºáá»á¬ážááŒáá·áº áá»áááºáááºááá¯ááºáááºá á¡áááá·áºáá¯á¶áž 12-bit áá±á¬áºáááºááᯠááŒááºááœááºážááá±á¬áá»ááºáá
áºáá¯á០ááááŸááááºá
áá¯ááºáá¯ááºáá°á ááá¯ááºáááºá
DC Sink á¡áááºážá¡ááŒá
áºáá»á¬áž (Open Drain)
áá Ạ/ á¡ááœááº-ááŒá±á¬ááºážááœáá·áº - áá±áá¯ááºááŒá±á¬ááºáž; á á®ážáááºážáá±áá±á¬áá»áŸááºá á®ážááŒá±á¬ááºážá¡áááºážá¡ááŒá áº; á¡ááœááºááᯠáááºááŒáœáá±á¬á¡ááŒá±á¡áá±ááœáẠááŒá±ááŒááºááŸáá·áºáá»áááºáááºáá¬ážááẠ- LEDs áá»á¬ážááᯠcathodes ááŒáá·áº driver ááá¯á·áá»áááºáááºáá¬ážáááºá áá»áŸááºá á áºá¡á¬ážááŒáá·áºá á€áááºááŸá¬ âááœáá·áºáá¬ážáá±á¬ ááŒá±á¬ááºážâ ááá¯ááºáá«áááŒá±á¬ááºážááœáá·áº) ááá¯á·áá±á¬áº áá±áá¬á á¬ááœááºáá»á¬ážááœáẠááŒá±á¬ááºážáá¯ááºááœáẠáááºáá»á¬ážáááºááŸááºááŒááºážááᯠáááŒá¬ááááœá±á·ááááºá
á¡ááœááºáááºááŸááááºááá¯ážááá¯áááºááŸááºááẠREXT ááŸáá·áº GND ááŒá¬ážááŸá ááŒááºááá¯áá¶á¡á¬ážáá»á¬áž
á¡ááœááºáá»á¬ážá á¡ááœááºážáá¶á¡á¬ážááᯠááááºážáá»á¯ááºááá·áº REXT pin ááŸáá·áº ááŒá±ááŒááºááŒá¬ážááœáẠáááºááœáŸááºážáá¶ááá¯ááºáááºá¡á¬áž áááºáááºáá¬ážáááºá áá±áá¬á á¬ááœááºá á á¬áá»ááºááŸá¬ 9 ááŸá ááááºááᯠááŒáá·áºáá«á DM634 ááœááºá á€áá¯áá¶á¡á¬ážááᯠáá±á¬á·ááºáá²ááºááŸáááºáž ááááºážáá»á¯ááºááá¯ááºááŒá®áž á¡áá¯á¶ážá á¯á¶áá±á¬ááºáááŸá¯ááᯠáááºááŸááºááŒááºáž (ááá¹áá¬áá¯á¶ážááá¯ááºáᬠáá±á¬ááºáááŸá¯); á€áá±á¬ááºážáá«ážááœáẠá¡áá±ážá áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠáá»áœááºá¯ááºááá±á¬áºááŒáá¬ážáá«á áá»áœááºá¯ááºááẠ2.2 - 3 kOhm resistor ááᯠá€áá±áá¬ááœááºáááºááá¯ááºáá«áááºá
áá»á áºááºááᯠááááºážáá»á¯ááºáááºážááᯠáá¬ážáááºáááºá á ááºá áá»ááºááŸá¬ááŒááºáá±á¬áºááŒáá»ááºááᯠááŒáá·áºááŒáá«á áá¯á·á
áá¯ááºáááºá áá«á ááá¯áẠá¡ááºá¹áááááºááᯠáá¯ááºáá»ááºááá± ááŸááááºá áááºážááᯠáá¬áá¬ááŒááºááŒááºážááẠááŒá¿áá¬ááŸááá«áááºá áááºááá¹áááŸááá»áŸáẠáá¬ážáááºááá¯ááºáááºá ááá¯á·áá±á¬áº á¡ááŒá¬ážáááºážáááºážáá áºáá¯ááŸááá«ááẠ- á¡áá¬ážáá° TLC5940 ááŸáá·áº áá»áááºáááºáá¯á¶ááᯠáá±áá¬á á¬ááœááºááœáẠáá±á¬áºááŒáá¬ážáááºááᯠááŒáá·áºááŸá¯áá«á
... á
ááºáá²ááá¯á· áá±áá¬ááá·áºááẠáááºáá¶áá«ááºáá¯á¶ážáá»á±á¬ááºážáᬠááá¯á¡ááºáááºá SCLK á¡áá»ááºááŒááŸá¯á ááŒáá·áºáááºáá¬áá±á¬ á¡á
áœááºážááẠSIN áááºáá¶áá«ááºá០áá±áá¬áá»á¬ážááᯠá¡ááœááºážááá¯ááºáž ááŸááºáá¯á¶áááºááŒááºážááá¯á· áá°ážááŒá±á¬ááºážáááºá áá±áá¬á¡á¬ážáá¯á¶ážááᯠáááºááŒá®ážáá±á¬á¡áá«á ááá¯áá±á¬ááºážáá±á¬ ááŒáá·áºáá¬ážáá±á¬ XLAT á¡áá»ááºááŒááŸá¯ááẠáá±áá¬áá»á¬ážááᯠá¡ááœááºážááá¯ááºáž ááŸááºáá¯á¶áááºáá»á¬ážáá²ááá¯á· ááá·áºáá²ááœáŸá²ááŒá±á¬ááºážáá±ážáááºá á¡ááœááºáž ááŸááºáá¯á¶áááºááŒááºážáá»á¬ážááẠXLAT á¡áá»ááºááŒá¡ááá·áºá០á¡á
áá»áá¯ážááá·áº ááááºáá»á¬ážááŒá
áºáááºá áá±áá¬á¡á¬ážáá¯á¶ážááᯠáááá¬áááºááŸá¬ážáá±á¬áááºážáááºážááŒáá·áº ááááŠážá
áœá¬ áá±ážááá¯á·áá«áááºá
áá¶áá«ážáá»áẠ- áááºááá¯áẠ/ áááºááá¯áẠ/ áá±á¬á·áááºá
á¡á
áœááºážáá»á¬ážáá¬ááŒááºáž - ááœá±ážáá¯ááºááŸá¯ááºážááŠážáá±á¬ááºá¡á
áœááºáž
MSB ááá¯á¡áááºáá¯ááºáá«á - á¡áááºááŸá¬ážáá¯á¶áž (áááºáá²á
áœááºáž) ááŸá±á·ááá¯á· á¡áááºážáááºá
áá¬áá®áá±áá¬á¡ááœáẠ- áá±áá¬ááᯠáááºááá¯áẠ(áá
áºáááºážáááºážáá»ááºáž) ááá¯á·áá«á
á áá¬ážáá¯á¶áž áá¶áá«ážáááŸá¬ áá»á áºááºáá»á¬ážá¡ááœáẠá á¬ááœááºá á¬áááºážáá»á¬ážááœáẠááœá±á·ááá±á·ááŸáááŒá®áž áá¯á¶á á¶á¡áá»áá¯ážáá»áá¯ážááŒáá·áº áá¬áá¬ááŒááºáá¬ážáááºá ááá¯á·ááŒá±á¬áá·áº áá¬ážáááºááá¯ááºá á±áááºá¡ááœáẠáá»áœááºá¯ááºááá¯ááºááá¯áẠááœáá·áºááŒá¯áá«áááºá
ááá¬áá±ážá¡á á®á¡á ááºáá±ážáá áºáá¯LED Driver ááẠá¡áááá¡á¬ážááŒáá·áº shift register áá áºáá¯ááŒá áºáááºá "ááá¯ááºáž" (á¡ááá¯ááºáž) á¡áááºááŒáá·áº - á ááºá¡ááœááºážááŸá áá±áá¬áá»á¬ážá á¡áááºážáááºáá»áŸáá±á¬ ááœá±á·áá»á¬ážááŸá¯- á¡ááœááºážááœáẠááœááºážáá¯ááºáá¬ážáá±á¬ áá áºá¡áá áºáá áºáá¯á á®ááẠááœááºážáááºáá áºáá¯áá¯á¶ážááᯠáááºážáááŸá±á·ááá¯á· ááœááºážááá¯á·áááºá á¡ááá¯ááºážá¡ááœááºáž LED áá»á¬áž áááá¯ááá² ááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸáááºáá¯ááºááŸá¯ááºáá±áááºááá¯á¡áááºáá°áá»áŸááááááŒá¯áá»ááºáá±á¬ááŒá±á¬áá·áºááá¶áá«ážáááŸá¬) ááẠbit áá»á¬ážááᯠááá¯áá»ááºáá±á¬ sequence ááŒáá·áº á á®á ááºáá±ážááá·áº á á±á¬áá·áºááá¯ááºážáááºáž á¡áá»áá¯ážá¡á á¬ážááŒá áºáááºá á¡á¬ážáá¯á¶ážá¡áááºááá·áºááŒá áºáá±á¬á¡áá«á ááŸááºáá¬ááœáá·áºáá¬ááŒá®áž ááááºá¡áá¯ááºááᯠá¡á á¬ážááá¯ážáᬠáá áºáá»á¬ážá¡áá¯ááºáá¯ááºááœá¬ážáá«áááºá á áá¬ážáá¯á¶áž áá¶áá«ážáááŸá¬ microcircuits áá»á¬ážá¡ááœáẠá á¬ááœááºá á¬áááºážáá»á¬ážááœáẠáááºážááᯠáááºááá·áºáá±á«ááºážá ááºááŸá¯áá»á¬ážááœááºáááᯠá¡áá¯á¶ážááŒá¯áááºááŒá áºá á± ááá¯áá²á·ááá¯á·áá±á¬ damper ááᯠá¡ááŒá²ááá¯ááᯠá¡áááá¹áá¬ááºáááºáá±á¬ááºáááºá
ááá¯á·ááŒá±á¬áá·áºá DM634 ááá¯á· áá±áá¬ááœáŸá²ááŒá±á¬ááºážááŒááºážááᯠá€áá²á·ááá¯á·áá¯ááºáá±á¬ááºáááº- DAI input ááᯠá¡áá±áž LED á á¡áá°ážááŒá¬ážáá¯á¶ážáááºááá¯ážá¡ááŒá ẠáááºááŸááºáá«á DCK á¡áá±á«áºááŸáá·áº á¡á±á¬ááºááœá²áá«á DAI input ááᯠáá±á¬ááºáá áºááááºááá¯ážá¡ááŒá ẠáááºááŸááºááŒá®áž DCK ááᯠááœá²áá¯ááºáá«á bits á¡á¬ážáá¯á¶ážááᯠáá°ážá ááºááŒá®ážáááºá¡áá á áááºááá¯á·ááœááºáá¡áá»áááºáá¬áá®á¡ááœááºáž) ááŒá®ážááẠLAT ááᯠááœá²áá¯ááºááá¯ááºáá«á áááºážááᯠááá¯ááºááá¯ááºáá¯ááºáá±á¬ááºááá¯ááºááẠ(áá áºáááºáž) ááá¯á·áá±á¬áº áááºážááᯠáá»áœááºá¯ááºááá¯á·á STM32 ááœáẠáááá¹áá°ááŸá áºá á±á¬ááºááŒáá·áº áááºááŒáá¬ážáá±á¬ááŒá±á¬áá·áº áááºážá¡ááœáẠá¡áá°ážá¡á¶áááºááœááºáá»ááŒá áºáá±á¬ SPI interface ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááẠááá¯áá±á¬ááºážáá«áááºá
á¡ááŒá¬áá±á¬ááºáá±ážááŒá¬áž STM32F103
áááá«ááºáž- STM32 ááááºážáá»á¯ááºáááááá¬áá»á¬ážááẠAtmega328 ááẠáá»á¬ážá
áœá¬ááá¯á ááŸá¯ááºááœá±ážááŒá®áž ááŒá±á¬ááºá
áá¬áá±á¬ááºážáá¯á¶ááááºá ááá¯á·á¡ááŒááºá á
áœááºážá¡ááºáá»áœá±áá¬ááŒááºážá¡ááœááºá á¡áá¶áááááá¬á¡á¬ážáá¯á¶ážáá®ážáá«ážááᯠá¡á
ááœáẠááááºáá¬ážááŒá®áž áá¬áá®ááŒáááºááŸá¯ááºážááẠá¡ááœááºážááá¯ááºážá¡áááºážá¡ááŒá
áºá០8 MHz ááŒá
áºáááºá áá¶áá±á¬ááºážáá±á¬ááºáá
áœá¬á STM áááá¯ááááºáá¬áá»á¬ážááẠchip ááᯠ"calculated" 72 MHz á¡áááá°áá±á¬ááºáá¬áá±ážáá±á¬áá¯ááºááá¯áá±ážáá¬ážáá²á·ááŒá®ážá áá»áœááºá¯ááºáááá±á¬ IDE áá»á¬ážá¡á¬ážáá¯á¶ážáá
á¬áá±ážááá¬áá»á¬ážáááºáááºážááá¯á¡á
ááŒá¯ááŒááºážáá¯ááºáááºážá
ááºááœááºááá·áºááœááºážáá¬ážáá±á¬ááŒá±á¬áá·áºáá»áœááºá¯ááºááá¯á·áááºáá¬áá®ááá¯áááá¯á¡ááºáá« (ááá¯á·áá±á¬áº
á á¬ááœááºá á¬áááºáž- Blue Pill ááᯠáá¬áááºááŒá®áž STM32F103C8T6 áá»á áºááºááŒáá·áº áááºáááºáá¬ážááŒá®ážá áááºážá¡ááœáẠá¡áá¯á¶ážáááºáá±á¬ á á¬ááœááºá á¬áááºáž ááŸá áºáá¯ááŸááááºá
á¡áá»ááºá¡áááºá á¬ááœáẠááá¯ááºáááá¯ááœááºáááá¯áá¬áá»á¬ážá¡ááœáẠSTM32F103x8 ááŸáá·áº STM32F103xB;ááá¯ážáá¬ážá áá¬áááºá áœá²á á¬á¡á¯áẠSTM32F103 ááá¯ááºážáá áºáá¯áá¯á¶ážááŸáá·áº á¡ááŒá¬ážá¡áá¬áá»á¬ážá¡ááœááºá
áá±áá¬á á¬ááœááºááœáẠáá»áœááºá¯ááºááá¯á· á áááºáááºá á¬ážááá¯ááºáááº-
- áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºáá»á¬ážááᯠááá¯ááºááá¯ááºááŒá¯áá¯ááºááẠáá¯á¶ážááŒááºááá·áºá¡áá«ááœáẠáááºááœááºáá»á¬áž â áá»á áºáẠpinouts áá»á¬ážá
- Memory Map - áá®ážááŒá¬ážáá»á áºááºáá áºáá¯á¡ááœáẠááŸááºáá¬ááºááŒá±áá¯á¶á á¡ááá¯ážá¡áá¬ážáááºá áœá²á á¬á¡á¯ááºááœáẠá á¬ááŒá±á¬ááºážáá áºááŒá±á¬ááºážáá¯á¶ážá¡ááœáẠááŒá±áá¯á¶áá áºáá¯áá«ááŸáááŒá®áž áá»áœááºá¯ááºááá¯á·ááœááºáááŸááá±á¬ ááŸááºáá¯á¶áááºáá»á¬ážááá¯áá±á¬áºááŒáá¬ážáááºá
- Pin á¡áááá¹áá¬ááºááœáá·áºááá¯áá»ááºááá¬áž â áááºááááºáááŸáá·áº á¡ááŒá¬ážááœá±ážáá»ááºá áá¬áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá á¬áááºážááŒá¯á á¯ááŒááºážá "á¡ááŒá¬áá±á¬ááºáá±ážááŒá¬áž" á¡ááœáẠáááºáá¶áá«ááºáá»á¬ážááŸáá·áº áááºážááá¯á·ááá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡ááºáá¬áááºáá±á«áºááœáẠááá¯ááá¯á¡áááºááŒá±áá±á¬áá¯á¶áá»á¬ážááᯠáááºááŸá¬ááœá±ááá¯ááºáá«áááºá ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á· áá»ááºáá»ááºáž google Blue Pill ááᯠpinout áá¯ááºááŒá®áž á€áá¯á¶ááᯠáááºáá²ááœáẠááááºážáá¬ážáá«áááº-
NB- á¡ááºáá¬áááºá០áá¯á¶ááœáẠá¡ááŸá¬ážá¡ááœááºážáá
áºáá¯ááŸááá«áááºá ááŸááºáá»ááºáá»á¬ážááœáẠááŸááºáá¬ážáá¬ážáá±á¬ááŒá±á¬áá·áº áá»á±ážáá°ážáááºáá«áááºá áá¯á¶á¡á¬áž á¡á
á¬ážááá¯ážáá¬ážáááºá ááá¯á·áá±á¬áº á€á¡áá¬ááẠáááºáááºážá
á¬áá
áºáá¯ááŒá
áºááẠ- áá±áá¬á
á¬ááœááºáá»á¬ážááŸááá¯ááºáá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááᯠá
á
áºáá±ážááŒááºážááẠááá¯áá±á¬ááºážáá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠáá±áá¬á
á¬ááœááºááᯠáááºááŸá¬ážááŒá®áž á¡ááá¯ážá¡áá¬ážáááºá
áœá²á
á¬á¡á¯ááºááá¯ááœáá·áºáᬠááá¯ááŸá
ááŒá®áž áááºážááá¯áᬠá¡áá¯á¶ážááŒá¯áá«áááºá
áá¯ááºáá¯á¶ážáá¯ááºáááºáž- áá»áœááºá¯ááºááá¯á·ááẠá
á¶ááá·áºááœááºážááŸá¯/á¡ááœááºááᯠááá¯ááºááœááºááŒá±ááŸááºážáááºá SPI ááᯠá
á®á
ááºáááºááŸááºáááºá ááá¯á¡ááºáá±á¬ á¡áá¶áá
á¹á
ááºážáá»á¬ážááᯠááœáá·áºáá±ážáááºá
Input Output
Atmega328 ááœááºá I/O ááᯠá¡ááœááºááá¯ážááŸááºážá áœá¬ á¡áá±á¬ááºá¡áááºáá±á¬áºáá¬ážáá±á¬ááŒá±á¬áá·áº STM32 ááœá±ážáá»ááºá áá¬áá»á¬áž á¡áá»á¬ážá¡ááŒá¬ážááᯠááŸá¯ááºááœá±ážá á±ááá¯ááºáááºá ááᯠáá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºáá»ááºáá»áááºáᬠááá¯á¡ááºáá±á¬áºáááºáž áááºážááá¯á·áááºáá»áŸáẠááœá±ážáá»ááºá áᬠáá±ážáá¯ááŸááááºá
open drain á push-pull á alternative push-pull á alternative open drain á
"ááœá²-ááœááºáž" (ááœááºážááœá²) ááẠArduino á០áá¯á¶ááŸááºá¡ááœááºááŒá
áºááŒá®áž pin ááẠáááºááá¯ážááᯠHIGH ááá¯á·ááá¯áẠLOW ááŒáá·áº áá°ááá¯ááºáááºá áá«áá±ááá·áº "open Drain" áá²á·áá±á¬á· ááŸááááºá
á¡ááœááºááœá²á·á
ááºážááŸá¯áá¯á¶á
ᶠ/ á¡ááœááºááœááºážááẠááááºáááºážááᯠáá¬áááºáá±ážá¡ááºááá·áºá¡áá«- / á¡ááœááºááŒá¬ážáá¶ááᯠááœáá·áºáá¬ážáááº- / â á¡ááœááºáá±á
á®ážááŒá±á¬ááºážááœáá·áºááá·áºáá¯ááº- á¡ááœááºááŸááºáá¯á¶áááºááŸá â0â ááᯠN-MOS ááᯠááœáá·áºáá±ážáááºá á¡ááœááºááŸááºáá¯á¶áááºááŸá â1â ááẠááááºáááºážááᯠHi-Z áá¯ááºááœáẠáá¬ážáá²á·ááẠ( P-MOS ááᯠá¡áááºáááœááºážááá±ážáá« ) / â ááœááºážááœá²áá¯ááº- á¡ááœááºááŸááºáá¯á¶áááºááŸá â0â ááẠN-MOS ááᯠá¡áááºáááºá
á±áááºá á¡ááœááºááŸááºáá¯á¶áááºááŸá â1â ááẠP-MOS ááᯠá¡áááºáááºá
á±áááºá
open drain á¡ááŒá¬áž ááŒá¬ážáá¬ážáá»ááºá¡á¬ážáá¯á¶áž (ááŒá±á¬ááºážááœáá·áº) "ááœááºážááœá²ááŒááºáž" á០(ááœááºážááœá²) ááẠááá pin ááœáẠHIGH state ááᯠáááºááá¶ááá¯ááºáááŒááºážááŒá áºáááºá áá áºáá¯ááẠoutput register ááá¯á· á á¬áá±ážáá±á¬á¡áá«á áááºážááẠhigh resistance mode ááá¯á·áá±á¬ááºááœá¬ážááẠ(ááŒáá·áºáá¬ážáá±á¬ impedance, ááá¯ááºáá®áž) áá¯áááá¯áá±ážáá±á¬á¡áá«ááœááºá áááºááẠáá¯áá¹áááá±áááŸáá·áº áá»áŸááºá á áºááŒáá·áº áá¯ááºááŸá áºáá¯á áá¯á¶ážááœáẠáá°áá®áááºá
áá¯á¶ááŸáẠoutput mode ááœáẠpin ááẠoutput register á á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠááá¯ážááá¯ážááŸááºážááŸááºážáá¯ááºááœáŸáá·áºáááºá "á¡ááŒá¬ážááœá±ážáá»ááºá áá¬" ááœáẠáááºááá¯ááºáᬠá¡áá¶áá á¹á ááºážáá»á¬ážá ááááºážáá»á¯ááºáá¬ážááẠ(á.á.á ááá¯ááŒáá·áºáá«)á
ááá¯á·ááºáá
áºáá
áºáá¯á¡á¬áž á¡ááŸáá·áºáá»áá¯ááºáá±á¬ááºááŸá¯áááºáá¶áá«ááºá¡ááŒá
ẠááŒááºáááºáááºááŸááºáá«áá áááºáá¶áá«ááºááŸááºáá¯á¶áááºááŒááºážááᯠááááºáá¬ážááŒá®áž áááºááᯠá¡áá¶áááºááá¯á· áá»áááºáááºáá¬ážáááºá
áááºáá¶áá«ááºáá áºáá¯á á®á á¡á á¬ážááá¯ážáá¯ááºáá±á¬ááºááá¯ááºá áœááºážááᯠááœááºáá±á¬áºááŒáá¬ážáááºá á¡áááá¹áá¬ááºáááºááŸááºáá»ááºáá»á¬áž áá±áá¬á á¬ááœááºááẠáá±á«ááºážáá¯ááºáá¯ááºáá¬ážáá±á¬ áá¯á¶áá±á«áºááœáẠááŸááá±áááºá áááºáá¶áá«ááºááœáẠá¡á á¬ážááá¯ážáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá áœá¬áá«ááŸááá»áŸáẠáá¬áá¯ááºááááºáááºážá
á¡áá¶áááááá¬áá»á¬ážá
áœá¬ááẠáá°áá®áá±á¬áááºááá¯á¡áá¯á¶ážááŒá¯áá«áá á¡ááŒá¬ážáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŒá¬ážááœáẠáááááá¹ááááŒá
áºá
á±áááºá áá
áºáá»áááºáááºážááœáẠá¡áá¶áááááá¬áá
áºáá¯ááá¯áᬠá¡áá¯á¶ážááŒá¯ááá·áºáááºá á¡áá¶áá¬áá®ááᯠááœáá·áºááá·áºáá
áºááᯠá¡áá¯á¶ážááŒá¯á á¡ááœáá·áºá¡ááááºáá¯ááºáá« (ááá·áºáá»á±á¬áºáá±á¬ RCC ááŸááºáá¯á¶áááºááŸá¯ááœááº)á
áá±á¬ááºáá¯á¶ážááœááºá á¡ááœááºáá¯ááºááŸá pins áá»á¬ážááẠclock speed ááŸááááºá á€áááºááŸá¬ á áœááºážá¡ááºáá»áœá±áá¬ááá¯ááºáá±á¬ á¡ááºá¹áá«áááºááŒá áºáááºá áá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¡áá±ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááᯠá¡áá»á¬ážáá¯á¶ážáááºááŸááºáá¬ážááŒá®áž áááºážááᯠáá±á·áá áºááá¯ááºáá¯á¶áá¬ááŒá áºáááºá
ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠSPI ááá¯á¡áá¯á¶ážááŒá¯áá±áááºá ááá¯ááá¯áááºááŸá¬ áááºáá¶áá«ááºááŸá áºáá»á±á¬ááºáž (áá±áá¬ááŸáá·áº áá¬áá®á¡áá»ááºááŒá áá áºááŒáá·áº) ááẠâá¡á á¬ážááá¯áž ááœááºážááœá²ááŒááºážáá¯ááºáá±á¬ááºáá»ááºâ ááŒá áºááá·áºááŒá®áž á¡ááŒá¬ážáá áºáᯠ(LAT) ááẠâáá¯á¶ááŸáẠááœááºážááœá²ááŒááºážâ ááŒá áºááá·áºáááºá áá«áá±ááá·áº áá°ááá¯á·ááᯠáá¬áááºááá±ážááẠSPI ááᯠááá¯ááºááœááºááŒáá·áºáá¡á±á¬ááºá
SPI
áá±á¬ááºááẠááá¬áá±ážá¡á á®á¡á ááºáá±ážáá áºáá¯
SPI ááá¯á·ááá¯áẠSerial Peripheral Interface (serial peripheral interface) ááẠMK ááᯠá¡ááŒá¬ážáá±á¬ MKs áá»á¬ážááŸáá·áº áá±áá¯áá»á¡á¬ážááŒáá·áº ááŒááºáááá¹áá¬ááŸáá·áº áá»áááºáááºáááºá¡ááœáẠááá¯ážááŸááºážááŒá®áž á¡ááœááºáááá±á¬ááºáá±á¬ á¡ááºáá¬áá±á·á áºáá áºáá¯ááŒá áºáááºá áááºážááá¯ááºáá±á¬ááºáá»ááºááááá¬áááá¯á¡áááºááœááºáá±á¬áºááŒáá²á·ááŒá®ážááŒá áºáááºá ááá¯áẠLED áááá¯ááºáᬠ(ááá¯ážáá¬ážáá»ááºáááºá áœá²ááœááºá á¡ááá¯ááºáž 25 ááá¯ááŒáá·áºáá«) á SPI ááẠáá¬á áᬠ(âáá¬á áá¬â) ááŸáá·áº áá»áœáẠ(âáá»áœááºâ) áá¯ááºááœáẠáááºáááºááá¯ááºáááºá SPI ááœáẠá¡ááŒá±áá¶áá»ááºááẠáá±ážáᯠááŸáááŒá®áž áááºážááá¯á·á¡ááẠá¡á¬ážáá¯á¶ážááᯠá¡áá¯á¶ážáááŒá¯ááá¯ááºáá«á
- MOSIá Master Output/Slave Input- á€áááºáá¶áá«ááºááẠáá¬á áá¬áá¯ááºááœáẠáá±áá¬ááᯠááá¯á·ááœáŸááºááŒá®áž slave áá¯ááºááœáẠáá±áá¬ááᯠáááºáá¶áá«áááºá
- MISOá Master Input/Slave Output- ááá·áºáá»ááºáááºááœááºá áááºážááẠáá¬á áá¬ááœáẠáááºáá¶áááŸáááŒá®áž áá»áœááºá¡ááŒá áºááá¯á· áá±ážááá¯á·áááºá
- SCKá á¡ááŸááºá ááºáá¬áá®- áá¬á áá¬ááœáẠáá±áá¬áá¯ááºááœáŸáá·áºááŸá¯á¡ááŒáááºáá±ááᯠáááºááŸááºááẠááá¯á·ááá¯áẠáá»áœááºááœáẠáá¬áá®á¡áá»ááºááŒááŸá¯ááᯠáááºáá¶áááºá á¡áááá¡á¬ážááŒáá·áº ááá¯ááºáá»ááºáá»á¬ážá
- SSá Slave Select- á€áá»ááºáááºáá¡áá°á¡áá®ááŒáá·áºá áá°á·áá¶ááŸáá áºáá¯áá¯ááá¯áá»ááºáá±ááŒá±á¬ááºáž áá»áœááºááááááºá STM32 ááœáẠNSS áá¯áá±á«áºááŒá®áž N = á¡ááŸá¯ááºá ááá¯ááá¯áááºááŸá¬á á€áá»ááºáááºááœáẠááŒá±ááŒááºááŸááá«á controller ááẠáá»áœááºááŒá áºáá¬áá«áááºá áááºážááẠOpen Drain Output áá¯ááºááŸáá·áº áá±á¬ááºážááœááºá áœá¬ áá±á«ááºážá ááºáá¬ážáá±á¬áºáááºáž áááºážááẠá¡ááŒá¬ážáá¬ááºáááºážááŒá áºáááºá
á¡ááŒá¬ážá¡áá¬á¡á¬ážáá¯á¶ážáá²á·ááá¯á·áááºá STM32 ááŸá SPI ááẠáá¬ážáááºááááºá á±áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºážááẠSPI ááŸáá·áºáá¬áá I2S á¡ááºáá¬áá±á·á áºáá áºáá¯ááŸáá·áºáááºáž áá¯ááºáá±á¬ááºááá¯ááºááŒá®áž á á¬ááœááºá á¬áááºážáá»á¬ážááœáẠáááºážááá¯á·ááá±á¬áºááŒáá»ááºáá»á¬áž áá±á¬ááœá±ážáá±ááŒá®ážá ááá¯áá»áŸá¶áá±áá±á¬ááá¬áááᯠá¡áá»áááºáá®ááŒááºáá±á¬ááºááẠááá¯á¡ááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááá¬áááºááŸá¬ á¡ááœááºááá¯ážááŸááºážáá«áááº- áá»áœááºá¯ááºááá¯á·ááẠMOSI ááŸáá·áº SCK ááá¯á·ááá¯áᬠá¡áá¯á¶ážááŒá¯á áá±áá¬áá±ážááá¯á·ááẠááá¯á¡ááºáá«áááºá á¡ááá¯ááºáž 25.3.4 (half-duplex communicationá half-duplex communication) ááá¯ááœá¬ážáá«á áá¬áá® á áá¯á¶ážááŸáá·áº áá áºáááºááẠáá±áá¬áá«áá¬ááŒáá¯áž á áᯠ(áá¬áá®á¡áá»ááºááŒááŸá¯ 1 áá¯ááŸáá·áº áá áºáááºáááºáááºážááŒá±á¬ááºáž áá±áá¬á á®ážááŒá±á¬ááºáž 1 áá¯):
á€áá¯ááºááœááºá á¡ááá®áá±ážááŸááºážááẠááá¯á·ááœáŸááºááŒááºážáᬠááá¯á·ááá¯áẠáááºáá¶ááŒááºážáá¬áá¯ááºááœáẠSPI ááᯠá¡áá¯á¶ážááŒá¯áááºá / Transmit-only mode ááẠduplex mode ááŸáá·áº áááºáá°áááº- transmit pin (MOSI in master mode or MISO in slave mode) ááœáẠdata ááᯠtransmit áá¯ááºáá¬ážááŒá®áž áááºáᶠpin (MISO ááá¯á·ááá¯áẠMOSI á¡áá®ážáá®áž) ááᯠáá¯á¶ááŸáẠI/O pin á¡ááŒá
Ạá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá . á€ááá
á¹á
ááœááºá á¡ááá®áá±ážááŸááºážááẠRx ááŒá¬ážáá¶ááá¯áá»á
áºáá»á°ááŸá¯áááºáá¬ááá¯á¡ááºááẠ(áááºážááá¯áááºáá«áá ááá¯áá±áá¬ááœááºááœáŸá²ááŒá±á¬ááºážáá±áá¬ááŸááááºááá¯ááº)á
áá±á¬ááºážááŒá®á MISO áááºáá¶áá«ááºááẠá¡ááá²á·ááŒá áºáááºá áááºážááŸáá·áº LAT á¡áá»ááºááŒááŸá¯ááᯠáá»áááºáááºááŒáá«á áá¯á·á STM32 ááœáẠá¡ááœááºá¡áááºááŒá±ááá·áº áááá¯ááááºááŒáá·áº ááááºážáá»á¯ááºááá¯ááºááá·áº Slave Select ááᯠááŒáá·áºááŒáá«á áá¯á·á áá¯ááºá 25.3.1 SPI á¡ááœá±ááœá±áá±á¬áºááŒáá»ááºááœáẠá¡áááºáá°á á¬ááá¯ááºááᯠáá»áœááºá¯ááºááá¯á· áááºááŒáááº-
áá±á¬á·ááºáá²ááºááááºážáá»á¯ááºááŸá¯ NSS (SSM = 1) / Slave ááœá±ážáá»ááºááŸá¯á¡áá»ááºá¡áááºááẠSPI_CR1 ááŸááºáá¯á¶áááºááŒááºážá SSI áá
áºááœááºáá«ááŸááááºá á¡ááŒá¬ážá¡ááá®áá±ážááŸááºážááá¯á¡ááºáá»ááºáá»á¬ážá¡ááœáẠááŒááºá NSS áááºáá¶áá«ááºááẠá¡ááá²á·ááŒá
áºáááºá
á á¬áááºážááŒá¯á á¯ááá¯á· á¡áá»áááºáá±á¬ááºáá«ááŒá®á SPI2 ááá¯áá¯á¶ážááẠáá¯á¶ážááŒááºáá²á·ááŒá®ážá á¡ááá¯ááºáž 3.3 Memory Map ááœáẠáááºážá á¡ááŒá±áá¶ááááºá á¬ááᯠááŸá¬ááŒáá·áºáá«-
áá²á á ááá¯ááºáá¡á±á¬ááºá
#define _SPI2_(mem_offset) (*(volatile uint32_t *)(0x40003800 + (mem_offset)))
á¡ááá¯ááºáž 25.3.3 ááᯠâáá¬á áá¬áá¯ááºááœáẠSPI áááºááŸááºááŒááºážâ ááᯠááá¯ááºááá¯ááºááŸááºážáááºážáá»áẠáá±á«ááºážá ááºááŒáá·áº ááœáá·áºáá«-
1. SPI_CR2 ááŸááºáá¯á¶áááºááŸá¯ááœáẠbits BR[0:1] ááŒáá·áº á¡ááŸááºá ááºáá¬áá®ááŒáááºááŸá¯ááºážááᯠáááºááŸááºáá«á
ááŸááºáá¯á¶áááºáá»á¬ážááᯠá¡áááºáá° ááá¯ážáá¬ážáá»ááºáááºá áœá² ááá¹áááœáẠá á¯áá±á¬ááºážáá¬ážáááºá ááááºá á¬ááŒá±á¬ááºáž (ááááºá á¬ááŸáááº) CR1 â 0x00 á¡ááœááºá áá¯á¶ááŸááºá¡á¬ážááŒáá·áº áá áºá¡á¬ážáá¯á¶ážááᯠááŸááºážáá áºááẠ(áááºááá¯ážááᯠááŒááºáááºáááºááŸááºáá«á 0x0000):
BR bits áá»á¬ážááẠcontroller áá¬áá®ááá¯ááºážááŒá¬ážááŒááºážááᯠáááºááŸááºáá±ážáᬠ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 ááœáẠáá¯á¶ááŒááºážááá¯ááŒáá·áºáá«)
áá»áœááºá¯ááºááá¯á·ááẠá€áá±áá¬ááœáẠáá±áá¬á á¬ááœááºááá¯áááºáá±ááŒá®áž ááá¬ážááœááºáá»á¬ážááᯠáááŒáá·áºáá±á¬ááŒá±á¬áá·áºá á á¬áá»ááºááŸá¬ 704 ááŸá CPOL ááŸáá·áº CPHA bits áá»á¬ážá á á¬áá¬ážáá±á¬áºááŒáá»ááºááᯠá¡áá®ážáááºááŒáá·áºááŒáá«á áá¯á· (SPI á¡ááœá±ááœá±áá±á¬áºááŒáá»ááº)á
áá¬áá®á¡ááá·áºááŸáá·áº polarity
SPI_CR1 ááŸááºáá¯á¶áááºááŒááºážá CPOL ááŸáá·áº CPHA áá
áºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áºá áááºááẠá¡áá»áááºááá¯ááºáááºáá¶áá±ážáá±ážáá¯ááᯠáááá¯ááááºááŒáá·áº ááœá±ážáá»ááºááá¯ááºáááºá CPOL (clock polarity) bit ááẠáá±áá¬áááá¯á·ááá·áºá¡áá« áá¬áá®á¡áá»ááºááŒááŸá¯á¡ááŒá±á¡áá±ááᯠááááºážáá»á¯ááºáááºá á€áá
áºááẠáá¬á
áá¬ááŸáá·áº áá»áœááºáá¯ááºáá»á¬ážááᯠááááºážáá»á¯ááºáááºá CPOL ááᯠááŒááºáááºáááºááŸááºáá«áá SCK áááºáá¶áá«ááºááẠá¡áá¬ážáá°áá¯ááºááœáẠáááºážáá±áá«áááºá CPOL áá
áºááᯠáááºááŸááºáá«áá á¡áá¬ážáá°áá¯ááºááœáẠSCK pin ááŒáá·áºáá±áá«áááºá
CPHA (áá¬áá®á¡ááá·áº) áá
áºááᯠáááºááŸááºáá±á¬á¡áá«á ááŒáá·áºáá¬ážáá±á¬áá
áºáá±á¬ááºáá»á±á¬áẠstrobe ááẠSCK á¡áá»ááºááŒááŸá¯á áá¯áááá¡á
áœááºáž (CPOL ááŒááºáááºáá«á áá»áááºážááŒááºážá CPOL áááºááŸááºáá«á ááŒáá·áºáááºáá¬áááº)á áá¬áá®á¡áá»ááºááŒááŸá¯ááœáẠáá¯áááááŒá±á¬ááºážáá²ááŸá¯ááŒáá·áº áá±áá¬ááᯠáááºážáá°áááºá CPHA áá
áºááẠááŸááºážáááºážáá«áá ááŒáá·áºáá¬ážáá±á¬áá
áºáá±á¬ááºáá»á±á¬áẠstrobe ááẠSCK á¡áá»ááºááŒááŸá¯á ááŒáá·áºáááºáá¬áá±á¬á¡á
áœááºáž (CPOL áááºááŸááºáá«á ááŒá¯ááºáá»áá±á¬á¡á
áœááºážá CPOL ááŸááºážáá«á á¡áá¬ážáááºáá¬áááº)á áá¬áá®á¡áá»ááºááŒááŸá¯ááœáẠááááá¯á¶ážááŒá±á¬ááºážáá²ááŸá¯ááœáẠáá±áá¬ááᯠáááºážáá°áááºá
á€á¡ááááá¬ááᯠá á¯ááºáá°ááŒá®ážáá±á¬ááºá ááŸá áºáá¯áá¯á¶ážááẠáá¯áááŒá áºáá±ááááºáᯠáá»áœááºá¯ááºááá¯á· áááá¯á¶ážáá»á¯ááºááá±áááºá SCK á¡áá»ááºááŒááŸá¯ááᯠá¡áá¯á¶ážáááŒá¯ááá·áºá¡áá«ááœáẠáááá·áºáá±á á±áááºááŸáá·áº áá¯ááºááŸá¯ááºážá ááŒáá·áºáááºáá¬áá±á¬á¡á áœááºážááœáẠáá±áá¬ááᯠááá¯á·ááœáŸááºá á±ááá¯ááẠ(áá¯á¶ááœááºááŒáá·áºáá«á á¡áá¬ážááẠDM634 áá±áá¬á á¬ááœááº)á
á áá¬ážáá ááºá á€áá±áá¬ááœáẠST áá±áá¬á á¬ááœááºáá»á¬ážááœáẠáá±á«áá¬ááá¡ááºá¹áá«áááºáá áºáá¯ááᯠáá»áœááºá¯ááºááá¯á· ááááá¯á¶ážááœá±á·áá²á·ááááº- áááºážááá¯á·ááœáẠ"áá áºá០áá¯áááá¯á· ááŒááºáááºáááºááŸááºáááº" áá°áá±á¬ á á¬á á¯ááᯠáá±ážáá¬ážáá¬ážáááºá á¡áááºážáááºááŒááºáááºáááºááŸááºáááºááá¯áá»áŸáá áááºážáááºážááŸááºážááá¯á·á¥ááá¬á Atmega ááá¯áá»áá¯ážáá±á«á·á
3. áá±áá¬ááááºááá¯á·ááŒááºážááẠ8-áá Ạááá¯á·ááá¯áẠ16-áá áºáá±á¬áºáááºááŸááááŸá áá¯á¶ážááŒááºááẠDFF áá áºááᯠáááºááŸááºáá«á
DM16 áá²á·ááá¯á· 634-bit PWM áá±áá¬ááᯠáá±ážááá¯á·áá¬ááœáẠá¡ááŸá±á¬ááºá¡ááŸááºáááŒá áºá á±ááẠá¡áá°ážá¡á¬ážááŒáá·áº 12-bit DM633 ááᯠáá°áá²á·áá«áááºá DFF ááᯠáá áºáá¯á¡ááŒá ẠáááºááŸááºááŒááºážááẠá¡áááá¹áá¬ááºááŸááá«áááº-
#define DFF 0x0800
_SPI2_ (_SPI_CR1) |= DFF; // 16-bit mode
4. ááááºááá¯á·áá±á¬áºáááºááᯠáá¯á¶ážááŒááºááẠSPI_CR1 ááŸááºáá¯á¶áááºááŸá¯ááœáẠLSBFIRST áá áºááᯠá á®á ááºáááºááŸááºáá«á
LSBFIRST ááẠáááºážáá¡áááºááœáẠá¡ááŒá¶ááŒá¯áá¬ážááá·áºá¡ááá¯ááºáž áá®áá¬ááᯠáááá¬áááºááŸá¬ážáá±á¬áááºážáááºážááŒáá·áº áŠážá áœá¬á á®á ááºáá±ážáááºá ááá¯á·áá±á¬áº DM634 ááẠá¡áá°ážááŒá¬ážáá¯á¶ážáá±á¬ bit ááŸá áááºá áá±áá¬áááºáá¶ááá°ááá¯áá«áááºá ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠáááºážááᯠááŒááºáááºáááºááŸááºáá¬ážáá²á·áááºá
5. áá¬á·ááºáá²áá¯ááºááœááºá NSS áááºáá¶áá«ááºá០ááá·áºááœááºážááẠááá¯á¡ááºáá«áá ááá¯ááºááœáŸá²ááŒá±á¬ááºážááŸá¯ á¡á á®á¡á ááºáá áºáá¯áá¯á¶ážá¡ááœááºáž NSS áááºááᯠááŒáá·áºáá¬ážáá±á¬á¡áá»ááºááŒááŸá¯ááᯠá¡áá¯á¶ážáá»áá«á NSS áá±á¬á·ááºáá²áá¯ááºááœááºá SSM ááŸáá·áº SSI áá áºáá»á¬ážááᯠSPI_CR1 ááŸááºáá¯á¶áááºááŒááºážááœáẠáááºááŸááºáá«á 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 áá áºáá»á¬ážááᯠáááºááŸááºááá«áááºá
á¡ááŸááºáá±á¬á·á á€á¡ááœááºáá»á¬ážááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á SPI ááᯠáá¬á áá¬á¡ááŒá ẠáááºááŸááºááŒá®áž áááºážááá¯ááœáá·áºáááº-
#define MSTR 0x0004
#define SPE 0x0040
_SPI2_ (_SPI_CR1) |= MSTR; //SPI master
//кПгЎа вÑе гПÑПвП, вклÑÑаеЌ SPI
_SPI2_ (_SPI_CR1) |= SPE;
SPI ááᯠá á®á ááºáááºááŸááºáá¬ážááŒá®ážá áááá¯ááºáá¬áá¶ááá¯á· bytes áá±ážááá¯á·ááá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá»ááºáá»ááºážáá±ážááá¯ááºááŒáá«á áá¯á·á 25.3.3 âáá¬á áá¬áá¯ááºááœáẠSPI áááºááŸááºááŒááºážâ ááᯠáááºáááºáááºááŸá¯áá«-
áá±áá¬ááœáŸá²ááŒá±á¬ááºážááŸá¯
Tx buffer ááá¯á· byte áá±ážáá±á¬á¡áá« áá®áá¬á
áááºáááºá
data byte ááᯠshift register ááŸá¬ áááºáá«áááºá á¡ááŒáá¯áẠááááá
áºááá®áá¬á¡ááœááºážáá¯áẠ(ááŒááºááœááºážáááºá
áºáá¬ážááŸ)á ááá¯á·áá±á¬ááºááá¯á·áá°ážá
ááºáááºá ááá·áºáá² CPI_CR1 ááŸááºáá¯á¶áááºááŒááºážááŸá LSBFIRST áá
áºááááºáááºáá±á«áºáá°áááºá MOSI áááºáá¯ááºá áá±áá¬áá±ážááá¯á·ááŒá®ážáá±á¬áẠTXE á¡áá¶ááᯠáááºááŸááºáááºá Tx buffer á០shift register ááá¯á·ááŸáá·áº CPI_CR1 ááŸááºáá¯á¶áááºááŒááºážááŸá TXEIE áá
áºááᯠáááºááŸááºáá«á ááŒá¬ážááŒááºáá
áºáá¯áá¯ááºáá±ážáááºá
STM ááááºážáá»á¯ááºáááááá¬áá»á¬ážááŸá SPI á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á á¡ááºá¹áá«áááºáá áºáá¯á¡á¬áž á¡á¬áá¯á¶á áá¯ááºá á±ááẠáá¬áá¬ááŒááºáá»ááºááœáẠá áá¬ážáá¯á¶ážá¡áá»áá¯á·ááᯠáá»áœááºá¯ááºáá±á¬áºááŒáá²á·áááºá Atmega ááœáẠTXE á¡áᶠ(Tx ááá¬, tx ááẠááá¬ááŒá áºááŒá®áž áá±áá¬áááºáá¶ááẠá¡áááºááá·áºááŒá áºáááº) byte áá áºáá¯áá¯á¶ážááᯠáá±ážááá¯á·ááŒá®ážááŸáᬠáááºááŸááºáááºá á¡ááŒááºááœááº. á¡ááœááºážááá¯ááºáž shift register ááœáẠbyte ááá·áºááœááºážááŒá®ážáá±á¬áẠá€á¡áá¶ááᯠáááºááŸááºáááºá áááºážááᯠáá áºáá»áááºáááºážááœáẠáá áºáá»á¬ážá¡á¬ážáá¯á¶ážááŸáá·áº (á¡ááŒáá¯ááº) ááœááºážááá¯á·ááŒá®ážáá±á¬áẠáá±áá¬áá»á¬ážááᯠááá·áºáá²ááŒá±á¬ááºážááœá¬ážáá±á¬ááŒá±á¬áá·áºá TXE ááẠbyte ááᯠáá¯á¶ážááááá¯á·áá®ááœáẠáááºááŸááºáá¬ážáááºá áá«á á¡áá±ážááŒá®ážááá¯á·áá²á áá»áœááºá¯ááºááá¯á·á LED áááá¯ááºáá¬á¡ááœááºá áá±ážááá¯á·ááŒá®ážáá±á¬áẠLAT pin ááá¯ááœá²áááºááá¯á¡ááºáááºá вÑÐµÑ áá±áá¬á i.e. TXE á¡áá¶áá áºáá¯áááºážááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠááá¯á¶áá±á¬ááºáá«á
ááá¯ááá¯áááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá¬ážá¡áá¶áá áºáᯠááá¯á¡ááºáá«áááºá 25.3.7 - "á¡ááŒá±á¡áá±á¡áá¶áá»á¬áž" ááá¯ááŒáá·áºááŒáá«á áá¯á·á
<âŠ>
á¡áá¯ááºáá»á¬ážáá±á¬á¡áá¶
BSY á¡áá¶ááᯠáá¬á·ááºáá²ááŒáá·áº ááŸááºážáá
áºááẠ(áááºážááᯠáá±ážáá¬ážááŒááºážááŸá¬ á¡áá»áá¯ážáááºáá±á¬ááºááŸá¯ áááŸááá«)á BSY á¡áá¶ááẠSPI áááºááœááºáá±ážá¡ááœáŸá¬á á¡ááŒá±á¡áá±ááᯠááœáŸááºááŒáááºá
áááºážááẠááŒááºáááºáááºááŸááºáááº-
ááœáŸá²ááŒá±á¬ááºážááŸá¯ááŒá®ážááœá¬ážáá±á¬á¡áá« (ááœáŸá²ááŒá±á¬ááºážááŸá¯ááẠáááºááá¯ááºááŒá
áºáá±áá«á áá¬á
áá¬áá¯ááºááœááºááŸááœá²á)
SPI ááááºáá¬ážááá·áºá¡áá«
áá¬á
áá¬áá¯áẠá¡ááŸá¬ážá¡ááœááºážáá
áºáᯠááŒá
áºáá±á«áºáá±á¬á¡áá« (MODF=1)
ááœáŸá²ááŒá±á¬ááºážááŸá¯ááẠáááºááá¯ááºááá¯ááºáá«áá áá±áá¬ááœáŸá²ááŒá±á¬ááºážááŸá¯áá
áºáá¯á
á®ááŒá¬ážááœáẠBSY á¡áá¶ááᯠááŸááºážáááºážáá¬ážáááºá
áá±á¬ááºážááŒá®á áá«á á¡áááºááŒá±áá¬áááá·áºáááºá Tx buffer ááẠáááºááá·áºáá±áá¬ááœáẠááŸááá±áááºááᯠááŸá¬ááœá±ááŒáá·áºááŒáá«á áá¯á·á áá«ááá¯áá¯ááºááá¯á· "SPI Data Register" ááá¯áááºáá«á
Bits 15:0 DR[15:0] áá±áᬠááŸááºáá¯á¶áááºááŒááºážá
áá±áá¬áááºáá¶áááŸáááŒááºáž ááá¯á·ááá¯áẠáá±ážááá¯á·áááá·áºáá±áá¬á
áá±áá¬ááŸááºáá¯á¶áááºááŒááºážááᯠááŒá¬ážáá¶ááŸá
áºáá¯á¡ááŒá
Ạááá¯ááºážááŒá¬ážáá¬ážááẠ- áá
áºáá¯ááŸá¬ á
á¬áá±ážááẠ(ááá¯á·ááœáŸááºááá·áºááŒá¬ážáá¶) ááŸáá·áº áá
áºáᯠ(á
á¬áááºááŒááºážá¡ááœáẠááŒá¬ážáá¶áá
áºáá¯) áá°á ááœá²ááŒá¬ážáá¬ážáááºá áá±áá¬á
á¬áááºážááœááºážáááºá¡ááœáẠá
á¬áá±ážááŒááºážááẠTx buffer ááá¯á· á
á¬áá±ážááŒá®áž data register ááŸáááºááŒááºážááẠRx buffer ááœááºáá«ááŸááá±á¬áááºááá¯ážááᯠááŒááºáá±ážáááºááŒá
áºáááºá
áá±á¬ááºážááŒá®á TXE ááŸáá·áº BSY á¡áá¶áá»á¬ážááœá±á·ááŸáááá·áºáá±áá¬ááœáẠstatus register áááº-
áá»áœááºá¯ááºááá¯á·áá±ážáááº-
#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 driver outputs á¡áá±á¡ááœááºá¡áá áá»áœááºá¯ááºááá¯á·ááẠ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 ááœááºá pins áá»á¬ážáá¡ááŒá±á¡áá±á¡ááœááºáá¬áááºááŸááá±á¬ááŸááºáá¯á¶áááºáá»á¬ážáááºá¡áá±á¬áºáá±ážáá°ážááŒá¬ážáááºá áááºážááá¯á·ááœáẠAtmega ááẠááá¯áá»á¬ážááŒá±á¬ááºáž áááºááŸá¬ážáá±á¬áºáááºáž áááºážááá¯á·ááẠá¡ááŒá¬ážáá±á¬ STM áá»á áºááºáá»á¬ážááŸáá·áº ááœá²ááŒá¬ážáááºá á¡ááá¯ááºáž á.á GPIO á á¡ááœá±ááœá±áá±á¬áºááŒáá»ááº-
áá±áá°áá»áááºááœááºáá»áẠI/O ports áá
áºáá¯á
á® (GPIO) 32-bit configuration registers ááŸá
áºáᯠ(GPIOx_CRL ááŸáá·áº GPIOx_CRH), 32-bit data registers ááŸá
áºáᯠ(GPIOx_IDR ááŸáá·áº GPIOx_ODR), 32-bit set/reset register (GPIOx_BSRR), 16-bit reset register (GPIOx_BRR) ááŸáá·áº 32- áá
áºááááºááá¯á·ááŒááºáž ááŸááºáá¯á¶áááºááŒááºáž (GPIOx_LCKR)á
ááá ááŸááºáá¯á¶áááºááŸá¯ááŸá áºáá¯ááẠáá¯á¶ááŸááºááá¯ááºá á¡áááºáááŒá±áá±á¬ááŒá±á¬áá·áºá 16 port pins áá»á¬ážááᯠ"four bits per brother" áá±á¬áºáááºááŒáá·áº áááºážááá¯á·á¡á¬áž á¡ááŸá¶á·ááŒáá·áºáá»á²áá±áá±á¬ááŒá±á¬áá·áºááŒá áºáááºá á¡á²áá«ááœá±á áááºáá¶áá«áẠáá¯áá០áá¯áá áºáá¯ááẠCRL ááœááºááŒá áºááŒá®áž áá»ááºááẠCRH ááœááºááŒá áºáááºá áá áºáá»áááºáááºážááŸá¬ááẠáá»ááºááŸááá±á¬ ááŸááºáá¯á¶áááºáá»á¬ážááœáẠááááºáááºážá áááºáá¶áá«ááºáá»á¬ážáá«áááºááẠ- áááŒá¬áá áá»ááºáá áºáááºááᯠ"ááŒáá¯áááºáá¬áž" áááºá
ááá¯ážááá¯ážááŸááºážááŸááºážááŒá±á¬áááẠá á¬áááºážáá²á·á¡áá¯á¶ážááá± á ááá¯ááºáá¡á±á¬ááºá
áá»áœááºá¯ááºááá¯á·ááẠááááºááá¯á·ááŒááºáž ááŸááºáá¯á¶áááºááẠáááá¯á¡ááºáá«á
ááŸááºáá¯á¶áááºááŒááºážááŸáá·áº ááŒááºáááºáááºááŸááºááŒááºážáá»á¬ážááẠáá áºá áááºáá áºááá¯ááºážáá áºááá¯ááºážá á®ááœá¬ážááŒááºážááŒá±á¬áá·áº áááºá áá¬áá±á¬ááºážáááº- áááºááẠBSRR ááœááºáᬠá¡áá¬á¡á¬ážáá¯á¶ážááá¯áá±ážááá¯ááºááŒá®ážá ááá¯áá»á¬ážáá±á¬ 16 bits ááẠáááºáá¶áá«ááºá¡á¬áž áá¯áááá¯á·ááŒááºáááºáááºááŸááºáááºááŒá áºááŒá®áž á¡á±á¬ááºááá¯ááºážááᯠ1 áá¯áááºááŸááºááẠááá¯á·ááá¯áẠáááºáááºážáá¯ááºááá¯ááºááẠáááºáá¶áá«ááºááᯠááŒááºáááºáááºááŸááºááá·áº á¡á±á¬ááºááŒá± 16 áá ẠBRR ááᯠá¡áá¯á¶ážááŒá¯áá«á áá¯áááááœá±ážáá»ááºááŸá¯ááᯠááŒáá¯ááºáááºá áááºáá»á¬ážááᯠá¡ááºáááºáááºáá±á¬ááºááœáá·áº áá±ážáá±á¬ááŒá±á¬áá·áº á€á á¬áááºážáá»á¬ážááẠá¡áá±ážááŒá®ážáá«áááºá
Atomic Set ááá¯á·ááá¯áẠReset
GPIOx_ODR ááᯠáá
áºá¡ááá·áºááœáẠáááá¯ááááºáá±ážááœá²ááá·áºá¡áá« ááŒá¬ážááŒááºááŸá¯áá»á¬ážááᯠááááºááẠáááá¯á¡ááºáá«- áá
áºáᯠááá¯á·ááá¯áẠáá
áºáá¯áááºááá¯áá±á¬ áá
áºáá»á¬ážááᯠá¡áá¯ááŒá°áá±ážáá¯ááºáá±á¬ááºááŸá¯ APB2 áá
áºáá¯áááºážááŒáá·áº ááŒá±á¬ááºážáá²ááá¯ááºáááºá áááºážááᯠááŒá±á¬ááºážáá²áááºááá¯á¡ááºááá·áº áá
áºá set/reset register (GPIOx_BSRR ááá¯á·ááá¯áẠreset only for, GPIOx_BRR) ááá¯á· "1" ááá¯áá±ážááŒááºážááŒáá·áº á¡á±á¬ááºááŒááºáááºá á¡ááŒá¬áž bit áá»á¬ážááẠáááŒá±á¬ááºážáá²áá² ááŸááá±áááºááŒá
áºáááºá
áá±áá¬á á¬áááºážáá»á¬ážááœáẠá¡áááá¹áá«ááºáá±á¬áºááá¯ááºáá±á¬ á¡áááºáá»á¬áž - IDR = ááŸááááºá input áááºážááœáŸáẠááŸááºáá¯á¶áááºááŒááºážá ááá·áºááœááºážááŒááºáž ááŸááºáá¯á¶áááºááŒááºáž ODR = output Direction Registerá output registerá áááºááŸáááá±á¬áá»ááºááœáẠáááºážááá¯á·ááᯠáááá¯á¡ááºáá«á
áá±á¬ááºáá¯á¶ážá¡áá±áá²á·á ááááºážáá»á¯ááºááŸá¯á á¬áááºážáá»á¬ážá PB13á PB14 ááŸáá·áº PB15 áá²á·ááá¯á·áá±á¬ áá¯ááá SPI áááºáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á· á áááºáááºá á¬ážáá±á¬ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠCRH ááᯠáá»ááºááŒááºážááŒáá·áºáá«áááºá
20 á០31 á¡áá bits ááŒáá·áº áá áºá á¯á¶áá áºáá¯ááᯠáá±ážááááºáᯠáá»áœááºá¯ááºááá¯á·ááŒááºáááºá
pins áá»á¬ážá០ááá¯áá»ááºááá·áºá¡áá¬á¡áá±á«áºááœáẠáá»áœááºá¯ááºááá¯á· ááŸá¬ááœá±ááœá±á·ááŸááá¬ážááŒá®ážááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áº á€áá±áá¬ááœáẠá ááááºáá¯á¶ááá«áá² áá¯ááºáááºá MODE ááẠáŠážáááºáá»áẠ(input ááŸá áºáá¯áá¯á¶ážááᯠ0 áᯠáááºááŸááºáá«á 50) ááŸáá·áº pin speed (áá»áœááºá¯ááºááá¯á· 1MHz ááá¯á¡ááºáááºá ááá¯ááá¯áááºááŸá¬á pin ááŸá áºáá¯áá¯á¶ážááᯠâ00â) ááŸáá·áº CNF ááẠáá¯ááºááᯠáááºááŸááºáááº- áá¯á¶ááŸáẠâpush-pullâ â 10, âalternativeâ â 0. áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá á¡áááºááœááºááŒááºáááá·áºá¡ááá¯ááºážá pins á¡á¬ážáá¯á¶ážááẠá¡á±á¬ááºááŒá±á០áááááá Ạ(CNFXNUMX) ááŸááááºá áááºážááẠáááºážááá¯á·á¡á¬áž áá¯ááºááá¯á· áááºááŸááºáá±ážáááºá floating input.
á€áá»á áºááºááŒáá·áº á¡ááŒá¬ážáá áºáá¯áá¯áá¯ááºááẠáá»áœááºá¯ááºá á®á ááºáá¬ážáá±á¬ááŒá±á¬áá·áº ááá¯ážááá¯ážááŸááºážááŸááºážá¡á¬ážááŒáá·áº ááŒá áºááá¯ááºáá»á±ááŸááá±á¬ 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_á¡ááá á¹á á¡á¬ážááŒáá·áº áááá·áºáááºá áááºážááẠá¡ááŒá²áááºáž á€á¡ááá¯ááºážááŒá áºáá±áá«á á±á áááºáá¬ážááá¯ááºáá«)
á¡áá¯á á¡áá¬á¡á¬ážáá¯á¶ážá áá±á¬ááºážáá±ááá·áº á¡áá¯ááºáááŒá áºáá°ážá áááºážááẠSTM32 ááŒá áºáá±á¬ááŒá±á¬áá·áº áááºážááá¯á·ááẠáá»áŸááºá á áºáá¬ááºá¡á¬ážááᯠáááºáá¬á á±áááºá ááá¯ááá¯áááºááŸá¬ áááºááá¯á¡ááºáá±á¬ á¡áá¶áá á¹á ááºážáá»á¬ážááᯠclocking áá¯ááºááẠááá¯á¡ááºáááºá
áá¬áá®ááá¯ááœáá·áºáá«á
áá¬áá®áá¯áááºáž áá°áááá»á¬ážáá±á¬ áááºáááºáá¬áá®ááẠáá¬áá®áá»áááºááŒááºážá¡ááœáẠáá¬áááºááŸááááºá ááŒá®ážáá±á¬á· á¡ááá¯áá±á¬áẠRCC ááᯠááááá¬ážááááŒá®ážáá¬ážáá«á á á¬ááœááºá á¬áááºážááœáẠáááºážááᯠáá»áœááºá¯ááºááá¯á· ááŸá¬ááœá±áááº- áááºážááẠááŒááºáááºáááºááŸááºááŒááºážááŸáá·áº áá¬áá®ááááºážáá»á¯ááºááŸá¯ááŒá áºáááºá
á¡áááºááœááºááŒá±á¬áá²á·ááá·áºá¡ááá¯ááºáž áá¶áá±á¬ááºážáá±á¬ááºáá
áœá¬á áá¬áá®áááºáá¶áá±á«ááºážá
ááºá á¡áááºáá²áá¯á¶ážá¡ááá¯ááºážááᯠSTM ááŸáá°áá»á¬ážá áá»áœááºá¯ááºááá¯á·á¡ááœáẠáá¯ááºáá±á¬ááºáá±ážáá²á·áá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠáááºážááá¯á·á¡á¬áž á¡ááœááºáá»á±ážáá°ážáááºáá«ááẠ(áá
áºááẠáá»áœááºá¯ááºáá¶ááá¯á· ááá·áºááºáá
áºáá¯áá±ážáá«áááºá
#define _RCC_(mem_offset) (*(volatile uint32_t *)(0x40021000 + (mem_offset)))
ááŒá®ážáá»áŸáẠáááºážáááºááŒá¬ážáá²ááŸá áá áºáá¯áá¯ááᯠááŸá¬ááẠááŒáá¯ážá á¬ážááá·áº ááá·áºááºááᯠááŸáááºáá« ááá¯á·ááá¯áẠááá¯áá±á¬ááºážáááºááŸá¬ ááá¹ááá»á¬ážá០ááœáá·áºááá¯ááºáá±á¬ ááŸááºáá¯á¶áááºááŒááºážá áá±á¬áºááŒáá»ááºáá»á¬ážááᯠááŒááºáááºážááœá¬ážáá«á á á¬áááºážááœááºážááŸá¯áá»á¬ážááá¯ááœáá·áºáá«á. RCC_APB1ENR ááŸáá·áº RCC_APB2ENR ááᯠáááºááá·áºáá±áá¬ááœáẠááœá±á·ááááºáááºážá
ááá¯á·á¡ááŒáẠáááºážááá¯á·ááœáẠSPI2á IOPB (I/O Port B) ááŸáá·áº á¡ááŒá¬ážáá¯ááºáá±á¬ááºáá»ááºáá»á¬áž (AFIO) á áá¬áá®áá»áááºááá¯ááºááŒááºáž áá«áááºáá±á¬ bit áá»á¬ážáá«ááŸááááºá
#define _APB2ENR 0x18
#define _APB1ENR 0x1C
#define IOPBEN 0x0008
#define SPI2EN 0x4000
#define AFIOEN 0x0001
//вклÑÑаеЌ ÑакÑОÑПваМОе пПÑÑа B О алÑÑ. ÑÑМкÑОй
_RCC_(_APB2ENR) |= IOPBEN | AFIOEN;
//вклÑÑаеЌ ÑакÑОÑПваМОе SPI2
_RCC_(_APB1ENR) |= SPI2EN;
áá±á¬ááºáá¯á¶ážáá¯ááºááᯠááŸá¬ááœá±á·ááá¯ááºáá«áááºá
ááá·áºááœáẠá ááºážáááºááẠá¡ááœáá·áºá¡áááºážááŸáá·áº ááá¹áááŸááá«áá ááá¯á·áá±á¬áẠá€áá²á·ááá¯á·áá±á¬ DM634 ááᯠDAI á០PB15á DCK á០PB13á LAT ááá¯á· PB14 ááá¯á· áá»áááºáááºáá«á áá»áœááºá¯ááºááá¯á·ááẠáááá¯ááºáá¬á¡á¬áž 5 ááá¯á·á០áá«áá«á¡á¬áž áá»áááºáááºááẠááá±á·áá«ááŸáá·áºá
STM8 PWM
STM8 ááœáẠPWM
áá»áœááºáá±á¬áº áá®áá±á¬ááºážáá«ážááᯠá á®á ááºáá±áá»áááºááŸá¬á á¥ááá¬á¡áá±áá²á·á áá»áœááºáá±á¬áºáᬠááœááºáááááºááá«áá² áááááºáá¯ááºáá¯ááºáá°áá²á· ááá¯á¶ážááá¯ááºá¡á±á¬áẠáá±áá¬á á¬ááœááºááá¯áá¯á¶ážááŒá®áž ááááºážááŸá®ážáá²á· áá»á áºááºáá áºáá¯áá²á· áá¯ááºáá±á¬ááºáá»ááºá¡áá»áá¯á·ááᯠáá»áœááºážáá»ááºá¡á±á¬ááºááŒáá¯ážá á¬ážááá¯á· áá¯á¶ážááŒááºáá²á·áá«áááºá STM8 ááẠá€á¡áááºážááá¹áá¡ááœáẠá á¶ááŒááŒá áºáááº- áááá áá»áœááºá¯ááºááœáẠSTM8S103 áá«áá±á¬ ááá¯ááºáá¯ááºá¡áá»áá¯á·ááŸáááŒá®ážá áá¯áááá¡áá»ááºááŸá¬ áááºážááẠá¡ááœááºáá±áááºážá á¬ážááŒááºážáááŸááá±á¬ááŒá±á¬áá·áº á¡ááºáá¬áááºáá±á«áºááœáẠááŸá¬ááœá±áááºááŸá¯ááẠááœá±ážáá±á¬ááºááŸá¯ááẠá€ááŒá±ááŸááºážáááºážáá»á¬ážáááŸáááŒááºážá¡áá±á«áºááœáẠáááºáá±áá«áááºá
áá»á
áºááºááœá±áááºážááŸááááºá
áá¬áá®ááŸáá·áº I/O
áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá STM8 ááẠ2 MHz ááŒáááºááŸá¯ááºážááŒáá·áº áá¯ááºáá±á¬ááºáááºá áááºážááᯠáá»ááºáá»ááºážááŒááºááá«áááºá
HSI (High Speed ââInternal) áá¬áá®
HSI áá¬áá®á¡áá»ááºááŒááŸá¯ááẠáááá¯ááááºáá¯ááºááá¯ááºáá±á¬ ááá¯ááºážááŒá¬ážááŸá¯ (16 á០1) áá«ááŸááá±á¬ á¡ááœááºážááá¯ááºáž 8 MHz RC oscillator á០áááºážáááºáá¬áááºá áááºážááᯠáá¬áá®ááá¯ááºážááŒá¬ážááŒááºáž ááŸááºáá¯á¶áááºááŒááºáž (CLK_CKDIVR) ááœáẠáááºááŸááºáá¬ážáááºá
ááŸááºáá»ááº- á¡á
ááœááºá 8 ááá¯ááºážááŒá¬ážáá¬ážáá±á¬ HSI RC oscillator ááᯠáá¬áá®á¡áá»ááºááŒááŸá¯á áŠážáá±á¬ááºáááºážááŒá
áºá¡ááŒá
Ạááœá±ážáá»ááºáá¬ážáááºá
áá±áá¬á á¬ááœááºááœáẠááŸááºáá¯á¶áááºááááºá á¬á refman ááœáẠáá±á¬áºááŒáá»ááºááᯠáá»áœááºá¯ááºááá¯á· ááœá±á·ááŸáááŒá®áž ááŸááºáá¯á¶áááºááŒááºážááᯠááŸááºážáááºážááẠááá¯á¡ááºááŒá±á¬ááºáž ááœá±á·ááŸáááá«áááºá
#define CLK_CKDIVR *(volatile uint8_t *)0x0050C6
CLK_CKDIVR &= ~(0x18);
áá»áœááºá¯ááºááá¯á·ááẠPWM ááá¯áááºáááºááŒá®áž LEDs áá»á¬ážááá¯áá»áááºáááºáááºááŒá áºáá±á¬ááŒá±á¬áá·áº pinout ááá¯ááŒáá·áºááŒáá«á áá¯á·á
áá»á áºááºááẠáá±ážáááºáááºá áá°áá®áá±á¬ pins áá»á¬ážáá±á«áºááœáẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá áœá¬ááᯠááá¯ááºážáá¶á·áá¬ážáááºá á áá¯áááºážááœááºážá ááœááºáá»á¬ážááœáẠáá«ááŸáááá·áºá¡áá¬ááŸá¬ "á¡á á¬ážááá¯ážáá¯ááºáá±á¬ááºááá¯ááºááŸá¯" ááŒá áºááŒá®áž áááºážááᯠ"ááœá±ážáá»ááºááŸá¯ ááá¯ááºáá»á¬áž" ááŒáá·áº ááŒá±á¬ááºážáá¬ážááẠ(ááœá±ážáá»ááºááœáá·áº ááá¯ááº) - Atmega fuses áá»á¬ážáá²á·ááá¯á· áá áºáá¯áá¯á áááºááẠáááºážááá¯á·ááááºááá¯ážáá»á¬ážááᯠáááá¯ááááºáá»áá» ááŒá±á¬ááºážáá²ááá¯ááºáá±á¬áºáááºáž á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº áááá¯á¡ááºáá«á ááŒááºáááºá áááºááŒá®ážááŸáᬠáá¯ááºáá±á¬ááºáá»ááºá¡áá áºááᯠá áááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá á€ááá¯ááºáá»á¬ážááá¯ááŒá±á¬ááºážáá²ááá¯ááºááá·áº ST Visual Programmer (Visual Develop ááŒáá·áºáá±á«ááºážáá¯ááºáá¯ááºáá¬ážáááº) ááá¯á¡áá¯á¶ážááŒá¯ááẠááá¯ááá¯ááœááºáá°áááºá pinout ááẠááá timer á CH1 ááŸáá·áº CH2 pin áá»á¬ážááᯠá áá¯áááºážááœááºážá ááœááºáá»á¬ážááœáẠááŸááºáá¬ážááŒá±á¬ááºáž ááŒááááºá STVP ááœáẠAFR1 ááŸáá·áº AFR0 bits áá»á¬ážááᯠáááºááŸááºááẠááá¯á¡ááºááŒá®áž áá¯ááááá áºáá¯ááẠáá¯ááá timer á CH1 output ááᯠPD4 á០PC5 ááá¯á· ááœáŸá²ááŒá±á¬ááºážáá±ážáááºááŒá áºáááºá
ááá¯á·ááŒá±á¬áá·áºá áááºáá¶áá«áẠ6 áá»á±á¬ááºážááẠáááá¡áá»áááºááá¯ááºážáááááá¬á¡ááœáẠPC6á PC7 ááŸáá·áº PC3á áá¯áááá¡ááœáẠPC5á PD3 ááŸáá·áº PA3 ááá¯á·ááᯠááááºážáá»á¯ááºáááºááŒá áºáááºá
STM8 ááœáẠI/O áááºáá¶áá«ááºáá»á¬ážááᯠááá¯ááºááá¯ááºáááºáááºááŒááºážááẠSTM32 ááẠááá¯ááá¯ááá¯ážááŸááºážááŒá®áž áá¯áá¹áááááºážáá«áááºá
- Atmega DDR data direction register á០áááºážááŸá®ážááẠ(áá±áá¬áááºážááœáŸáẠááŸááºáá¯á¶áááºááŒááºážá): 1 = á¡ááœááº;
- áááááááºážáá»á¯ááºááŸá¯ááŸááºáá¯á¶áááºááŒááºáž CR1 ááẠoutput ááœááºá push-pull mode (1) ááá¯á·ááá¯áẠopen drain (0); áá« LEDs áá»á¬ážááᯠcathodes ááŒáá·áºáá»á áºááºáá»á¬ážááŸáá·áºáá»áááºáááºáá±á¬ááŒá±á¬áá·áºá áá«áá¯áááá¯á€áá±áá¬ááœááºáá¬ážáá²á·áá«á
- áá¯áááááááºážáá»á¯ááºááŸá¯á á¬áááºážááœááºáž CR2 ááẠoutput ááœááºáá¬áá®á¡ááŒááºááŸá¯ááºážááá¯áááºááŸááºáááº- 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 ááŒáááºááŸá¯ááºáž - timer á០á¡ááŸááºááŒá áºááá·áº á¡ááŒáááºáá±á
- á¡ááá¯á¡áá»á±á¬áẠááŒááºáááºá áááºááŒááºážá AR - timer ááŸáá±ááœááºááá·áºá¡áá á¡ááá¯á¡áá»á±á¬ááºáááºááá¯ááºáá±á¬áááºááá¯áž (pulse period);
- ááŒá áºáááºá UEV á¡ááºáááẠ- timer ááẠAR ááá¯á·áá±ááœááºáá±á¬á¡áá«ááœááºááŒá áºáá±á«áºááá·áºááŒá áºáááºáá áºáá¯á
- PWM Duty Cycle - PWM áá»á°áá®á ááºáááºážá áááŒá¬áá "duty factor" áá¯áá±á«áºáááºá
- áááºááá¯ážááᯠáááºážáá°/ááŸáá¯ááºážááŸááºáá«á - á¡áá»áááºááá¯ááºážá ááºáá±ááœááºáá¬ážááá·áº áááºážáá°/ááŸáá¯ááºážááŸááºááŸá¯á¡ááœáẠáááºááá¯áž áá áºáá¯áá¯áá¯ááºáááºá (PWM áá¡ááŒá±á¡áá±ááœááºá áááºážááẠoutput signal ááá¯ááŒá±á¬ááºážááŒááºáááº);
- ááŒáá¯áááºáááºááá¯áž - ááŒáá¯áááºáááºáá¬ážáá±á¬áááºááá¯ážá áááºááá¯ážááᯠááŸáá¯ááºážááŸááºáá«á timer ááᯠá¡ááŸááºááŒá áºáá±áá»áááºááœáẠáááŒá±á¬ááºážáá²ááá¯ááºáá«á ááá¯á·ááá¯ááºáá«á PWM á ááºáááºážáá»ááºááœá¬ážáá«áááºá ááá¯á·ááŒá±á¬áá·áºá timer ááẠáááºážáááŸá áºáá áºáá¯ááºáá¯á¶ážáá»áááºááá¯á·áá±á¬ááºááŸáááŒá®áž ááŒááºáááºáááºááŸááºááá·áºá¡áá«ááœáẠáá¯ááºááœáŸáá·áºááá·áºáááºááá¯ážá¡áá áºáá»á¬ážááᯠááŒá¬ážáá¶áá áºáá¯ááœáẠáá¬ážááŸááᬠáá¯ááºáá°áááºá
- á¡áá¬ážááẠО áááá¯ááŸááá¯ááºáá»á¬áž - Atmel á áááºá ááºáá áºáá»áŸá±á¬ááºááŸáá·áº á¡áááºáááá¯ááœáẠáá»áááºááŸáááŸá¯ ááŒáẠPWM О á¡ááá·áº-ááŸááºáááºáá±á¬ PWM.
- OciREFá Output áááºááœáŸááºážá¡áá»ááºááŒááŸá¯ááᯠááŸáá¯ááºážááŸááºáá«á - áááºááœáŸááºáž output signalá á¡ááŸááºááŸá¬á PWM áá¯ááºááœáẠáááºááá¯ááºáᬠpin ááœáẠáá±á«áºáá¬áá±á¬á¡áá¬á
pinout ááŸááŸááºážáááºážááŒá®ážáá¬ážááŒá áºááá·áºá¡ááá¯ááºážá timer ááŸá áºáá¯ááœáẠPWM á áœááºážáááºáá»á¬ážááŸáááẠ- áááááŸáá·áºáá¯áááá ááŸá áºáá¯áá¯á¶ážááẠ16-bit ááŒá áºáááºá áááááœáẠá¡ááá¯áá±á¬ááºážá¡ááºá¹áá«áááºáá»á¬ážá áœá¬ááŸáááẠ(á¡áá°ážáááŒáá·áºá áááºážááẠá¡áá±á«áºááŸáá·áºá¡á±á¬áẠááŸá áºáá»áá¯ážáá¯á¶ážááᯠáá±ááœááºááá¯ááºáááº)á ááŸá áºáá±á¬ááºá áá¯á¶áž áá®áá°áá®áá»áŸ á¡áá¯ááºáá¯ááºááá¯á· ááá¯áááºá áá«ááŒá±á¬áá·áº áááŸááá²á·á¡áá¬ááᯠááá±á¬áºáá á¡áá¯á¶ážáááŒá¯ááá á±ááá¯á· áááá¬áááºááŸá¬ážáá²á· ááá¯áááºážáá²áá²á· áá¯ááááá áºáá¯áá²á· á áááºááá¯á· áá¯á¶ážááŒááºááá¯ááºáááºá á¡áá»áá¯á·áá±á¬ááŒá¿áá¬ááŸá¬ áááºááœáŸááºážáááºá áœá²á á¬á¡á¯ááºááŸá timer áá»á¬ážá¡á¬ážáá¯á¶ážá PWM áá¯ááºáá±á¬ááºááá¯ááºá áœááºážááá±á¬áºááŒáá»ááºááẠáááá¡áá»áááºááá¯ááºážáááááᬠ(17.5.7 PWM Mode) áá¡áááºážááœáẠááŸááá±áá±á¬ááŒá±á¬áá·áº áááºááẠá á¬ááœááºá á¬áááºážáá áºáá»áŸá±á¬ááºáá¯á¶áž áá áºáá»áááºáá¯á¶áž á¡ááŒááºááŒááºá¡ááŸááºááŸááºáá¯ááºáá±á¬ááºááááºááŒá áºáááºá
STM8 ááŸá PWM ááẠAtmega ááŸá PWM ááẠá¡áá±ážááŒá®ážáá±á¬ á¡á¬ážáá¬áá»ááºáá áºáá¯ááŸááááºá
áááºáááááẠááŸááá¬ážáá±á¬ PWM
á¡á±á¬ááºááŒá±á០á¡áá±á«áºá០á¡áá±á¬áá·áºááœá²á·á
ááºážáá¯á¶
TIM_CR1 ááŸááºáá¯á¶áááºááŒááºážááŸá DIR áá
áºááᯠááŸááºážáááºážáá«á á¡á±á¬ááºááŒá±-á¡áá±á«áº áá±ááœááºááŒááºáž áá¯ááºáá±á¬ááºáá±áá«áááºá
ááá°áá¬
á¥ááá¬ááœáẠááá PWM áá¯ááºááᯠá¡áá¯á¶ážááŒá¯áááºá PWM áááºááœáŸááºážá¡áá»ááºááŒááŸá¯ OCiREF ááẠTIM1_CNT < TIM1_CCRi áá¬ááááºáá¯á¶áž ááŒáá·áºáá¬ážáá±áá«áááºá ááá¯ááºááẠáááá·áºáá»áá²á· á¡ááá·áºááᯠáá±á¬ááºáááºá TIM1_CCR ááŸááºáá¯á¶áááºááŒááºážááŸá ááŸáá¯ááºážááŸááºááŸá¯áááºááá¯ážááẠautoload áááºááá¯áž (TIM1_ARR ááŸááºáá¯á¶áááºááŒááºáž) áááºááŒá®ážáá«áá OCiREF á¡áá»ááºááŒááŸá¯ááẠ1 ááœáẠááŸááá±áááºá ááŸáá¯ááºážááŸááºááŸá¯áááºááá¯ážááẠ0 ááŒá
áºáá«á OCiREF ááᯠáá¯áááœáẠááááºážáá¬ážáááºá...
áá¬áá¡ááœááºáž STM8 á¡áá»áááºááá¯ááºážáááááᬠupdate event á¡áááºá
á
áºáááºá áááºááá¯ážááŸáá¯ááºážááŸááºááŒá®ážááŸáá¬áá»áŸáẠáááºááœáŸááºážá¡áá»ááºááŒááŸá¯ááᯠáá¯ááºáá±ážáááºá Atmega á timer ááẠááááŠážá
áœá¬ ááœááœá¬ážááŒá®ážáá±á¬áẠááŸáá¯ááºážááŸááºáᬠááááºááœááºáá¬áááºá compare value == 0
output ááẠáá
áºáááºážáááºážááŒáá·áº ááá¯ááºááœááºááááºááŒá
áºááŒá®áž (á¥ááá¬á áááá¯ááááºáá¬áá»á
áºááᯠááŒá±á¬ááºážááŒááºááŸááºááŒááºážááŒáá·áº)á
áá®áá±á¬á· áá»áœááºáá±á¬áºááá¯á· áá¯ááºáá»ááºáá¬á 8-bit PWM (AR == 255
) á¡á±á¬ááºááŒá±ááŸááááºááŸáá±ááœááºááŒááºážá áááºá
ááºáá
áºáá»áŸá±á¬áẠáá»áááºááŸáááŒááºážá áá®ážáá®ážáá»á¬ážááẠáá»á
áºááºáá»á¬ážááᯠcathodes áá»á¬ážááŒáá·áº áá»áááºáááºáá¬ážáá±á¬ááŒá±á¬áá·áº PWM ááẠ0 (LED ááœáá·áºáá¬ážáááº) á¡áá ááœááºááá·áºááẠáááºááá¯ážááŸáá¯ááºážááŸáẠááŒá®ážáá»áŸáẠáá
ááá»áá¯á·á¡ááŒá±á¬ááºážááœá± áááºááŒá®ážááŒá®á PWM á áá áºááá¯á·ááŒá±á¬áá·áº á€á á¬ááá¯ááºááá¯á¡ááœáẠá¡ááá¯ážá¡áá¬ážáááºá áœá² (18.6.8 - TIMx_CCMR1) ááœáẠááŸá¬ááœá±ááŒááºážááŒáá·áº áá¯ááá timer á ááá¯á¡ááºáá±á¬ ááŸááºáá¯á¶áááºááŒááºážááᯠááŸá¬ááœá±á·ááá¯ááºáá«áááºá
110- ááá PWM áá¯áẠ- á¡á±á¬ááºááŒá±á០á¡áá±á«áºá០áá±ááœááºáá±á¬á¡áá«á ááááá»ááºáááºááẠTIMx_CNT < TIMx_CCR1 ááœáẠáá¯ááºáá±á¬ááºáá±áá«áááºá ááá¯ááºáá«á ááááá»ááºáááºááẠááŸá¯ááºááŸá¬ážááŸá¯áááŸááá±á [áá±á¬ááºááẠá
á¬ááœááºá
á¬áááºážááœáẠtimer 1 á០ááŸá¬ážááœááºážáá±á¬áááá¹áá°áá°ážááá·áºááŒááºážáá
áºáá¯áá«ááŸááááº] 111- áá¯ááá PWM áá¯áẠ- á¡á±á¬ááºááŒá±ááŸá¡áá±á«áºááá¯á·áá±ááœááºáá±á¬á¡áá«á ááááá»ááºáááºááẠTIMx_CNT < TIMx_CCR1 ááœáẠáááŸá¯ááºááŸá¬ážáá«á ááá¯ááºáá«á ááááá»ááºáááºááẠá¡áááºáááºáá«áááºá
LEDs áá»á¬ážááᯠcathodes áá»á¬ážááŒáá·áº MK ááŸáá·áºáá»áááºáááºáá¬ážáá±á¬ááŒá±á¬áá·áº áá¯ááááá¯ááºááẠáá»áœááºá¯ááºááá¯á·ááŸáá·áºááá¯ááºáá®ááẠ(ááááá áºáá¯áááºážááŒá áºáááºá ááá¯á·áá±á¬áºáá»áœááºá¯ááºááá¯á·ááááá±ážáá«)á
Bit 3 OC1PE- áááºáá¶áá«áẠ1 á¡ááŒáá¯áááºááŒááºážááᯠááœáá·áºáá«á
0- TIMx_CCR1 ááœáẠááŒáá¯áááºááá·áºááœááºážááŒááºáž ááŸááºáá¯á¶áááºááŒááºážááᯠááááºáá¬ážáááºá TIMx_CCR1 ááá¯á· á¡áá»áááºáááœá±áž á
á¬áá±ážááá¯ááºáá«áááºá áááºááá¯ážá¡áá
áºááẠáá»ááºáá»ááºážá¡áá¯ááºáá¯ááºáááºá
1- TIMx_CCR1 ááœáẠááŒáá¯áááºá
á¬áááºážááœááºážááŒááºážááᯠááœáá·áºáá¬ážáááºá áááºááŸá¯ááŒááºáž/áá±ážááŒááºáž áá¯ááºáááºážáá»á¬ážááᯠááŒáá¯áááºááá·áºááœááºážááŒááºáž ááŸááºáá¯á¶áááºááŒááºážááá¯á· áááºáá±á¬ááºáá«á á¡ááºááááºá¡á
á®á¡á
ááºáá
áºáá¯á
á®ááœáẠááŒáá¯áááºááá·áºááœááºážáá¬ážáá±á¬áááºááá¯áž TIMx_CCR1 ááᯠá¡ááááºá
á¬áááºážááœáẠááá·áºááœááºážáá¬ážáááºá
*ááŸááºáá»ááº- PWM áá¯ááºááᯠáá±á¬ááºážááœááºá
áœá¬á¡áá¯ááºáá¯ááºáááºá¡ááœááºá ááŒáá¯áááºááá·áºááœááºážááŸá¯á
á¬áááºážáá»á¬ážááᯠááœáá·áºáá¬ážááá«áááºá á¡áá»ááºááŒáá¯ááºáá
áºáá¯áááºážááœáẠáááºážááẠáááá¯á¡ááºáá« (OPM bit ááᯠ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;
áá¯ááá timer ááẠá¡á±á¬ááºááŒá±á០á¡áá±á«áºááŸáᬠáá±ááœááºááá¯ááºáááºá áááºá ááºáá áºáá»áŸá±á¬áẠáá»áááºááŸáááŸá¯ááᯠáá¬ááŸáááŒá±á¬ááºážáá²ááá¯áá«á á¥ááá¬á¡á¬ážááŒáá·áºá ááŒáááºááŸá¯ááºážááá¯ááºážááŒá¬ážááŒááºážááᯠ256 áᯠáááºááŸááºááŒáá«á áá¯á·á áá¯áááá¡áá»áááºááá¯ááºážáááááá¬á¡ááœááºá ááá¯ááºážááŒá¬ážááŒááºážááᯠTIM2_PSCR ááŸááºáá¯á¶áááºááŒááºážááœáẠáááºááŸááºáá¬ážááŒá®áž áá«áá«ááŸá áºáá¯ááŒá áºáááº-
#define TIM2_PSCR *(volatile uint8_t *)0x00530E
TIM2_PSCR = 8;
áá»ááºáá¬á¡á¬ážáá¯á¶ážá áá±á¬ááºáá»ááºááœá±ááᯠááœáá·áºááá¯á·áá²á· áá¯ááá timer ááá¯ááºááá¯ááºáá«áá²á áááááŒá¿áá¬ááᯠá á¬áááºážááœááºážááŒááºážááŒáá·áº ááŒá±ááŸááºážáááºá ááá¯ááºáá°áž/ááŸáá¯ááºážááŸáẠEnable: á¡áá»áá¯ážááá®á áœá¬ ááŒáá·áºáá»ááºáá¬ážáá±á¬ áá»ááºáááºááŸá áºáá¯á áá¯á¶ážááá¯ááºážááŸááááºá á€áá±áá¬ááœáẠsignal á polarity ááá¯ááŒá±á¬ááºážáá²áááºááŒá áºááá¯ááºáááºááá¯áááºážáá±á·áá¬ááá¯ááºáááºá áá°á¡áá PWM Mode 1 ááᯠá¡áá¯á¶ážááŒá¯ááẠááŒá áºááá¯ááºáááºá áá»áœááºá¯ááºááá¯á· áá±ážáááº-
#define TIM2_CCER1 *(volatile uint8_t *)0x00530A
#define TIM2_CCER2 *(volatile uint8_t *)0x00530B
#define CC1E (1<<0) // CCER1
#define CC2E (1<<4) // CCER1
#define CC3E (1<<0) // CCER2
TIM2_CCER1 = (CC1E | CC2E);
TIM2_CCER2 = CC3E;
áá±á¬ááºáá¯á¶ážááœááºá áá»áœááºá¯ááºááá¯á·ááẠTIMx_CR1 ááŸááºáá¯á¶áááºááŒááºážááœáẠá¡áá»áááºááá¯ááºážáááááá¬ááᯠá áááºáááº-
#define TIM2_CR1 *(volatile uint8_t *)0x005300
TIM2_CR1 |= 1;
ááŸáá¯ááºážááŸááºááŸá¯á¡ááœáẠá¡ááŸááºááááºáááºááá¯ážáá»á¬ážááᯠtimer ááá¯á· ááœáŸá²ááŒá±á¬ááºážáá±ážááá·áº AnalogWrite() á ááá¯ážááŸááºážáá±á¬ analogue ááá¯áá±ážááŒáá«á áá¯á·á á á¬áááºážáá»á¬ážááᯠááŒáá¯áááºááá·áºááŸááºážá á¡áááºáá±ážáá¬ážáááºá ááŸááºáá¯á¶áááºáá»á¬ážááᯠáááºážáá°/ááŸáá¯ááºážááŸááºáá«ááá»ááºáááºáá áºáá¯á á®á¡ááœáẠáááºážááá¯á· ááŸá áºáá¯ááŸááááº- TIM8_CCRxL ááœáẠá¡áááá·áºáá¯á¶áž 2 bits ááŸáá·áº TIM2_CCRxH ááœáẠááŸá¬áá°ááŸá¯á¡ááá·áºááŒáá·áºááá·áºá¡áá¬áá»á¬ážá áá»áœááºá¯ááºááá¯á·ááẠ8-bit PWM ááá¯áááºáá®ážáá¬ážáá±á¬ááŒá±á¬áá·áºá á¡áááºážáá¯á¶áž áááá¬áááºááŸá¬ážáá±á¬ bit áá»á¬ážááá¯áᬠáá±ážáá¬ážááẠáá¯á¶áá±á¬ááºáá«áááºá
#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 ááœááºá signal ááᯠtimer áááºáááºááŸá¯áá áºáá¯á¡ááœáẠááŒá±á¬ááºážááŒááºááŒá áºáááº)á LEDs áá»á¬ážá¡ááœáẠáááºážááẠá¡áá±ážáááŒá®ážáá«á á¡á¬áá¯á¶á á°ážá áá¯ááºáá±á¬á á¬áááºáá°ááẠáááºážááᯠáááºááá¯á·ááŒá¯ááŒááºááááºááᯠááá·áºááŸááºážááá¯ááºáá±ááŒá®ááŒá áºáááºá
áá¯ááá timer ááœáẠPWM á¡áá¯ááºáá¯ááºáááºá ááááá áºáá¯ááá¯á· áááºááœá¬ážááŒáá«á áá¯á·á
áááá¡áá»áááºááá¯ááºážáááááá¬ááœáẠáá°áá®áá±á¬á á¬áááºážáá»á¬ážááœáẠá¡ááá¡áá»áá°áá®áá±á¬áá áºáá»á¬ážáá«ááŸáááẠ(áá¯áááá¡áá»áááºááá¯ááºážáááááá¬ááœáẠ"ááááºážáááºážáá¬áž" áá±á¬áá áºáá»á¬ážááᯠáááá¡ááŒáááºááœáẠá¡ááá·áºááŒáá·áºá¡áá¬á¡á¬ážáá¯á¶ážá¡ááœáẠáááºááŒáœá áœá¬á¡áá¯á¶ážááŒá¯ááŒáááº)á ááá¯á·ááŒá±á¬áá·áºá datasheet ááœááºáá°áá®áá±á¬ááŸááºáá¯á¶áááºáá¬ážáá±á¬ááááºá á¬áá»á¬ážááá¯ááŸá¬ááœá±ááŒá®ážáá¯ááºááá¯áá°ážáá°áááºáá¯á¶áá±á¬ááºáááºá áá±á¬ááºážááŒá®á ááŒáááºááŸá¯ááºážááá¯ááºážááŒá¬ážááŸá¯ááááºááá¯ážááá¯ááŒá±á¬ááºážáá±á¬ááŒá±á¬áá·áº ... ááá timer ááẠááŸá áºáá¯áá«áá«ááá¯ááºáá±á¬áºáááºáž ááŸááºáá¯á¶áááºááŸá áºáá¯ááŸá 16-bit áááºááá¯ážá¡ááá¡áá»ááᯠáááºáá¶áááŸáááá¯áááºá Prescaler ááŒáá·áºáááºá О á¡áááá·áº. áá»áœááºá¯ááºááá¯á·ááẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±á¬ááºááŒá®áž ... áááá¡áá»áááºááá¯ááºážáááááᬠá¡áá¯ááºááá¯ááºáá«á áá¬ááŒá áºáá¬áá²?
áá»áœááºá¯ááºááá¯á·ááẠáá¯ááá timer ááœááºáááŸáááá·áºá¡áá¬ááá¯ááŸá¬ááá·áº timer 1 áááááºážáá»á¯ááºááŸá¯á á¬áááºážááá¬ážáá»á¬ážá¡ááŒá±á¬ááºáž ááá¹ááá áºáá¯áá¯á¶ážááá¯ááŸá¬ááœá±ááŒááºážááŒáá·áºáᬠááŒá¿áá¬ááá¯ááŒá±ááŸááºážááá¯ááºáááºááŒá áºáááºá ááŸááá«ááááºá·ááẠ17.7.30 Break register (TIM1_BKR)áá®áááºážáááºážáááºááŸá¬áá²á
áááºáá¡ááœááºááᯠááœáá·áºáá«á
#define TIM1_BKR *(volatile uint8_t *)0x00526D
TIM1_BKR = (1<<7);
á¡áá¯áá¯ááºá áá«áá²áá±áá»á¬áááºá
STM8 Multiplex
STM8 ááœáẠMultiplexing
ááááá¡áá±ážá
á¬ážááá±á¬áá»ááºááẠPWM áá¯ááºááœáẠáá¯áááá¡áá»áááºááá¯ááºážáááááá¬ááŸáá·áº RGB LED ááŸá
áºáá¯á¶ážááᯠáá»áááºáááºááŒá®áž ááá°áá®áá±á¬á¡áá±á¬ááºáá»á¬ážááᯠááŒááááºááŒá
áºáááºá áááºážááẠLED multiplexing á ááá±á¬ááá¬ážá¡áá±á«áº á¡ááŒá±áá¶áá¬ážááŒááºážááŒá
áºááŒá®ážá ááá¯ááá¯áááºááŸá¬ áááºááẠLEDs áá»á¬ážááᯠá¡ááœááºáá»ááºááŒááºá
áœá¬ ááœáá·áºááá¯ááºááááºááá¯ááºáá»áŸáẠáááºážááá¯á·ááẠá¡áááºáááŒááºááœáá·áºáá±áá¯á¶ááááá·áºááẠ(áá°áá«áá¯á¶ááááºááŒá²ááŸá¯á¡ááŒááºá¡á¬áá¯á¶ (inertia of visual perception)á ááá«áá¯ááºáá°ážáááºá
á¡áá¯áẠalgorithm ááẠá€áá²á·ááá¯á· ááŒá áºáááº-
- ááá RGB LED á anode ááá¯áá»áááºáááºáá«á
- áá®ážááœááºážááŒá®áž ááá¯á¡ááºáá±á¬ á¡áá»ááºááŒááŸá¯áá»á¬ážááᯠcathodes ááá¯á· áá±ážááá¯á·ááŒááºážá
- PWM áááºáááºááŸá¯ ááŒá®ážáá¯á¶ážáááºá¡áá á á±á¬áá·áºáá²á·áááºá
- áá¯ááá RGB LED á anode ááá¯áá»áááºáááº;
- ááœááºážááá¯ááºáá«...
á¡ááºáž á áááŒáá·áºá áá¯ááºáá«áááºá ááŸááá±á¬áááºáááºááŸá¯á¡ááœáẠanode ááá¯áá»áááºáááºáá¬ážááŒá®áž LED ááá¯áá áºáá»áááºáááºážááŸá¬ "áá®ážáá±á¬ááº" áááºááá¯á¡ááºáááºá áá±á¬ááºážááŒá®, ááá¯á·ááá¯ááºáá®ážáá«ážá áááºááá¯á·áááºááá¯á á±á áá»áœááºá¯ááºááá¯á·ááẠáá¯áááá¡áá»áááºááá¯ááºážáááááá¬á áá»ááºáááºáá¯á¶ážáá¯ááœáẠáááºááá¯ážáá»á¬ážáá¯ááºáá±ážááá·áº áá¯ááºáá áºáá¯áá±ážááẠááá¯á¡ááºááŒá®ážá UEV áá±á¬ááºááŸáááá·áºá¡áá« áááºážááá¯á·ááᯠááŒá±á¬ááºážáá²áááºááŸáá·áº áááºááŸáá¡áá¯á¶ážááŒá¯áá±ááá·áº RGB LED ááᯠáá áºáá»áááºáááºážááœáẠááŒá±á¬ááºážáá²ááẠááá¯á¡ááºáááºá
LED áá°ážááŒá±á¬ááºážááŒááºážááẠá¡ááá¯á¡áá»á±á¬ááºááŒá áºáá±á¬ááŒá±á¬áá·áºá ááŒá¬ážááŒááºááá¯ááºááœááºáá°ááẠáá±áá¬áááŸáááá·áº "áá®áá®ááá¯ááŸááºáá¬ááº" ááᯠáááºáá®ážááẠááá¯á¡ááºáá«áááºá áá«á ááá¯ážááŸááºážáá²á· array áá áºáá¯áá«
uint8_t colors[8][3];
áá®ážááŒá¬áž LED áá áºáá¯áá¡áá±á¬ááºááá¯ááŒá±á¬ááºážáá²áááºá¡ááœááºá áááºážááẠááá¯á¡ááºáá±á¬áááºááá¯ážáá»á¬ážááᯠဠarray ááœááºáá±ážáááºáá¯á¶áá±á¬ááºáááºááŒá áºáááºá ááŸáá·áº variable ááẠactive LED ááá¶áá«ááºá¡ááœááºáá¬áááºááŸááááºá
uint8_t cnt;
Demux
ááá·áºáá»á±á¬áºáá±á¬ multiplexing á¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá°ážáááºážáá±á¬ááºá¡á±á¬áẠáá¯á¶áá±á¬ááºáá±á¬ CD74HC238 demultiplexer áá
áºáᯠááá¯á¡ááºáá«áááºá Demultiplexer - á¡á±á¬áºááá±áá¬á¡á¬áž áá¬á·ááºáá²ááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºááá·áº áá»á
áºááºáá
áºáᯠ<<
. input pins áá¯á¶ážáᯠ(bits 0á 1 ááŸáá·áº 2) ááŸáááá·áº áááºážááᯠáá¯á¶ážáá
áºáá¶áá«áẠX ááᯠáá»áœá±ážááŒá®áž áá¯á¶á·ááŒááºááŸá¯ááŒáá·áº áááºážááẠoutput number ááᯠá¡áááºááœááºážááẠ(1<<X
) Chip á áá»ááºááŸááá±á¬ ááœááºážá¡á¬ážá
á¯áá»á¬ážááᯠáá®ááá¯ááºážáá
áºáá¯áá¯á¶ážááᯠá¡ááá¯ááºážá¡áá¬á¡ááŒá
Ạá¡áá¯á¶ážááŒá¯áá«áááºá ááá¯ááºáááá¯ááœááºáááá¯áá¬á ááááºážááá¯ááºáá¬ážáá±á¬ pins á¡áá±á¡ááœááºááᯠáá»áŸá±á¬á·áá»áááºáá¬áá áá±ážáááºážáááºá¡ááœááºáááºáž á€áá»á
áºááºááᯠááá¯á¡ááºááẠ- LEDs áá»á¬ážááᯠááŒá
áºááá¯ááºáááºááẠááá¯ááœáá·áºááŒá®áž MK ááᯠááá±á¬ááºáá»áœááºážá
á±áááºá¡ááœáẠááá¯á¡ááºáá«áááºá áá»á
áºááºááŒá¬ážááẠáá
áºááŒá¬ážáá
áºáá»ááºáá»áŸ áá¯ááºáá»ááŒá®áž ááá·áºá¡áááºááŸá áá±ážáá±áá¹áá¬ááœáẠá¡ááŒá²ááááºážáááºážáá¬ážááá·áºáááºá
áá»áœááºá¯ááºááá¯á·á CD74HC238 ááẠááá¯áá»ááºáá±á¬ LED á anode ááá¯á· ááá¯á·á¡á¬áž áá±ážáá±á¬ááºááẠáá¬áááºááŸááá«áááºá ááŒáá·áºá
á¯á¶áá±á¬ multiplex ááœááºá áááºážááẠP-MOSFET ááŸáááá·áº áá±á¬áºáá¶ááá¯á· ááá¯á·á¡á¬áž áá¶á·ááá¯ážáá±ážáááºááŒá
áºáá±á¬áºáááºáž á€ááá¯ááºááŒááœáẠáááºážááẠááá¯ááºááá¯ááºááŒá
áºááá¯ááºáá±á¬ááŒá±á¬áá·áºá á¡ááá¯á¡á 20 mA ááá¯ááœá²áá°áááºá á¡ááŒáœááºážáá²á· á¡ááŒáá·áºáá¯á¶áž á¡ááá·áºáááºááŸááºáá»ááºáá»á¬áž datasheet áá²ááŸá¬á áá¶ááŸ
H = ááŒáá·áºáá¬ážáá±á¬ááá¯á·á¡á¬ážá¡ááá·áºá L = ááá¯á·á¡á¬ážáááá·áºá¡ááá·áºá X â ááá¯áá
áá¯ááºáá«á
áá»áœááºá¯ááºááá¯á·ááẠE2 ááŸáá·áº E1 ááᯠááŒá±ááŒááºá E3á A0á A1 ááŸáá·áº A3 ááá¯á· STM5 á PD3á PC4á PC5 ááŸáá·áº PC8 ááá¯á·ááᯠáá»áááºááẠáá»áááºáááºáá«áááºá á¡áááºáá±á¬áºááŒáá«ááá¬ážááœáẠá¡áááá·áºááŸáá·áº á¡ááŒáá·áºá¡ááá·áº ááŸá áºáá»áá¯ážáá¯á¶ážáá«ááŸááá±á¬ááŒá±á¬áá·áºá ဠpins áá»á¬ážááᯠpush-pull pins á¡ááŒá ẠáááºááŸááºáá±ážáá«áááºá
PWM
áá¯áááá¡áá»áááºááá¯ááºážáááááá¬áá±á«áºááŸá PWM ááᯠááœá²ááŒá¬ážááŸá¯ááŸá áºáá¯ááŒáá·áº ááááºáá¬ááºáááºážááœáẠáá°áá®áá±á¬áá¯á¶á á¶ááŒáá·áº á á®á ááºáááºááŸááºáá¬ážáááº-
ááááŠážá áœá¬á áá»áœááºá¯ááºááá¯á·ááẠinterrupt ááá¯ááœáá·áºáááºááá¯áááºá ááŒá áºáááºááᯠá¡ááºááááºáá¯ááºáá«á (UEV) ááẠá¡áááºáááºáá±á¬ LED ááᯠááŒá±á¬ááºážáá±ážááá·áº áá¯ááºáá±á¬ááºáá»ááºááᯠáá±á«áºáááºá áááºážááẠbit ááá¯ááŒá±á¬ááºážáá²ááŒááºážááŒáá·áºáá¯ááºáá±á¬ááºáááºá Update Interrupt ááá¯ááœáá·áºáá«á áá¬áááºááŒá±á¬ááŒáá²á· ááŸááºáá¯á¶áááºáá áºáá¯áá²ááŸá¬
ááŸááºáá¯á¶áááºááŒááºážááᯠá¡ááŸá±á¬áá·áºá¡ááŸááºáá±ážáááºá
#define TIM2_IER *(volatile uint8_t *)0x005303
//enable interrupt
TIM2_IER = 1;
áá¯ááá ááŒá¬ážáá¬ážáá»áẠááŸá¬ multiplexing á ááŒá áºá áẠááŸáá·áº áááºááẠááẠáá ááá² - diode ááááºáá«ážáá±á¬ááºáááŸá¯á áá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¡áá±ááœááºá timer ááẠUEV ááœááºááŸá±á¬áá·áºááŸááºááŸá¯ááá¯ááŒá áºáá±á«áºá á±ááŒá®áž timer ááẠáááºáááºá á¡ááŸááºááŒá áºáá±ááŒá®ážá timer á០pins áá»á¬ážááá¯á·áá áºáá¯áá¯ááá±ážáá® LED ááá¯ááŒá±á¬ááºážáááºá¡áá»áááºáááŸáááŒááºážááŒá±á¬áá·áºáá±á«áºáá¬ááá¯ááºáááºá áááºážááᯠááá¯ááºáá»ááºáááºá áááºááẠáá¯áá¹áááá±á (0 = á¡ááŒáá·áºáá¯á¶áž áá±á¬ááºáááŸá¯á 255 = áááºááá·áºá¡áá¬áá»áŸ á¡áááºážáá±á¬ááºáááŸá) ááᯠááŒá±á¬ááºážááŒááºááŸááºáááºááŸáá·áº ááœááºáá²áá±á¬ áá¬áááºá ááºáááºážáááºááá¯ážáá»á¬ážááᯠááŸá±á¬ááºááŸá¬ážááá«áááºá á¡á²áá«ááœá±á UEV ááŒá®ážáá±á¬áẠLED áá»á¬ážááẠPWM áááºáááºááŸá¯áá áºáá¯á¡ááœáẠáá¯á¶ážáááœááºááœá¬ážááŒá±á¬ááºáž áá±áá»á¬áá«á á±á
ááœá²ááŒá¬ážááŸá¯ááŒá±á¬ááºážáá²ááŒááºáž-
//set polarity
TIM2_CCER1 |= (CC1P | CC2P);
TIM2_CCER2 |= CC3P;
rá g ááŸáá·áº b ááá¯á·á¡á¬áž 255 áᯠáááºááŸááºááŒááºážááᯠááŸá±á¬ááºááŒááºááŒá®áž áááºážááá¯á·ááᯠá¡áá¯á¶ážááŒá¯ááá·áºá¡áá« áááºážááá¯á·ááᯠááŒá±á¬ááºážááŒááºááŸááºááẠááá±á·áá«ááŸáá·áºá
á¡ááŸá±á¬áá·áºá¡ááŸááºáá±ážáááºá
á¡ááŸá±á¬áá·áºá¡ááŸááºáá áºáá¯á á¡ááŸá áºáá¬áááŸá¬ á¡áá»áá¯á·áá±á¬á¡ááŒá±á¡áá±áá»á¬ážááœáẠáá»á áºááºááẠáááºááááá¯ááááºááᯠáá¯ááºáá±á¬ááºáá±ááŒááºážááᯠáááºááá¯ááºááŒá®áž ááŒááºááá¯ááºáá±á¬ááºáá»ááºá¡áá»áá¯á·ááᯠáá±á«áºááá¯ááŒááºážááŒá áºáááºá timer á¡áá«á¡ááẠááŒááºá ááá¯á·ááá¯áẠá¡ááœááºážááá¯ááºáž ááœáŸááºážááá¯ážááŸá¯áá»á¬ážááŒá±á¬áá·áº á¡ááŸá±á¬áá·áºá¡ááŸááºáá»á¬áž ááŒá áºáá±á«áºáá«áááºá
ááá¯á·á¡ááŒáẠST Visual Develop ááœáẠááá±á¬áá»ááºáá
áºáá¯ááᯠááááá¯á¶áž áááºáá®ážáá±á¬á¡áá«á main.c
áá»áŸáá¯á·ááŸááºáááºážááŒááºáá±á¬ ááá¯ááºáá
áºáá¯áá«ááá·áº áááºážááá¯ážáá
áºáá¯ááᯠáá»áœááºá¯ááºááá¯á· áááºáá¶áááŸááá²á·áááºá stm8_interrupt_vector.c
ááá±á¬áá»ááºááœáẠá¡ááá¯á¡áá»á±á¬áẠáá«áááºáá«áááºá á€ááá¯ááºááœááºá ááŒá¬ážááŒááºáá
áºáá¯á
á®á¡ááœáẠáá¯ááºáá±á¬ááºáá»ááºáá
áºáá¯ááᯠáááºááŸááºáá±ážáááºá NonHandledInterrupt
. áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááá¯ááºáá±á¬ááºáá»ááºááᯠááá¯áá»ááºáá±á¬á¡ááŸá±á¬ááºá¡ááŸááºááŒá
áºá
á±ááẠááá¯á¡ááºáááºá
áá±áá¬á á¬ááœááºááœáẠáá»áœááºá¯ááºááá¯á·ááá¯á¡ááºááá·áºá¡áá¬áá»á¬ážááᯠáá»áœááºá¯ááºááá¯á·ááŸá¬ááœá±á·ááá·áº ááŒá¬ážááŒáẠvector ááá¬ážáá áºáá¯ááŸááááºá
13 TIM2 á¡ááºááááº/ááá¯áá»áŸá¶ááŸá¯
14 TIM2 áááºážáá°/ááŸáá¯ááºážááŸááº
UEV ááœáẠLED ááá¯áá»áœááºá¯ááºááá¯á·ááŒá±á¬ááºážáá²áááºááá¯á¡ááºáááºá ááá¯á·ááŒá±á¬áá·áºáá»áœááºá¯ááºááá¯á·ááŒá¬ážááŒáẠ#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 command ááᯠá¡áá¯á¶ážááŒá¯á áá¯ááºáá±á¬ááºáááºá rim
- áááºá¡á²áá«ááá¯ááŸá¬ááœá±ááá«áááá·áºáááºá
//enable interrupts
_asm("rim");
áá±á¬ááºáá
áºáá¯ááá±á¬á· assembler command áá«á sim
- á¡ááŸá±á¬áá·áºá¡ááŸááºáá»á¬ážááᯠááááºáá«á áááºááá¯ážá¡áá
áºáá»á¬ážááᯠ"áá®áá®ááá¯ááŸááºáá¬ááº" ááœááºáá±ážáá±áá»áááºááœáẠáááºážááá¯á·ááᯠááááºáá¬ážááááºááŒá
áºááŒá®ážá ááá¯á·ááŒá±á¬áá·áº ááŸá¬ážááœááºážááá·áºá¡ááá¯ááºá¡ááá·áºááŒá±á¬áá·áº array ááᯠááá»ááºá
á®ážá
á±ááẠáááºážááá¯á·ááᯠááááºááá«áááºá
áá¯ááºá¡á¬ážáá¯á¶áž-
á¡áááºážáá¯á¶áž áá áºáá±á¬ááºáá±á¬ááºá áá®áá±á¬ááºážáá«ážááᯠá¡áá¯á¶ážáááºáá¬ááœá±á·ááẠá¡áá»ááºážááŸá®ážááá±ážáá«áá°ážá ááŸááºáá»ááºáá»á¬ážááŸáá·áº ááŸááºáá»ááºáá»á¬ážááᯠáááºáá¶áááŸáááá·áºá¡ááœáẠáááºážááŒá±á¬ááºáááºážáá¬ááŒá áºááŒá®áž á¡áá¬á¡á¬ážáá¯á¶ážááᯠááŒáá¯ážá á¬ážááŒá±ááŒá¬ážáá±ážáá«áááºá
source: www.habr.com