Basaha ang mga datasheet 2: SPI sa STM32; PWM, timers ug interrupts sa STM8
В ang una nga bahin Gisulayan nako nga isulti ang hobby electronics engineers nga nagdako gikan sa Arduino pants kung giunsa ug ngano nga kinahanglan nila basahon ang mga datasheet ug uban pang dokumentasyon alang sa mga microcontroller. Ang teksto nahimong dako, busa misaad ako nga magpakitag praktikal nga mga pananglitan sa usa ka separadong artikulo. Aw, gitawag niya ang iyang kaugalingon nga milk mushroom...
Karon ipakita ko kanimo kung giunsa ang paggamit sa mga datasheet aron masulbad ang yano, apan kinahanglan alang sa daghang mga proyekto, mga buluhaton sa STM32 (Blue Pill) ug mga controller sa STM8. Ang tanan nga mga proyekto sa demo gipahinungod sa akong paborito nga mga LED, kami magadagkot kanila sa daghang gidaghanon, diin kinahanglan namon nga gamiton ang tanan nga mga lahi sa makapaikag nga mga peripheral.
Ang teksto pag-usab nahimo nga dako, mao nga alang sa kasayon ako sa paghimo sa sulod:
Disclaimer: Dili ako usa ka engineer, wala ko magpakaaron-ingnon nga adunay lawom nga kahibalo sa electronics, ang artikulo gituyo alang sa mga amateurs sama kanako. Sa pagkatinuod, giisip nako ang akong kaugalingon duha ka tuig na ang milabay isip target audience. Kung adunay usa nga nagsulti kanako kaniadto nga ang mga datasheet sa usa ka dili pamilyar nga chip dili makahadlok nga basahon, dili unta ako mogugol ug daghang oras sa pagpangita sa pipila ka mga piraso sa code sa Internet ug pag-imbento sa mga saklay nga adunay gunting ug adhesive tape.
Ang pokus sa kini nga artikulo mao ang mga datasheet, dili mga proyekto, aron ang code mahimong dili kaayo hapsay ug kanunay nga hagip-ot. Ang mga proyekto mismo yano ra kaayo, bisan kung angay alang sa usa ka una nga kaila sa bag-ong chip.
Nanghinaut ko nga ang akong artikulo makatabang sa usa ka tawo sa susamang yugto sa pagpaunlod sa kalingawan.
STM32
16 LEDs nga adunay DM634 ug SPI
Usa ka gamay nga proyekto gamit ang Blue Pill (STM32F103C8T6) ug DM634 LED driver. Gamit ang mga datasheet, mahibal-an namon ang drayber, mga pantalan sa STM IO ug i-configure ang SPI.
DM634
Ang Taiwanese chip nga adunay 16 16-bit PWM outputs, mahimong konektado sa mga kadena. Ang low-end nga 12-bit nga modelo nahibal-an gikan sa usa ka domestic nga proyekto Lightpack. Sa usa ka higayon, nagpili tali sa DM63x ug sa bantog nga TLC5940, gipili nako ang DM sa daghang mga hinungdan: 1) TLC sa Aliexpress siguradong peke, apan kini dili; 2) DM adunay usa ka autonomous PWM uban sa iyang kaugalingon nga frequency generator; 3) kini mahimong mapalit nga dili mahal sa Moscow, imbes nga maghulat alang sa usa ka parsela gikan sa Ali. Ug, siyempre, makapaikag nga mahibal-an kung giunsa ang pagkontrol sa chip sa imong kaugalingon, imbes nga mogamit usa ka andam nga librarya. Ang mga chips karon nag-una nga gipresentar sa SSOP24 nga pakete; kini dali nga magbaligya sa usa ka adapter.
Tungod kay Taiwanese ang tiggama, datasheet ang chip gisulat sa Chinese English, nga nagpasabot nga kini makalingaw. Una atong tan-awon ang pinout (Koneksyon sa Pin) aron masabtan kung unsang paa ang ikonektar kung unsa, ug usa ka paghulagway sa mga lagdok (Paglaraw sa Pin). 16 ka mga pin:
Mga Tinubdan sa DC Sink (Open Drain)
Paghilum / Open-drain nga output - habwaon; tinubdan sa inflowing kasamtangan; ang output konektado sa yuta sa aktibo nga estado - ang mga LED konektado sa drayber pinaagi sa mga cathodes. Sa elektrisidad, kini, siyempre, dili usa ka "bukas nga kanal" (bukas nga kanal), apan sa mga datasheet kini nga pagtawag alang sa mga lagdok sa drain mode sagad makita.
Ang mga eksternal nga resistor tali sa REXT ug GND aron itakda ang karon nga kantidad sa output
Usa ka reperensiya nga resistor ang gibutang taliwala sa REXT pin ug yuta, nga nagkontrol sa internal nga pagsukol sa mga output, tan-awa ang graph sa panid 9 sa datasheet. Sa DM634, kini nga pagsukol mahimo usab nga kontrolado sa software, nga nagtakda sa kinatibuk-ang kahayag (global nga kahayag); Dili ko moadto sa mga detalye sa kini nga artikulo, magbutang lang ako usa ka 2.2 - 3 kOhm resistor dinhi.
Aron masabtan kung unsaon pagkontrol sa chip, atong tan-awon ang paghulagway sa interface sa device:
Oo, ania kini, Intsik nga English sa tanan nga himaya niini. Ang paghubad niini usa ka problema, mahimo nimong masabtan kung gusto nimo, apan adunay lain nga paagi - tan-awa kung giunsa ang koneksyon sa parehas nga function nga TLC5940 gihulagway sa datasheet:
... Tulo lang ka mga pin ang gikinahanglan aron makasulod sa data ngadto sa device. Ang pagtaas sa ngilit sa SCLK signal nagbalhin sa datos gikan sa SIN pin ngadto sa internal nga rehistro. Human makarga ang tanang datos, ang usa ka mubo nga taas nga XLAT signal nagtak-op sa sunodsunod nga gibalhin nga datos ngadto sa internal nga mga rehistro. Ang mga internal nga rehistro mao ang mga ganghaan nga na-trigger sa lebel sa signal sa XLAT. Ang tanan nga datos gipasa una sa labing hinungdanon nga gamay.
Latch - trangka / trangka / trangka. Nagtaas nga ngilit - nag-unang ngilit sa pulso MSB una – labing mahinungdanon (labing wala) bit forward. sa data sa orasan - Pagpadala sa datos nga sunud-sunod (gamay).
Ang pulong trangka kanunay nga makit-an sa dokumentasyon alang sa mga chips ug gihubad sa lainlaing mga paagi, busa alang sa pagsabut tugutan nako ang akong kaugalingon
gamay nga programa sa edukasyonAng drayber sa LED usa ka rehistro sa pagbalhin. "Pagbalhin" (pagbalhin) sa ngalan - bitwise nga paglihok sa datos sulod sa device: ang matag bag-ong bit nga giduso sa sulod moduso sa tibuok kadena sa unahan niini. Tungod kay walay usa nga gusto nga mag-obserbar sa gubot nga pagkidlap sa mga LED sa panahon sa pagbalhin, ang proseso mahitabo sa mga buffer register nga gibulag gikan sa nagtrabaho nga mga rehistro pinaagi sa usa ka damper (trangka) mao ang usa ka matang sa lawak hulatanan diin ang mga piraso gihan-ay sa gitinguha nga han-ay. Sa diha nga ang tanan andam na, ang shutter moabli ug ang mga piraso moadto sa pagtrabaho, pag-ilis sa miaging batch. Pulong trangka sa dokumentasyon alang sa microcircuits hapit kanunay nagpasabot sa maong usa ka damper, bisan unsa nga kombinasyon kini gigamit.
Busa, ang pagbalhin sa data ngadto sa DM634 gihimo sama niini: ibutang ang DAI input sa bili sa labing mahinungdanon nga bit sa layo nga LED, ibira ang DCK pataas ug paubos; ibutang ang DAI input sa bili sa sunod nga bit, kuhaa ang DCK; ug uban pa hangtod ang tanan nga mga bit napasa (nag-oras), pagkahuman gibira namon ang LAT. Mahimo kini nga mano-mano (gamay-bang), apan mas maayo nga gamiton ang interface sa SPI nga espesyal nga gipahaum alang niini, tungod kay gipresentar kini sa among STM32 sa duha ka kopya.
Asul nga Pill STM32F103
Pasiuna: Ang mga tigkontrol sa STM32 labi ka komplikado kaysa sa Atmega328 kaysa kini daw makahadlok. Dugang pa, alang sa mga hinungdan sa pagdaginot sa enerhiya, hapit tanan nga mga peripheral gipalong sa pagsugod, ug ang frequency sa orasan mao ang 8 MHz gikan sa internal nga gigikanan. Maayo na lang, ang mga programmer sa STM nagsulat og code nga nagdala sa chip ngadto sa "kalkulado" nga 72 MHz, ug ang mga tagsulat sa tanan nga mga IDE nga akong nahibal-an naglakip niini sa pamaagi sa pagsugod, mao nga dili na nato kinahanglan ang orasan (apan mahimo nimo kung gusto nimo). Apan kinahanglan nimo nga i-on ang mga peripheral.
Dokumentasyon: Ang Blue Pill nasangkapan sa sikat nga STM32F103C8T6 chip, adunay duha ka mapuslanon nga mga dokumento alang niini:
Data Sheet alang sa microcontrollers STM32F103x8 ug STM32F103xB;
Pinouts - chip pinouts - kung magdesisyon kami nga himuon ang mga tabla sa among kaugalingon;
Memory Map – memory map para sa usa ka piho nga chip. Ang Reference Manual adunay mapa para sa tibuok linya, ug kini naghisgot sa mga rehistro nga wala sa atoa.
Talaan sa Pin Definition – naglista sa nag-una ug alternatibong mga gimbuhaton sa mga lagdok; alang sa "asul nga pildoras" makit-an nimo ang labi ka dali nga mga litrato sa Internet nga adunay usa ka lista sa mga pin ug ang ilang mga gimbuhaton. Busa, gi-google dayon namo ang Blue Pill pinout ug gitago kini nga hulagway:
NB: adunay sayup sa litrato gikan sa Internet, nga nahibal-an sa mga komentaryo, salamat niana. Ang hulagway gipulihan, apan kini usa ka leksyon - mas maayo nga susihon ang impormasyon dili gikan sa mga datasheet.
Among tangtangon ang datasheet, ablihan ang Reference Manual, ug sugod karon gamiton na lang namo kini.
Pamaagi: atong atubangon ang standard input/output, i-configure ang SPI, i-on ang gikinahanglang peripheral.
Input Output
Sa Atmega328, ang I/O gipatuman nga yano ra kaayo, mao nga ang kadaghan sa mga kapilian sa STM32 mahimong makalibog. Karon kinahanglan ra naton ang mga konklusyon, apan bisan kini adunay upat nga kapilian:
open drain, push-pull, alternative push-pull, alternatibo open drain
"Pull-push" (itulod-bira) mao ang naandan nga output gikan sa Arduino, ang pin mahimong makakuha sa bili nga HIGH o LOW. Apan sa "open drain" adunay mga kalisdanan, bisan tuod sa pagkatinuod ang tanan yano dinhi:
Konfigurasyon sa output / sa dihang ang port gi-assign sa output: / output buffer enabled: / – open drain mode: “0” sa output register makapahimo sa N-MOS, “1” sa output register mobiya sa port sa Hi-Z mode ( Ang P-MOS wala ma-activate ) / – push-pull mode: “0” sa output register nag-activate sa N-MOS, “1” sa output register nag-activate sa P-MOS.
Ang tanan nga kalainan tali sa bukas nga kanal (bukas nga kanal) gikan sa “push-pull” (itulod-bira) mao nga sa unang pin dili makadawat sa HIGH state: sa pagsulat sa usa sa output register, kini moadto sa high resistance mode (taas nga impedance, Hi-Z). Sa pagsulat sa zero, ang pin naglihok nga parehas sa duha nga mga mode, parehas nga lohikal ug elektrikal.
Sa normal nga output mode, ang pin nagsibya lang sa mga sulod sa output register. Sa "alternatibo" kini kontrolado sa katugbang nga mga peripheral (tan-awa ang 9.1.4):
Kung ang usa ka bit sa port gi-configure ingon usa ka alternate function pin, ang rehistro sa pin ma-disable ug ang pin konektado sa peripheral pin.
Ang alternatibong pag-andar sa matag pin gihulagway sa Mga Kahulugan sa Pin Ang datasheet anaa sa na-download nga hulagway. Sa pangutana kung unsa ang buhaton kung ang usa ka pin adunay daghang mga alternatibong gimbuhaton, ang tubag gihatag sa usa ka footnote sa datasheet:
Kung daghang mga peripheral ang mogamit sa parehas nga pin, aron malikayan ang panagbangi tali sa mga alternatibong gimbuhaton, usa ra ka peripheral ang kinahanglan gamiton sa usa ka higayon, i-toggle gamit ang peripheral clock enable bit (sa angay nga rehistro sa RCC).
Sa katapusan, ang mga pin sa output mode usab adunay usa ka katulin sa orasan. Kini usa pa nga bahin sa pag-save sa enerhiya; sa among kaso, gitakda namon kini sa labing taas ug kalimtan kini.
Mao nga: gigamit namon ang SPI, nga nagpasabut nga ang duha nga mga pin (nga adunay datos ug adunay signal sa orasan) kinahanglan nga "alternatibong pagduso-pagbira function", ug ang usa (LAT) kinahanglan nga "regular nga pagduso-pagbira". Apan sa dili pa sila ma-assign, atong atubangon ang SPI.
SPI
Laing gamay nga programa sa edukasyon
Ang SPI o Serial Peripheral Interface (serial peripheral interface) usa ka yano ug epektibo kaayo nga interface alang sa pagkonektar sa usa ka MK sa ubang mga MK ug sa gawas nga kalibutan sa kinatibuk-an. Ang prinsipyo sa operasyon niini gihulagway na sa ibabaw, diin mahitungod sa Chinese LED driver (sa reference manual, tan-awa ang seksyon 25). Ang SPI mahimong molihok sa master ("master") ug slave ("slave") mode. Ang SPI adunay upat ka sukaranan nga mga kanal, diin dili tanan magamit:
MOSI, Master Output / Slave Input: kini nga pin nagpadala sa datos sa master mode, ug nakadawat og data sa slave mode;
MISO, Master Input / Slave Output: sa sukwahi, kini nakadawat sa agalon, ug nagpadala sa ulipon;
SCK, Serial Clock: nagtakda sa frequency sa data transmission sa master o nakadawat og signal sa orasan sa ulipon. Sa tinuud nga pag-igo sa mga beats;
SS, Slave Select: sa tabang niini nga channel, nahibal-an sa ulipon nga adunay gusto gikan kaniya. Sa STM32 gitawag kini nga NSS, diin N = negatibo, i.e. ang controller mahimong usa ka ulipon kon adunay yuta niini nga channel. Maayo kini nga gikombinar sa Open Drain Output mode, apan lain kana nga istorya.
Sama sa tanan, ang SPI sa STM32 dato sa pagpaandar, nga naghimo niini nga lisud sabton. Pananglitan, mahimo kini nga magtrabaho dili lamang sa SPI, kondili usab sa usa ka interface sa I2S, ug sa dokumentasyon ang ilang mga paghulagway gisagol, gikinahanglan nga putlon ang sobra sa tukma sa panahon nga paagi. Ang among tahas yano ra kaayo: kinahanglan ra namon magpadala mga datos gamit lamang ang MOSI ug SCK. Moadto kami sa seksyon 25.3.4 (katunga-duplex nga komunikasyon, katunga-duplex nga komunikasyon), diin among makita 1 orasan ug 1 unidirectional data wire (1 signal sa orasan ug 1 unidirectional data stream):
Niini nga mode, ang aplikasyon naggamit sa SPI sa transmit-only o receive-only mode. / Transmit-only mode susama sa duplex mode: ang data gipasa sa transmit pin (MOSI sa master mode o MISO sa slave mode), ug ang receive pin (MISO o MOSI matag usa) mahimong gamiton isip regular nga I/O pin. . Sa kini nga kaso, ang aplikasyon kinahanglan lamang nga ibaliwala ang Rx buffer (kung kini gibasa, wala’y mabalhin nga datos didto).
Maayo, ang MISO pin libre, atong ikonektar ang LAT signal niini. Atong tan-awon ang Slave Select, nga sa STM32 mahimong makontrol sa programmatically, nga labi ka kombenyente. Atong mabasa ang paragraph sa samang ngalan sa seksyon 25.3.1 SPI Kinatibuk-ang Deskripsyon:
Software control NSS (SSM = 1) / Ang impormasyon sa pagpili sa ulipon anaa sa SSI bit sa SPI_CR1 register. Ang eksternal nga NSS pin nagpabilin nga libre alang sa ubang mga panginahanglanon sa aplikasyon.
Panahon na sa pagsulat sa mga rehistro. Nakahukom ko nga gamiton ang SPI2, pangitaa ang base nga adres niini sa datasheet - sa seksyon 3.3 Memory Map:
Ablihi ang seksyon 25.3.3 nga adunay titulo nga nagpatin-aw sa kaugalingon nga "Pag-configure sa SPI sa Master Mode":
1. I-set ang serial clock frequency nga adunay bits BR[2:0] sa SPI_CR1 register.
Ang mga rehistro gikolekta sa seksyon sa reference manual nga parehas nga ngalan. Pagbalhin sa adres (Address offset) para sa CR1 – 0x00, pinaagi sa default ang tanan nga mga bit gitangtang (I-reset ang bili 0x0000):
Ang BR bits nagbutang sa controller clock divider, sa ingon nagtino sa frequency diin ang SPI molihok. Ang among STM32 frequency mahimong 72 MHz, ang LED driver, sumala sa iyang datasheet, naglihok sa frequency nga hangtod sa 25 MHz, mao nga kinahanglan namo nga bahinon sa upat (BR[2:0] = 001).
2. I-set ang CPOL ug CPHA bits aron ipatin-aw ang relasyon tali sa pagbalhin sa datos ug serial clock timing (tan-awa ang diagram sa pahina 240)
Tungod kay nagbasa kami og usa ka datasheet dinhi ug wala magtan-aw sa mga eskematiko, atong tan-awon pag-ayo ang paghulagway sa teksto sa CPOL ug CPHA bits sa panid 704 (SPI General Deskripsyon):
Ang yugto sa orasan ug polarity
Gamit ang CPOL ug CPHA bits sa SPI_CR1 nga rehistro, mahimo nimong pilion sa programa ang upat ka mga relasyon sa timing. Ang CPOL (clock polarity) bit nagkontrol sa kahimtang sa signal sa orasan kung walay data nga gipasa. Kini nga gamay nagkontrol sa master ug slave mode. Kung ang CPOL gi-reset, ang SCK pin ubos sa rest mode. Kung ang CPOL bit gitakda, ang SCK pin taas sa panahon sa rest mode.
Sa diha nga ang CPHA (clock phase) bit gibutang, ang taas nga bit trap strobe mao ang ikaduha nga ngilit sa SCK signal (mahulog kon CPOL tin-aw, mobangon kon CPOL gibutang). Ang datos makuha sa ikaduhang pagbag-o sa signal sa orasan. Kung ang CPHA bit klaro, ang taas nga bit trap strobe mao ang pagtaas sa ngilit sa SCK signal (falling edge kung CPOL ang gitakda, ang pagtaas sa edge kung ang CPOL natangtang). Ang datos makuha sa unang pagbag-o sa signal sa orasan.
Ang pagkasuhop niini nga kahibalo, nakahinapos kami nga ang duha ka mga piraso kinahanglan magpabilin nga mga sero, tungod kay Gusto namon nga ang signal sa SCK magpabilin nga ubos kung dili gamiton, ug ang datos nga ipadala sa pagtaas sa ngilit sa pulso (tan-awa ang Fig. Rising Edge sa DM634 datasheet).
Pinaagi sa dalan, dinhi una namong nakit-an ang usa ka bahin sa bokabularyo sa ST datasheets: diha kanila ang hugpong sa mga pulong nga "i-reset ang gamay ngadto sa zero" gisulat. para ma reset gamay, ug dili para maklaro gamay, sama, pananglitan, Atmega.
3. Ibutang ang DFF bit aron matino kung ang data block 8-bit o 16-bit nga format
Ako espesipikong mikuha ug 16-bit DM634 aron dili mahasol sa pagpadala sa 12-bit nga PWM data, sama sa DM633. Makatarunganon nga ibutang ang DFF sa usa:
4. I-configure ang LSBFIRST bit sa SPI_CR1 register aron matino ang block format
Ang LSBFIRST, sumala sa gisugyot sa ngalan niini, nag-configure sa transmission nga adunay labing gamay nga hinungdanon nga gamay una. Apan gusto sa DM634 nga makadawat mga datos sugod sa labing hinungdanon nga gamay. Busa, gibiyaan namo kini nga i-reset.
5. Sa hardware mode, kung gikinahanglan ang input gikan sa NSS pin, gamita ang taas nga signal sa NSS pin atol sa tibuok byte transfer sequence. Sa NSS software mode, ibutang ang SSM ug SSI bits sa SPI_CR1 register. Kung ang NSS pin gamiton isip output, ang SSOE bit lang ang kinahanglan nga itakda.
I-install ang SSM ug SSI aron makalimtan ang bahin sa NSS hardware mode:
#define SSI 0x0100
#define SSM 0x0200
_SPI2_ (_SPI_CR1) |= SSM | SSI; //enable software control of SS, SS high
6. Ang MSTR ug SPE bits kinahanglang itakda (sila magpabilin nga set lamang kung ang NSS signal taas)
Sa tinuud, sa kini nga mga piraso among gitudlo ang among SPI ingon usa ka agalon ug gi-on kini:
Gi-configure ang SPI, isulat dayon nato ang mga function nga nagpadala sa mga byte sa drayber. Padayon sa pagbasa 25.3.3 "Pag-configure sa SPI sa master mode":
Order sa pagbalhin sa datos
Nagsugod ang pagpadala kung ang usa ka byte gisulat sa Tx buffer.
Ang data byte gikarga sa shift register sa parallel mode (gikan sa internal nga bus) sa panahon sa transmission sa unang bit, human nga kini gipasa sa sunodsunod MOSI pin mode, una o katapusang bit forward depende sa setting sa LSBFIRST bit sa CPI_CR1 register. Ang bandila sa TXE gibutang human sa pagpadala sa datos gikan sa Tx buffer ngadto sa shift register, ug makamugna usab og interrupt kung ang TXEIE bit sa CPI_CR1 register gitakda.
Gipasiugda nako ang pipila ka mga pulong sa paghubad aron madani ang atensyon sa usa ka bahin sa pagpatuman sa SPI sa mga tigkontrol sa STM. Sa Atmega ang bandila sa TXE (Tx Walay sulod, Tx walay sulod ug andam sa pagdawat sa datos) gibutang lamang human ang tibuok byte gipadala paggawas. Ug dinhi kini nga bandila gibutang human ang byte gisal-ut ngadto sa internal nga shift register. Tungod kay kini giduso didto uban sa tanan nga mga piraso sa samang higayon (parallel), ug unya ang data ipadala sa sunod-sunod nga, TXE gibutang sa wala pa ang byte hingpit nga ipadala. Importante kini tungod kay sa kaso sa among LED driver, kinahanglan namong ibira ang LAT pin pagkahuman ipadala sa tanan datos, i.e. Ang bandila sa TXE lamang dili igo alang kanato.
Kini nagpasabot nga nagkinahanglan kita og laing bandila. Atong tan-awon ang 25.3.7 - "Mga Bandera sa Status":
<…>
BUSY nga bandera
Ang bandila sa BSY gitakda ug gilimpyohan sa hardware (ang pagsulat niini walay epekto). Ang bandila sa BSY nagpakita sa kahimtang sa layer sa komunikasyon sa SPI.
Gi-reset kini:
kung nahuman na ang pagbalhin (gawas sa master mode kung padayon ang pagbalhin)
kung ang SPI na-disable
kung mahitabo ang usa ka master mode error (MODF=1)
Kung ang pagbalhin dili padayon, ang bandila sa BSY matangtang sa taliwala sa matag pagbalhin sa datos
Okay, kini magamit. Atong tan-awon kung asa nahimutang ang Tx buffer. Aron mahimo kini, basaha ang "SPI Data Register":
Mga Bits 15:0 DR[15:0] Data Register
Data nga nadawat o data nga ipadala.
Ang rehistro sa datos gibahin sa duha ka buffer - usa para sa pagsulat (transmit buffer) ug usa para sa pagbasa (receive buffer). Ang pagsulat sa data register nagsulat sa Tx buffer, ug ang pagbasa gikan sa data register ibalik ang bili nga anaa sa Rx buffer.
Aw, ug ang rehistro sa status, diin ang mga bandila sa TXE ug BSY makita:
Aw, tungod kay kinahanglan namon nga ipadala ang 16 ka beses nga duha ka byte, sumala sa gidaghanon sa mga output sa driver sa LED, usa ka butang nga sama niini:
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();
}
Apan wala pa mi kahibalo unsaon pagbira sa LAT pin, mao nga mobalik mi sa I/O.
Pag-assign sa mga pin
Sa STM32F1, ang mga rehistro nga responsable sa kahimtang sa mga pin talagsaon kaayo. Klaro nga adunay daghan kanila kaysa sa Atmega, apan lahi usab sila sa ubang mga chip sa STM. Seksyon 9.1 Kinatibuk-ang Deskripsyon sa GPIO:
Ang matag usa sa kinatibuk-ang katuyoan sa I/O port (GPIO) adunay duha ka 32-bit configuration registers (GPIOx_CRL ug GPIOx_CRH), duha ka 32-bit data registers (GPIOx_IDR ug GPIOx_ODR), usa ka 32-bit set/reset register (GPIOx_BSRR), usa ka 16-bit reset register (GPIOx_BRR) ug 32- gamay nga blocking register (GPIOx_LCKR).
Ang una nga duha ka mga rehistro dili kasagaran, ug usab dili kombenyente, tungod kay ang 16 nga mga port pin nagkatag sa ilang taliwala sa usa ka "upat ka bit matag igsoon" nga format. Mga. Ang mga pin nga sero hangtod pito naa sa CRL, ug ang nahabilin naa sa CRH. Sa parehas nga oras, ang nahabilin nga mga rehistro malampuson nga naglangkob sa mga tipik sa tanan nga mga pin sa pantalan - kanunay nga nahabilin nga katunga nga "gireserba".
Alang sa kayano, magsugod kita gikan sa katapusan sa lista.
Wala mi magkinahanglan ug blocking register.
Ang set ug pag-reset nga mga rehistro medyo kataw-anan tungod kay sila partially duplicate sa usag usa: mahimo nimong isulat ang tanan sa BSRR lamang, diin ang mas taas nga 16 bits mag-reset sa pin ngadto sa zero, ug ang ubos nga mga butang ibutang sa 1, o mahimo usab nimo. gamita ang BRR, ang ubos nga 16 ka bits diin i-reset lang ang pin. Ganahan ko sa ikaduha nga kapilian. Importante kini nga mga rehistro tungod kay naghatag kini og atomic access sa mga pin:
Atomic Set o Reset
Dili kinahanglan nga pag-disable ang mga interrupts kung ang pagprograma sa GPIOx_ODR sa lebel sa gamay: ang usa o daghan pa nga mga bit mahimong usbon sa usa ka atomic write operation nga APB2. Kini makab-ot pinaagi sa pagsulat og "1" sa set/reset nga rehistro (GPIOx_BSRR o, alang lamang sa pag-reset, GPIOx_BRR) sa bit nga kinahanglang usbon. Ang ubang mga bit magpabilin nga wala mausab.
Ang mga rehistro sa datos adunay mga ngalan nga nagpatin-aw sa kaugalingon - IDR = input Direksyon Register, input register; ODR = output Direksyon Register, rehistro sa output. Dili namo kinahanglan sila sa kasamtangan nga proyekto.
Ug sa katapusan, pagkontrol sa mga rehistro. Tungod kay interesado kami sa ikaduhang SPI pin, nga mao ang PB13, PB14 ug PB15, tan-awon dayon namo ang CRH:
Ug nakita namon nga kinahanglan namon nga isulat ang usa ka butang sa mga piraso gikan sa 20 hangtod 31.
Nahibal-an na namon sa ibabaw kung unsa ang gusto namon gikan sa mga pin, mao nga dinhi akong buhaton nga wala’y screenshot, isulti lang nako nga ang MODE nagtino sa direksyon (input kung ang duha nga mga bit gitakda sa 0) ug ang tulin sa pin (kinahanglan namon ang 50MHz, i.e. pareho nga pin sa "1"), ug ang CNF nagtakda sa mode: regular nga "push-pull" - 00, "alternatibo" - 10. Sa kasagaran, ingon sa atong makita sa ibabaw, ang tanan nga mga pin adunay ikatulo nga bit gikan sa ubos (CNF0), kini nagbutang kanila sa mode naglutaw nga input.
Tungod kay nagplano ako nga buhaton ang usa ka butang sa kini nga chip, alang sa kayano gihubit nako ang tanan nga posible nga mga kantidad sa MODE ug CNF alang sa ubos ug taas nga mga rehistro sa kontrol.
(LAT_low pinaagi lang sa inertia, kini kanunay nga ingon niana, pasagdi kini)
Karon ang tanan maayo, apan dili kini molihok. Tungod kay kini mao ang STM32, sila nagdaginot sa elektrisidad, nga nagpasabot nga kinahanglan nimo nga palihokon ang orasan sa gikinahanglan nga mga peripheral.
I-on ang orasan
Ang relo, nailhan usab nga Orasan, maoy responsable sa pag-orasan. Ug namatikdan na nato ang abbreviation nga RCC. Gipangita namo kini sa dokumentasyon: kini ang Reset ug Clock Control.
Sama sa giingon sa ibabaw, maayo na lang, ang labing lisud nga bahin sa orasan nga hilisgutan gihimo alang kanamo sa mga tawo gikan sa STM, diin kami nagpasalamat kaayo kanila (sa makausa pa maghatag ako usa ka link sa Ang website ni Di Halt, aron maklaro kung unsa kini kalibog). Kinahanglan lang namo ang mga rehistro nga responsable sa pagpagana sa peripheral clocking (Peripheral Clock Enable Registers). Una, atong pangitaon ang base nga adres sa RCC, kini sa sinugdanan sa "Memory Map":
Ug dayon i-klik ang link diin imong sulayan nga makit-an ang usa ka butang sa plato, o, labi ka maayo, pag-adto sa mga paghubit sa makapaarang nga mga rehistro gikan sa mga seksyon bahin sa makahimo sa mga rehistro. Diin atong makit-an ang RCC_APB1ENR ug RCC_APB2ENR:
Ug sila, sumala niana, adunay mga piraso nga naglakip sa clocking sa SPI2, IOPB (I/O Port B) ug alternatibong mga gimbuhaton (AFIO).
Kung naa kay higayon ug tinguha sa pagsulay, dayon ikonektar ang DM634 sama niini: DAI sa PB15, DCK sa PB13, LAT sa PB14. Gihatagan namon ang drayber gikan sa 5 volts, ayaw kalimot sa pagkonektar sa mga nataran.
STM8 PWM
PWM sa STM8
Sa diha nga nagplano pa lang ko niini nga artikulo, nakahukom ko, isip usa ka pananglitan, sa pagsulay sa pag-master sa pipila ka mga gamit sa usa ka dili pamilyar nga chip gamit lamang ang usa ka datasheet, aron dili ako mahuman sa usa ka tigbuhat og sapatos nga walay botas. STM8 mao ang sulundon alang niini nga papel: una, ako adunay usa ka magtiayon nga sa mga Chinese tabla uban sa STM8S103, ug ikaduha, kini dili kaayo popular, ug busa ang tintasyon sa pagbasa ug pagpangita sa usa ka solusyon sa Internet anaa sa kakulang niini nga mga solusyon.
Sa kasagaran, ang STM8 naglihok sa frequency nga 2 MHz, kini kinahanglan nga matul-id dayon.
HSI (High Speed Internal) nga Orasan
Ang signal sa orasan sa HSI nakuha gikan sa usa ka internal nga 16 MHz RC oscillator nga adunay usa ka programmable divider (1 hangtod 8). Gibutang kini sa rehistro sa divider sa orasan (CLK_CKDIVR).
Matikdi: sa pagsugod, usa ka HSI RC oscillator nga adunay divider nga 8 ang gipili isip nag-unang tinubdan sa signal sa orasan.
Atong makita ang rehistro nga adres sa datasheet, ang paghulagway sa refman ug tan-awa nga ang rehistro kinahanglan nga malimpyohan:
Tungod kay kita modagan sa PWM ug magkonektar sa mga LED, atong tan-awon ang pinout:
Ang chip gamay, daghang mga gimbuhaton ang gisuspinde sa parehas nga mga pin. Ang naa sa square bracket mao ang "alternative functionality", kini gibalhin sa "option bytes" (opsyon nga byte) – sama sa Atmega fuse. Mahimo nimong usbon ang ilang mga kantidad sa programmatically, apan dili kinahanglan, tungod kay Ang bag-ong pag-andar gi-aktibo lamang pagkahuman sa pag-reboot. Mas sayon ang paggamit sa ST Visual Programmer (na-download gamit ang Visual Develop), nga makapausab niini nga mga byte. Ang pinout nagpakita nga ang CH1 ug CH2 pin sa unang timer gitago sa square bracket; gikinahanglan nga ibutang ang AFR1 ug AFR0 bits sa STVP, ug ang ikaduha mobalhin usab sa CH1 output sa ikaduhang timer gikan sa PD4 ngadto sa PC5.
Busa, 6 ka mga pin ang magkontrol sa mga LED: PC6, PC7 ug PC3 alang sa unang timer, PC5, PD3 ug PA3 alang sa ikaduha.
Ang pag-set up sa I/O nga mga pin sa STM8 mas simple ug mas lohikal kaysa sa STM32:
pamilyar gikan sa rehistro sa direksyon sa data sa Atmega DDR (Pagrehistro sa Direksyon sa Data): 1 = output;
ang unang control register CR1, sa diha nga ang output, nagtakda sa push-pull mode (1) o open drain (0); tungod kay gikonektar nako ang mga LED sa chip nga adunay mga cathodes, gibilin nako ang mga zero dinhi;
ang ikaduha nga control register CR2, kung ang output, nagtakda sa gikusgon sa orasan: 1 = 10 MHz
PWM Frequency - kasubsob diin ang timer nagtiktik;
Auto-reload, AR - autoloadable nga kantidad hangtod sa pag-ihap sa timer (panahon sa pulso);
Pag-update sa Hitabo, UEV - usa ka panghitabo nga mahitabo kung ang timer naihap sa AR;
Siklo sa Katungdanan sa PWM – PWM duty cycle, sagad gitawag nga “duty factor”;
Kuhaa/Itandi ang Bili - bili alang sa pagdakop / pagtandi, diin ang timer giihap buhaton ang usa ka butang (sa kaso sa PWM, gibalit-ad niini ang output signal);
Preload nga Bili – preloaded nga bili. Itandi ang bili dili mausab samtang ang timer nagtiktik, kon dili ang PWM cycle maguba. Busa, ang mga bag-ong gipasa nga mga kantidad gibutang sa usa ka buffer ug gibira kung ang timer moabut sa katapusan sa iyang countdown ug gi-reset;
Gi-align sa kilid и Mga mode nga gipahiangay sa sentro - pag-align sa utlanan ug sa tunga, parehas sa Atmel Paspas nga PWM и Phase-correct nga PWM.
OCiREF, Output Compare Reference Signal – reference output signal, sa pagkatinuod, unsa ang makita sa katugbang nga pin sa PWM mode.
Sama sa klaro na gikan sa pinout, ang duha ka mga timer adunay mga kapabilidad sa PWM - ang una ug ang ikaduha. Ang duha mao ang 16-bit, ang una adunay daghang dugang nga mga bahin (labi na, mahimo kini mag-ihap sa pataas ug paubos). Kinahanglan namon nga managsama ang pagtrabaho, mao nga nakahukom ako nga magsugod sa klaro nga labing kabus nga ikaduha, aron dili aksidente nga magamit ang usa ka butang nga wala didto. Ang pipila ka problema mao nga ang paghulagway sa PWM functionality sa tanan nga mga timer sa reference manual anaa sa kapitulo mahitungod sa unang timer (17.5.7 PWM Mode), mao nga kinahanglan ka nga molukso balik-balik sa tibuok dokumento sa tanang panahon.
Ang PWM sa STM8 adunay hinungdanon nga bentaha sa PWM sa Atmega:
Boundary Aligned PWM
Pag-configure sa account gikan sa ubos hangtod sa taas
Aktibo ang pag-ihap sa ubos kung ang DIR bit sa rehistro sa TIM_CR1 matangtang
Pananglitan:
Ang pananglitan naggamit sa unang PWM mode. Ang PWM reference signal OCiREF gihuptan nga taas basta TIM1_CNT <TIM1_CCRi. Kay kon dili, nagkinahanglan kini og ubos nga lebel. Kung ang pagtandi nga kantidad sa TIM1_CCRi rehistro mas dako kaysa sa autoload nga kantidad (TIM1_ARR rehistro), ang OCiREF signal gihuptan sa 1. Kung ang kantidad sa pagtandi 0, ang OCiREF gihimo sa zero....
STM8 timer sa panahon update nga panghitabo check una itandi ang bili, ug unya makahimo lamang og reference signal. Ang timer sa Atmega una nga nag-screw ug dayon nagtandi, nga miresulta sa compare value == 0 ang output usa ka dagom, nga kinahanglan nga atubangon sa usa ka paagi (pananglitan, pinaagi sa programmatically inverting ang logic).
Busa unsa ang gusto natong buhaton: 8-bit PWM (AR == 255), pag-ihap gikan sa ubos ngadto sa ibabaw, pag-align sa utlanan. Tungod kay ang mga bombilya konektado sa chip pinaagi sa mga cathodes, ang PWM kinahanglan nga mag-output 0 (LED sa) hangtod itandi ang bili ug 1 human.
Nakabasa na kami bahin sa pipila PWM mode, mao nga atong makita ang gikinahanglan nga rehistro sa ikaduhang timer pinaagi sa pagpangita sa reference manual alang niini nga hugpong sa mga pulong (18.6.8 - TIMx_CCMR1):
110: Unang PWM mode – kon mag-ihap gikan sa ubos ngadto sa ibabaw, ang unang channel aktibo samtang TIMx_CNT <TIMx_CCR1. Kung dili, ang una nga channel dili aktibo. [dugang pa sa dokumento adunay sayop nga copy-paste gikan sa timer 1] 111: Ikaduhang PWM mode – kon mag-ihap gikan sa ubos ngadto sa ibabaw, ang unang channel dili aktibo samtang TIMx_CNT < TIMx_CCR1. Kung dili, ang una nga channel aktibo.
Tungod kay ang mga LED konektado sa MK pinaagi sa mga cathodes, ang ikaduha nga mode angay kanamo (ang una usab, apan wala pa kami nahibal-an).
Bit 3 OC1PE: I-enable ang preload sa pin 1
0: Ang preload nga rehistro sa TIMx_CCR1 gi-disable. Makasulat ka sa TIMx_CCR1 bisan unsang orasa. Ang bag-ong bili molihok dayon.
1: Ang preload nga rehistro sa TIMx_CCR1 gi-enable. Ang mga operasyon sa pagbasa/pagsulat nag-access sa preload nga rehistro. Ang preloaded value TIMx_CCR1 gikarga sa shadow register atol sa matag update nga panghitabo.
*Pahinumdom: Aron ang PWM mode mogana sa hustong paagi, ang preload registers kinahanglang ma-enable. Dili kini gikinahanglan sa single signal mode (ang OPM bit kay gibutang sa TIMx_CR1 register).
Okay, atong i-on ang tanan nga atong gikinahanglan alang sa tulo ka channel sa ikaduhang timer:
Ang ikaduha nga timer mahimo ra nga maihap gikan sa ubos hangtod sa taas, pag-align sa utlanan, wala’y kinahanglan nga usbon. Atong ibutang ang frequency divider, pananglitan, ngadto sa 256. Alang sa ikaduhang timer, ang divider gibutang sa TIM2_PSCR register ug usa ka gahum sa duha:
Ang nahabilin mao ang pagpabalik sa mga konklusyon ug ang ikaduha nga timer mismo. Ang unang problema masulbad pinaagi sa mga rehistro Kuhaa/Itandi makapahimo: adunay duha, tulo ka mga channel nga nagkatag sa ilang asymmetrically. Dinhi mahimo usab naton mahibal-an nga posible nga usbon ang polarity sa signal, i.e. sa prinsipyo, posible nga gamiton ang PWM Mode 1. Nagsulat kami:
Magsulat kita og usa ka yano nga analogue sa AnalogWrite(), nga magbalhin sa aktuwal nga mga bili ngadto sa timer alang sa pagtandi. Ang mga rehistro ginganlan nga matag-an Kuhaa/Itandi ang mga rehistro, adunay duha niini alang sa matag channel: ang low-order 8 bits sa TIM2_CCRxL ug ang high-order sa TIM2_CCRxH. Tungod kay nakahimo kami og 8-bit nga PWM, igo na nga isulat ang labing gamay nga mga tipik:
Ang matinagdanon nga magbabasa makamatikod nga kami adunay gamay nga depekto nga PWM, dili makahimo sa 100% nga pagpuno (sa usa ka maximum nga kantidad nga 255, ang signal gibalit-ad alang sa usa ka timer cycle). Alang sa mga LED dili kini igsapayan, ug ang matinagdanon nga magbabasa makatag-an na kung unsaon kini ayuhon.
Ang PWM sa ikaduha nga timer nagtrabaho, magpadayon kita sa una.
Ang una nga timer adunay parehas nga mga bit sa parehas nga mga rehistro (kini nga ang mga bit nga nagpabilin nga "gireserba" sa ikaduha nga timer aktibo nga gigamit sa una alang sa tanan nga mga lahi sa mga advanced nga butang). Busa, igo na nga makit-an ang mga adres sa parehas nga mga rehistro sa datasheet ug kopyahon ang code. Aw, usba ang kantidad sa frequency divider, tungod kay... ang unang timer gusto nga makadawat dili usa ka gahum sa duha, apan usa ka eksaktong 16-bit nga kantidad sa duha ka mga rehistro Taas nga prescaler и ubos. Gibuhat namo ang tanan ug... dili mugana ang first timer. Unsay problema?
Masulbad ra ang problema pinaagi sa pagtan-aw sa tibuuk nga seksyon bahin sa mga rehistro sa kontrol sa timer 1, diin gipangita namon ang usa nga wala sa ikaduha nga timer. Adunay mahitabo 17.7.30 Rehistro sa break (TIM1_BKR), diin adunay kini nga gamay:
Ang ikatulo nga mini-proyekto mao ang pagkonektar sa walo ka RGB LEDs ngadto sa ikaduhang timer sa PWM mode ug ipakita kini sa lain-laing mga kolor. Gibase kini sa konsepto sa LED multiplexing, nga kung imong i-on ug i-off ang mga LED nga dali kaayo, ingon og kini kanunay nga nag-on (pagpadayon sa panan-aw, inertia sa visual perception). Kausa akong gibuhat usa ka butang nga sama niini sa Arduino.
Ang algorithm sa pagtrabaho ingon niini:
konektado sa anode sa unang RGB LED;
gidagkutan kini, pagpadala sa gikinahanglan nga mga signal ngadto sa mga cathodes;
naghulat hangtud sa katapusan sa PWM cycle;
konektado sa anode sa ikaduha nga RGB LED;
sugdi na...
Aw, ug uban pa. Siyempre, alang sa nindot nga operasyon gikinahanglan nga ang anode konektado ug ang LED "nagdilaab" sa samang higayon. Aw, o hapit. Sa bisan unsang kaso, kinahanglan namon nga magsulat usa ka code nga magpagawas sa mga kantidad sa tulo nga mga channel sa ikaduha nga timer, usba kini kung maabot ang UEV, ug sa samang higayon usbon ang aktibo nga RGB LED.
Tungod kay awtomatiko ang pagbalhin sa LED, kinahanglan namon nga maghimo usa ka "memorya sa video" diin ang interrupt handler makadawat mga datos. Kini usa ka yano nga array:
uint8_t colors[8][3];
Aron mabag-o ang kolor sa usa ka piho nga LED, igo na nga isulat ang gikinahanglan nga mga kantidad sa kini nga laray. Ug ang variable mahimong responsable sa gidaghanon sa aktibo nga LED
uint8_t cnt;
Demux
Alang sa husto nga multiplexing, kinahanglan namon, sa katingad-an, usa ka CD74HC238 demultiplexer. Demultiplexer - usa ka chip nga nagpatuman sa operator sa hardware <<. Pinaagi sa tulo ka mga input pin (bits 0, 1 ug 2) gipakaon namo kini og tulo ka bit nga numero X, ug isip tubag kini nagpalihok sa numero sa output (1<<X). Ang nahabilin nga mga input sa chip gigamit sa pagsukod sa tibuuk nga disenyo. Kinahanglan namon kini nga chip dili lamang aron makunhuran ang gidaghanon sa mga okupado nga mga pin sa microcontroller, apan alang usab sa kaluwasan - aron dili aksidente nga ma-on ang daghang mga LED kaysa mahimo ug dili masunog ang MK. Ang chip nagkantidad ug usa ka sentimos ug kinahanglang tipigan kanunay sa imong kabinet sa tambal sa balay.
Ang atong CD74HC238 maoy responsable sa pagsuplay sa boltahe sa anode sa gusto nga LED. Sa usa ka bug-os nga multiplex, kini maghatag boltahe sa kolum pinaagi sa usa ka P-MOSFET, apan sa kini nga demo posible nga direkta, tungod kay kini nagdrowing 20 mA, sumala sa hingpit nga maximum nga mga rating sa datasheet. gikan sa Ang datasheet ng CD74HC238 kinahanglan namon ang mga pinout ug kini nga cheat sheet:
H = taas nga lebel sa boltahe, L = ubos nga lebel sa boltahe, X - ayaw pagtagad
Gikonektar namon ang E2 ug E1 sa yuta, E3, A0, A1 ug A3 sa mga pin nga PD5, PC3, PC4 ug PC5 sa STM8. Tungod kay ang lamesa sa ibabaw adunay parehas nga ubos ug taas nga lebel, among gi-configure kini nga mga pin ingon mga push-pull pin.
PWM
Ang PWM sa ikaduhang timer gi-configure sa samang paagi sama sa miaging istorya, nga adunay duha ka kalainan:
Una, kinahanglan natong palihokon ang interrupt Pag-update sa Hitabo (UEV) nga magtawag sa usa ka function nga mag-toggle sa aktibo nga LED. Gihimo kini pinaagi sa pagbag-o sa gamay Pag-update sa Interrupt Enable sa usa ka rehistro nga adunay nagsulti nga ngalan
Ang ikaduha nga kalainan nalangkit sa panghitabo sa multiplexing, sama sa pagpangalibya – parasitic glow sa mga diode. Sa among kaso, kini mahimong makita tungod sa kamatuoran nga ang timer, nga nagpahinabo sa usa ka interrupt sa UEV, nagpadayon sa pag-tick, ug ang interrupt handler walay panahon sa pagbalhin sa LED sa dili pa magsugod ang timer sa pagsulat sa usa ka butang sa mga pin. Aron mabuntog kini, kinahanglan nimo nga balit-aron ang lohika (0 = maximum nga kahayag, 255 = wala’y suga) ug likayan ang grabe nga mga kantidad sa siklo sa katungdanan. Mga. siguroha nga human sa UEV ang mga LED hingpit nga mogawas alang sa usa ka PWM cycle.
Likayi ang pagbutang sa r, g ug b sa 255 ug hinumdomi nga balit-aron kini kung gamiton kini.
Mga interrupt
Ang diwa sa usa ka interrupt mao nga ubos sa pipila ka mga kahimtang ang chip mihunong sa pagpatuman sa nag-unang programa ug nagtawag sa pipila ka eksternal nga function. Ang mga interrupts mahitabo tungod sa eksternal o internal nga mga impluwensya, lakip ang timer.
Sa una namong gibuhat ang usa ka proyekto sa ST Visual Develop, dugang sa main.c nakadawat kami usa ka bintana nga adunay usa ka misteryosong file stm8_interrupt_vector.c, awtomatik nga gilakip sa proyekto. Niini nga file, usa ka function ang gi-assign sa matag interrupt NonHandledInterrupt. Kinahanglan natong ihigot ang atong function sa gusto nga interrupt.
Ang datasheet adunay usa ka talaan sa mga interrupt vectors, diin atong makita ang atong gikinahanglan:
13 TIM2 update/overflow
14 TIM2 pagdakop/pagtandi
Kinahanglan namon nga usbon ang LED sa UEV, busa kinahanglan namon nga mabalda ang #13.
Busa, una, sa file stm8_interrupt_vector.c usba ang default nga ngalan sa function nga responsable sa interrupt No. 13 (IRQ13) sa imong kaugalingon:
{0x82, TIM2_Overflow}, /* irq13 */
Ikaduha, kinahanglan namon nga maghimo usa ka file main.h uban sa mosunod nga sulod:
Ug sa katapusan, isulat kini nga function sa imong 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;
}
Ang nahabilin mao ang paghimo sa mga interrupts. Gihimo kini gamit ang assembler command rim - kinahanglan nimo pangitaon kini Manwal sa Programming:
//enable interrupts
_asm("rim");
Ang laing sugo sa assembler mao ang sim - gipalong ang mga interrupt. Kinahanglang i-off kini samtang gisulat ang mga bag-ong kantidad sa "memorya sa video", aron ang usa ka pagkabalda nga gipahinabo sa sayup nga higayon dili makadaut sa laray.
Kung labing menos adunay nakakaplag niini nga artikulo nga mapuslanon, nan wala ko kini gisulat sa kawang. Malipay ko nga makadawat mga komento ug komento, paningkamutan nako nga tubagon ang tanan.