Kuwerenga zikalata 2: SPI pa STM32; PWM, zowerengera nthawi ndi zosokoneza pa STM8
В gawo loyamba Ndidayesa kuuza akatswiri opanga zamagetsi omwe adakulira kuchokera ku mathalauza a Arduino momwe ndi chifukwa chake ayenera kuwerenga ma datasheet ndi zolemba zina za microcontrollers. Nkhaniyo inakhala yaikulu, chotero ndinalonjeza kusonyeza zitsanzo zothandiza m’nkhani ina. Chabwino, adadzitcha bowa wamkaka ...
Lero ndikuwonetsani momwe mungagwiritsire ntchito ma datati kuti muthe kuthana ndi zosavuta, koma zofunika pama projekiti ambiri, ntchito pa STM32 (Piritsi la Blue) ndi owongolera a STM8. Mapulojekiti onse owonetsera amaperekedwa kwa ma LED omwe ndimawakonda; tidzawaunikira mochuluka, zomwe tidzayenera kugwiritsa ntchito mitundu yonse ya zotumphukira zosangalatsa.
Chodzikanira: Sindine mainjiniya, sindimayesa kukhala ndi chidziwitso chakuya pazamagetsi, nkhaniyi idapangidwira osachita masewera ngati ine. Ndipotu, ndinadziona ndekha zaka ziwiri zapitazo monga omvera omwe akufuna. Ngati wina anandiuza ndiye kuti datasheets pa chip zachilendo sanali wochititsa mantha kuwerenga, Ine sindikanati amathera nthawi yochuluka kufunafuna ena zidutswa za kachidindo pa Intaneti ndi kutulukira ndodo ndi lumo ndi zomatira tepi.
Cholinga cha nkhaniyi ndi pa datasheet, osati mapulojekiti, kotero kuti code ikhoza kukhala yosakhala bwino komanso yochepetsetsa. Ma projekitiwo ndi osavuta, ngakhale kuti ndi oyenera kudziwana koyamba ndi chip chatsopano.
Ntchito yaying'ono yogwiritsa ntchito Piritsi la Blue (STM32F103C8T6) ndi dalaivala wa DM634 LED. Pogwiritsa ntchito zidziwitso, tiwona dalaivala, madoko a STM IO ndikukhazikitsa SPI.
DM634
Chip cha ku Taiwan chokhala ndi zotulutsa 16 16-bit PWM, zitha kulumikizidwa ndi unyolo. Chitsanzo chotsika cha 12-bit chimadziwika kuchokera ku polojekiti yapakhomo Lightpack. Panthawi ina, posankha pakati pa DM63x ndi TLC5940 yodziwika bwino, ndinasankha DM pazifukwa zingapo: 1) TLC pa Aliexpress ndithudi ndi yabodza, koma iyi siili; 2) DM ili ndi PWM yodziyimira yokha yokhala ndi jenereta yake pafupipafupi; 3) zitha kugulidwa motsika mtengo ku Moscow, m'malo modikirira phukusi la Ali. Ndipo, ndithudi, zinali zosangalatsa kuphunzira momwe mungadzilamulire chip nokha, osati kugwiritsa ntchito laibulale yokonzedwa kale. Ma tchipisi tsopano amaperekedwa makamaka mu phukusi la SSOP24; ndizosavuta kugulitsa ku adaputala.
Popeza wopanga ndi waku Taiwan, tsamba lazambiri chip chinalembedwa mu Chinese English, kutanthauza kuti adzakhala osangalatsa. Choyamba timayang'ana pa pinout (Pin Connection) kumvetsetsa mwendo womwe ungalumikizane ndi chiyani, ndi kufotokozera zikhomo (Pin Kufotokozera). 16 pini:
DC Sink Sources (Open Drain)
Chonde / Open-drain linanena bungwe - kumwa; gwero la madzi akulowa; zomwe zimatuluka zimagwirizanitsidwa ndi nthaka muzochitika zogwira ntchito - ma LED amagwirizanitsidwa ndi dalaivala ndi cathodes. Mwamagetsi, izi, ndithudi, si "kukhetsa kotseguka" (kutsegula kukhetsa), koma m'ma data, kutchulidwa kwa zikhomo mu drain mode kumapezeka nthawi zambiri.
Zotsutsa zakunja pakati pa REXT ndi GND kuti muyike mtengo wapano
Reference resistor imayikidwa pakati pa pini ya REXT ndi nthaka, yomwe imayang'anira kukana kwamkati kwa zotuluka, onani chithunzi patsamba 9 la database. Mu DM634, kukana uku kungathenso kuwongoleredwa ndi mapulogalamu, kuyika kuwala konse (kuwala padziko lonse lapansi); Sindifotokoza mwatsatanetsatane m'nkhaniyi, ndingoyika 2.2 - 3 kOhm resistor apa.
Kuti timvetsetse momwe mungayang'anire chip, tiyeni tiwone kufotokozera kwa mawonekedwe a chipangizochi:
Inde, ndi izi, Chinese English mu ulemerero wake wonse. Kutanthauzira izi ndizovuta, mutha kuzimvetsa ngati mungafune, koma pali njira ina - onani momwe kulumikizana kwa TLC5940 yofananira kumafotokozedwera mu datasheet:
... Zikhomo zitatu zokha ndizofunika kuti mulowetse deta mu chipangizocho. Mphepete mwa kukwera kwa chizindikiro cha SCLK imasuntha deta kuchokera ku pini ya SIN kupita ku kaundula wamkati. Deta yonse ikatsitsidwa, chizindikiro chachifupi cha XLAT chimalumikiza zomwe zimasamutsidwa motsatizana m'kaundula wamkati. Ma regista amkati ndi zipata zomwe zimayambitsidwa ndi mulingo wa chizindikiro cha XLAT. Deta yonse imafalitsidwa kwambiri poyambirira.
Latch - latch/latch/lock. Kukwera m'mphepete - kutsogolera m'mphepete mwa kugunda MSB poyamba - chofunika kwambiri (kumanzere) pang'onopang'ono. kutseka data - kufalitsa deta motsatizana (pang'ono ndi pang'ono).
pulogalamu yaying'ono yamaphunziroDalaivala wa LED kwenikweni ndi kaundula wosinthira. "Shift" (kosangalatsa) m'dzina - kusuntha kwa data mkati mwa chipangizocho: kachidutswa kakang'ono kalikonse kakankhidwira mkati kamakankhira unyolo wonse kutsogolo kwake. Popeza palibe amene akufuna kuwona kuthwanima kosokonekera kwa ma LED panthawi yosinthira, njirayi imachitika m'mabuku a buffer olekanitsidwa ndi zolembera zogwirira ntchito ndi damper (latch) ndi mtundu wa chipinda chodikirira pomwe tizidutswa tating'ono tating'onoting'ono timatsatizana. Zonse zikakonzeka, chotsekeracho chimatsegulidwa ndipo ma bits amapita kukagwira ntchito, m'malo mwa gulu lapitalo. Mawu latch muzolemba za microcircuits pafupifupi nthawi zonse zimatanthawuza damper yotere, ziribe kanthu kuti ikugwiritsidwa ntchito bwanji.
Kotero, kutumiza deta ku DM634 ikuchitika motere: ikani kulowetsa kwa DAI ku mtengo wofunikira kwambiri wa LED yakutali, kukoka DCK mmwamba ndi pansi; khazikitsani kulowetsa kwa DAI pamtengo wotsatira, kukoka DCK; ndi zina zotero mpaka zidutswa zonse zitatumizidwa (adalowetsedwa), pambuyo pake timakoka LAT. Izi zitha kuchitika pamanja (pang'onopang'ono), koma ndibwino kugwiritsa ntchito mawonekedwe a SPI opangidwira izi, chifukwa amawonetsedwa pa STM32 yathu m'makope awiri.
Piritsi ya Buluu STM32F103
Chiyambi: Owongolera a STM32 ndi ovuta kwambiri kuposa Atmega328 kuposa momwe angawonekere owopsa. Komanso, pazifukwa zopulumutsa mphamvu, pafupifupi zotumphukira zonse zimazimitsidwa poyambira, ndipo ma frequency a wotchi ndi 8 MHz kuchokera kugwero lamkati. Mwamwayi, opanga mapulogalamu a STM adalemba kachidindo kamene kamabweretsa chip ku 72 MHz "yowerengeka", ndipo olemba ma IDE onse omwe ndimawadziwa adayiphatikiza poyambira, kotero sitiyenera kutseka (koma mungathe ngati mukufunadi). Koma muyenera kuyatsa zotumphukira.
Zolemba: Piritsi la Buluu lili ndi chipangizo chodziwika bwino cha STM32F103C8T6, pali zolemba ziwiri zothandiza zake:
Tsamba lazambiri kwa microcontrollers STM32F103x8 ndi STM32F103xB;
Memory Map - mapu okumbukira a chipangizo china. Buku Lofotokozera lili ndi mapu a mzere wonse, ndipo limatchula zolembera zomwe athu alibe.
Gome la Tanthauzo la Pin - kutchula ntchito zazikulu ndi zina za pini; pa "mapiritsi a buluu" mungapeze zithunzi zosavuta kwambiri pa intaneti ndi mndandanda wa zikhomo ndi ntchito zawo. Chifukwa chake, nthawi yomweyo timayika google Blue Pill pinout ndikusunga chithunzichi pafupi:
NB: panali cholakwika pachithunzichi kuchokera pa intaneti, chomwe chidalembedwa mu ndemanga, zikomo chifukwa cha izi. Chithunzicho chasinthidwa, koma ichi ndi phunziro - ndi bwino kufufuza zambiri osati kuchokera ku datasheets.
Pa Atmega328, I/O ikugwiritsidwa ntchito mophweka kwambiri, ndichifukwa chake kuchuluka kwa zosankha za STM32 kumatha kukhala kosokoneza. Tsopano timangofunikira ziganizo, koma ngakhale izi zili ndi zosankha zinayi:
"Kokani-kankha" (kukankha-koka) ndizomwe zimatuluka kuchokera ku Arduino, pini ikhoza kutenga mtengo wa HIGH kapena LOW. Koma ndi "kukhetsa kotseguka" pali zovuta, ngakhale kuti zonse ndi zophweka apa:
Kusiyana konse pakati pa open drain (kutsegula kukhetsa) kuchokera ku “kukankha-koka” (kukankha-koka) ndikuti mu pini yoyamba silingavomereze chikhalidwe CHAKULU: polemba imodzi ku regista yotulutsa, imapita kumayendedwe apamwamba (mkulu impedance, Hi-Z). Polemba zero, pini imachita chimodzimodzi munjira zonse ziwiri, momveka komanso mwamagetsi.
M'mawonekedwe abwinobwino, piniyo imangowulutsa zomwe zili mu kaundula. Mu "m'malo" imayendetsedwa ndi zotumphukira zofananira (onani 9.1.4):
Ngati chipini cha doko chisinthidwa kukhala pini yamtundu wina, cholembera cha pini chimayimitsidwa ndipo piniyo imalumikizidwa ndi pini yotumphukira.
Ntchito ina ya pini iliyonse ikufotokozedwa mu Matanthauzo a Pin Tsambali lili pachithunzi chomwe chatsitsidwa. Pafunso la choti muchite ngati pini ili ndi ntchito zingapo zina, yankho limaperekedwa ndi mawu am'munsi mu datasheet:
Pomaliza, mapini mumachitidwe otulutsa amakhalanso ndi liwiro la wotchi. Ichi ndi chinthu china chopulumutsa mphamvu; kwa ife, timangoyiyika kwambiri ndikuyiwala.
Kotero: tikugwiritsa ntchito SPI, zomwe zikutanthauza kuti zikhomo ziwiri (zokhala ndi deta ndi chizindikiro cha wotchi) ziyenera kukhala "njira ina yokankhira-kukoka", ndipo ina (LAT) iyenera kukhala "kukankhira nthawi zonse". Koma tisanawagawire, tiyeni tithane ndi SPI.
SPI
Pulogalamu ina yaying'ono yamaphunziro
SPI kapena Serial Peripheral Interface (serial peripheral interface) ndi njira yosavuta komanso yothandiza kwambiri yolumikizira MK ndi ma MK ena komanso mayiko ena onse. Mfundo ya ntchito yake yafotokozedwa kale pamwambapa, ponena za dalaivala wa LED waku China (mu bukhu lofotokozera, onani gawo 25). SPI imatha kugwira ntchito mu master ("bwana") ndi kapolo ("kapolo"). SPI ili ndi njira zinayi zoyambira, zomwe sizingagwiritsidwe ntchito zonse:
MISO, Master Input / Output Kapolo: m'malo mwake, imalandira mwa mbuye, ndipo imatumiza mwa kapolo;
SCK, Seri Clock: imayika mafupipafupi a kufalitsa deta mwa mbuye kapena kulandira chizindikiro cha wotchi mu kapolo. Kwenikweni kumenya ma beats;
SS, Slave Select: mothandizidwa ndi njira iyi, kapoloyo amadziwa kuti chinachake chikufunidwa kwa iye. Pa STM32 imatchedwa NSS, pomwe N = negative, i.e. wolamulira amakhala kapolo ngati pali nthaka mu njira iyi. Zimaphatikizana bwino ndi Open Drain Output mode, koma iyi ndi nkhani ina.
Monga china chilichonse, SPI pa STM32 imakhala ndi magwiridwe antchito, zomwe zimapangitsa kuti zikhale zovuta kumvetsetsa. Mwachitsanzo, sizingagwire ntchito ndi SPI kokha, komanso ndi mawonekedwe a I2S, ndipo m'zolemba zomwe amafotokozera zimasakanizidwa, m'pofunika kudula mopitirira muyeso panthawi yake. Ntchito yathu ndi yophweka kwambiri: timangofunika kutumiza deta pogwiritsa ntchito MOSI ndi SCK yokha. Timapita ku gawo 25.3.4 (kulumikizana kwa theka-duplex, kulumikizana ndi theka-duplex), komwe timapeza 1 wotchi ndi 1 unidirectional data waya (chizindikiro cha wotchi 1 ndi mtsinje wa data 1 wapadziko lonse):
Zabwino, pini ya MISO ndi yaulere, tiyeni tilumikizane nayo chizindikiro cha LAT. Tiyeni tiwone Slave Select, yomwe pa STM32 imatha kuyendetsedwa mwadongosolo, yomwe ndi yabwino kwambiri. Timawerenga ndime ya dzina lomweli mu gawo 25.3.1 SPI General Description:
Kuwongolera mapulogalamu a NSS (SSM = 1) / Zambiri zosankhidwa ndi akapolo zili mu SSI bit ya SPI_CR1 registry. Pini yakunja ya NSS imakhalabe yaulere pazosowa zina zamapulogalamu.
Yakwana nthawi yolembera ma registry. Ndinaganiza zogwiritsa ntchito SPI2, yang'anani maadiresi ake pamasamba - mu gawo 3.3 Memory Map:
Tsegulani gawo 25.3.3 ndi mutu wodzifotokozera nokha "Kukonza SPI mu Master Mode":
1. Khazikitsani kuchuluka kwa wotchi ndi ma bits BR[2:0] mu kaundula wa SPI_CR1.
Ma regista amasonkhanitsidwa mu gawo lolozera la dzina lomwelo. Kusintha adilesi (Adilesi yotsitsa) kwa CR1 - 0x00, mwachisawawa ma bits onse amachotsedwa (Bwezeretsani mtengo 0x0000):
Ma bits a BR amayika chogawira wotchi yowongolera, motero amazindikira ma frequency omwe SPI idzagwira ntchito. Mafupipafupi athu a STM32 adzakhala 72 MHz, dalaivala wa LED, malinga ndi deta yake, amagwira ntchito pafupipafupi mpaka 25 MHz, kotero tiyenera kugawaniza anayi (BR[2:0] = 001).
2. Khazikitsani ma CPOL ndi CPHA bits kuti afotokoze ubale pakati pa kusamutsa deta ndi nthawi ya wotchi (onani chithunzi patsamba 240)
Popeza tikuwerenga ndandanda pano osayang'ana ma schematics, tiyeni tiwone mwatsatanetsatane mafotokozedwe a CPOL ndi CPHA bits patsamba 704 (SPI General Description):
Gawo la wotchi ndi polarity
Pogwiritsa ntchito magawo a CPOL ndi CPHA a kaundula wa SPI_CR1, mutha kusankha mwadongosolo maubale anayi otengera nthawi. CPOL (wotchi polarity) imayang'anira mawonekedwe a wotchi pomwe palibe deta yomwe ikutumizidwa. Izi pang'ono amalamulira mbuye ndi akapolo modes. Ngati CPOL yakhazikitsidwanso, pini ya SCK imakhala yotsika popuma. Ngati kachidutswa ka CPOL kakhazikitsidwa, pini ya SCK imakhala yokwera panthawi yopuma.
Pamene CPHA (gawo la wotchi) imayikidwa, strobe yapamwamba kwambiri ndi m'mphepete mwachiwiri wa chizindikiro cha SCK (kugwa ngati CPOL ikuwonekera, ikukwera ngati CPOL yakhazikitsidwa). Deta imatengedwa ndi kusintha kwachiwiri kwa chizindikiro cha wotchi. Ngati CPHA pang'onopang'ono ikuwonekera bwino, strobe yapamwamba kwambiri ndiyo kukwera kwa chizindikiro cha SCK (kugwa ngati CPOL yakhazikitsidwa, kukwera m'mphepete ngati CPOL yachotsedwa). Deta imatengedwa pakusintha koyamba kwa chizindikiro cha wotchi.
Titatenga chidziwitso ichi, timafika pomaliza kuti magawo onse awiri ayenera kukhala ziro, chifukwa Tikufuna kuti chizindikiro cha SCK chikhalebe chotsika pamene sichikugwiritsidwa ntchito, ndipo deta iyenera kufalitsidwa pamphepete mwa kukwera kwa phokoso (onani mkuyu. Rising Edge Zithunzi za DM634
Mwa njira, apa tidayamba kukumana ndi gawo la mawu mu ST datasheets: mwa iwo mawu akuti "bwererani pang'ono kukhala zero" alembedwa. kukhazikitsanso pang'ono, osati kuchotsa pang'ono, monga, mwachitsanzo, Atmega.
3. Khazikitsani kachidutswa ka DFF kuti muwone ngati chipika cha data ndi mtundu wa 8-bit kapena 16-bit
Ndinatenga 16-bit DM634 kuti ndisavutike ndi kutumiza deta ya 12-bit PWM, monga DM633. Ndizomveka kukhazikitsa DFF kukhala imodzi:
4. Konzani LSBFIRST bit mu SPI_CR1 register kuti mudziwe mtundu wa block
LSBFIRST, monga momwe dzina lake likusonyezera, imakonza kufalikira ndi kofunikira kwambiri poyamba. Koma DM634 ikufuna kulandira deta kuyambira pamtengo wofunikira kwambiri. Chifukwa chake, timasiya kuyambiranso.
5. Mu mawonekedwe a hardware, ngati kulowetsa kuchokera ku pin ya NSS kukufunika, gwiritsani ntchito chizindikiro chapamwamba pa pini ya NSS panthawi yonse yotsatizana ya byte. Mu mapulogalamu a NSS, ikani ma SSM ndi SSI bits mu SPI_CR1 registry. Ngati pini ya NSS iyenera kugwiritsidwa ntchito ngati chotuluka, pang'ono chabe ya SSOE iyenera kukhazikitsidwa.
Ikani SSM ndi SSI kuti muiwale za mawonekedwe a hardware a NSS:
#define SSI 0x0100
#define SSM 0x0200
_SPI2_ (_SPI_CR1) |= SSM | SSI; //enable software control of SS, SS high
6. Zigawo za MSTR ndi SPE ziyenera kukhazikitsidwa (zimakhalabe ngati chizindikiro cha NSS chili pamwamba)
Kwenikweni, ndi ma bits awa timasankha SPI yathu ngati mbuye ndikuyatsa:
SPI idakonzedwa, tiyeni tilembe nthawi yomweyo ntchito zomwe zimatumiza ma byte kwa dalaivala. Pitilizani kuwerenga 25.3.3 "Kukonza SPI mumayendedwe apamwamba":
Kutumiza kwa data
Kutumiza kumayamba pomwe baiti yalembedwa ku Tx buffer.
Data byte imayikidwa mu registry ya shift pa kufanana mode (kuchokera m'basi mkati) pa kufala kwa pang'ono pang'ono, kenako imafalitsidwa kwa zotsatizana MOSI pin mode, yoyamba kapena yotsiriza pang'ono kutsogolo kutengera makonzedwe a LSBFIRST bit mu CPI_CR1 register. Mbendera ya TXE imayikidwa pambuyo potumiza deta kuchokera ku Tx buffer kupita ku registry yosinthira, komanso kupangitsa kusokoneza ngati TXEIE pang'ono mu CPI_CR1 registry yakhazikitsidwa.
Ndinaunikira mawu ochepa pomasulira kuti ndiwonetsere chidwi cha gawo limodzi la kukhazikitsidwa kwa SPI mu olamulira a STM. Pa Atmega mbendera ya TXE (Tx Palibe, Tx ilibe kanthu ndipo ikukonzekera kulandira deta) imayikidwa pokhapokha baiti yonse itatumizidwa kunja. Ndipo apa mbendera iyi imayikidwa pambuyo poti byte yayikidwa mu kaundula wamkati. Popeza imakankhidwira pamenepo ndi ma bits onse nthawi imodzi (mofanana), ndiyeno deta imafalitsidwa motsatizana, TXE imayikidwa kuti byte isanatumizidwe kwathunthu. Izi ndizofunikira chifukwa pankhani ya dalaivala wathu wa LED, tiyenera kukoka pini ya LAT pambuyo potumiza всех data, i.e. Mbendera ya TXE yokha siidzakwanira kwa ife.
Bits 15: 0 DR[15: 0] Kaundula wa Data
Zomwe zalandilidwa kapena zotumizidwa.
Kaundula wa deta amagawidwa m'mabafa awiri - imodzi yolembera (kutumiza buffer) ndi imodzi yowerengera (kulandira buffer). Kulembera ku registry ya data kumalembera ku Tx buffer, ndipo kuwerenga kuchokera ku registry deta kudzabwezera mtengo womwe uli mu Rx buffer.
Chabwino, ndi kaundula wamakhalidwe, komwe mbendera za TXE ndi BSY zimapezeka:
Chabwino, popeza tiyenera kufalitsa 16 kuwirikiza kawiri mabayiti, malinga ndi kuchuluka kwa zotulutsa zoyendetsa za LED, monga chonchi:
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();
}
Koma sitikudziwa momwe tingakokere pini ya LAT, kotero tibwerera ku I / O.
Kupereka zikhomo
Mu STM32F1, zolembera zomwe zimayang'anira malo a pini ndizosazolowereka. Zikuwonekeratu kuti pali ochulukirapo kuposa Atmega, koma amasiyananso ndi tchipisi ta STM. Gawo 9.1 Kufotokozera Zazikulu za GPIO:
Iliyonse mwa madoko a I/O a cholinga (GPIO) ili ndi ma regista awiri a 32-bit configuration (GPIOx_CRL ndi GPIOx_CRH), zolembera ziwiri za 32-bit (GPIOx_IDR ndi GPIOx_ODR), 32-bit set/reset registry (GPIOx_BSRR), 16-bit reset registry (GPIOx_BRR) ndi 32- kaundula wotsekereza pang'ono (GPIOx_LCKR).
Zolembera ziwiri zoyambirira ndizosazolowereka, komanso ndizosasangalatsa, chifukwa zikhomo 16 zimamwazikana mumtundu wa "ma bits anayi pa m'bale". Iwo. mapini ziro mpaka zisanu ndi ziwiri ali mu CRL, ndipo ena onse ali mu CRH. Panthawi imodzimodziyo, zolembera zotsalazo zimakhala bwino ndi zikhomo zonse za doko - nthawi zambiri zotsalira theka "zosungidwa".
Kuti zikhale zosavuta, tiyeni tiyambire kumapeto kwa mndandanda.
Sitikufuna kaundula wotsekereza.
Zolemba zokhazikitsidwa ndi kukonzanso ndizoseketsa kwambiri chifukwa zimabwerezana pang'ono: mutha kulemba chilichonse mu BSRR, pomwe ma bits 16 apamwamba adzakhazikitsanso pini mpaka zero, ndipo otsika adzakhazikitsidwa ku 1, kapena muthanso gwiritsani ntchito BRR, ma bits 16 otsika omwe amangokhazikitsanso pini . Ndimakonda njira yachiwiri. Zolembera izi ndizofunikira chifukwa zimapereka mwayi wopeza ma atomiki pamapini:
Atomic Set kapena Bwezeraninso
Palibe chifukwa choletsa kusokoneza mukamakonza GPIOx_ODR pamlingo wocheperako: nthiti imodzi kapena zingapo zitha kusinthidwa ndi ntchito imodzi yolemba atomiki APB2. Izi zimatheka polemba "1" ku registry yokhazikitsidwa/kukonzanso (GPIOx_BSRR kapena, pakukonzanso kokha, GPIOx_BRR) ya pang'ono yomwe ikufunika kusinthidwa. Ma bits ena adzakhala osasinthika.
Zolembera za data zili ndi mayina odzifotokozera okha - IDR = Lowetsani Kaundula wa Direction, kaundula wolowetsa; ODR = linanena bungwe Kaundula wa Direction, kaundula wa zotuluka. Sitidzawafuna mu pulojekiti yamakono.
Ndipo potsiriza, zolembera zowongolera. Popeza tili ndi chidwi ndi zikhomo zachiwiri za SPI, zomwe ndi PB13, PB14 ndi PB15, nthawi yomweyo timayang'ana CRH:
Ndipo tikuwona kuti tidzafunika kulemba china chake pang'ono kuyambira 20 mpaka 31.
Talingalira kale zomwe tikufuna pazikhomo, kotero apa ndichita popanda chithunzi, ndingonena kuti MODE imatchula mayendedwe (zolowera ngati zonse ziwiri ziyikidwa ku 0) ndi liwiro la pini (tikufunika 50MHz, i.e. onse pini ku "1"), ndipo CNF imayika mawonekedwe: nthawi zonse "kukankha-kukoka" - 00, "njira ina" - 10. Mwachikhazikitso, monga momwe tikuonera pamwambapa, zikhomo zonse zimakhala ndi gawo lachitatu kuchokera pansi (CNF0), zimawayika kukhala mode cholowera choyandama.
Popeza ndikukonzekera kuchita china ndi chip ichi, kuphweka ndafotokozera zonse zomwe zingatheke za MODE ndi CNF pazolembetsa zapansi ndi zapamwamba.
(LAT_low ndi inertia, zakhala choncho nthawi zonse, zisiyeni zikhale)
Tsopano zonse nzabwino, koma sizikugwira ntchito. Chifukwa iyi ndi STM32, amapulumutsa magetsi, zomwe zikutanthauza kuti muyenera kuyatsa zotumphukira zofunika.
Yatsani wotchi
Wotchiyo, yomwe imadziwikanso kuti Clock, ndiyomwe imayang'anira mawotchi. Ndipo titha kuzindikira kale chidule cha RCC. Timaziyang'ana muzolemba: izi ndi Reset ndi Clock Control.
Monga tanenera pamwambapa, mwamwayi, gawo lovuta kwambiri la mutu wa wotchiyo lidachitidwa kwa ife ndi anthu ochokera ku STM, zomwe timawathokoza kwambiri (kachiwirinso ndipereka ulalo ku Webusayiti ya Di Halt, kuti ziwonekere momwe zilili zosokoneza). Timangofunikira ma register omwe ali ndi udindo wowongolera mawotchi ozungulira (Peripheral Clock Enable Registers). Choyamba, tiyeni tipeze adilesi yoyambira ya RCC, ili koyambirira kwa "Memory Map":
Ngati muli ndi mwayi komanso chikhumbo choyesa, gwirizanitsani DM634 motere: DAI ku PB15, DCK ku PB13, LAT ku PB14. Timayendetsa dalaivala kuchokera ku 5 volts, musaiwale kulumikiza malo.
Chithunzi cha STM8 PWM
PWM pa STM8
Pamene ndikungokonzekera nkhaniyi, ndinaganiza, mwachitsanzo, kuyesa kudziŵa bwino ntchito ya chip yosadziwika bwino pogwiritsa ntchito deta yokha, kuti ndisathe kukhala ndi nsapato popanda nsapato. STM8 inali yabwino pa ntchitoyi: choyamba, ndinali ndi matabwa angapo achi China omwe ali ndi STM8S103, ndipo kachiwiri, sizodziwika kwambiri, choncho chiyeso chowerenga ndi kupeza yankho pa intaneti chikudalira kusowa kwa mayankho omwewo.
HSI (High Speed Internal) Clock
Chizindikiro cha wotchi ya HSI chimachokera ku oscillator yamkati ya 16 MHz RC yokhala ndi chogawa chotheka (1 mpaka 8). Imayikidwa mu kaundula wogawa mawotchi (CLK_CKDVR).
Zindikirani: poyambira, oscillator ya HSI RC yokhala ndi gawo la 8 imasankhidwa kukhala gwero lotsogola la chizindikiro cha wotchi.
Timapeza adilesi yolembetsa mu datasheet, malongosoledwe mu refman ndikuwona kuti zolembera ziyenera kuchotsedwa:
Popeza tiyendetsa PWM ndikulumikiza ma LED, tiyeni tiwone pinout:
Chip ndi chaching'ono, ntchito zambiri zimayimitsidwa pazikhomo zomwezo. Zomwe zili m'mabulaketi masikweya ndi "njira zina", zimasinthidwa ndi "option byte" (njira mabayiti) - china chake ngati ma fuse a Atmega. Mutha kusintha zikhalidwe zawo mwadongosolo, koma sikofunikira, chifukwa Ntchito yatsopanoyi imatsegulidwa pokhapokha mutayambiranso. Ndizosavuta kugwiritsa ntchito ST Visual Programmer (yotsitsidwa ndi Visual Develop), yomwe ingasinthe ma byte awa. Pinout ikuwonetsa kuti CH1 ndi CH2 zikhomo za nthawi yoyamba zimabisika m'mabulaketi apakati; ndikofunikira kukhazikitsa ma bits a AFR1 ndi AFR0 mu STVP, ndipo yachiwiri idzasamutsanso kutulutsa kwa CH1 kwa nthawi yachiwiri kuchokera ku PD4 kupita ku PC5.
Choncho, zikhomo 6 zidzalamulira ma LED: PC6, PC7 ndi PC3 kwa nthawi yoyamba, PC5, PD3 ndi PA3 yachiwiri.
Kukhazikitsa zikhomo za I/O pa STM8 ndikosavuta komanso komveka kuposa pa STM32:
zodziwika bwino kuchokera ku registry ya data ya Atmega DDR (Data Direction Register): 1 = zotuluka;
kaundula woyamba wowongolera CR1, ikatuluka, imayika njira yokankha (1) kapena kutsegulira (0); popeza ndimalumikiza ma LED ku chip ndi cathodes, ndimasiya zero pano;
Mtengo Wowonjezera - mtengo wodzaza. Fananizani mtengo sichingasinthe pomwe chowerengera chikugwedeza, apo ayi kuzungulira kwa PWM kutha. Chifukwa chake, zikhalidwe zatsopano zopatsirana zimayikidwa mu buffer ndikutulutsidwa pomwe chowerengera chikafika kumapeto kwa kuwerengera kwake ndikuyambiranso;
Zogwirizana m'mphepete и Zogwirizana pakati - kugwirizanitsa m'malire ndi pakati, mofanana ndi Atmel's PWM mwachangu и Gawo-lolondola PWM.
OCiREF, Output Compare Reference Signal - chizindikiro chotulutsa mawu, zomwe zimawoneka pa pini yofananira mu PWM mode.
Monga zikuwonekera kale kuchokera ku pinout, zowerengera ziwiri zili ndi kuthekera kwa PWM - yoyamba ndi yachiwiri. Zonsezi ndi 16-bit, yoyamba ili ndi zowonjezera zambiri (makamaka, imatha kuwerengera mmwamba ndi pansi). Tifunika tonse kuti tigwire ntchito mofanana, choncho ndinaganiza zoyamba ndi yachiwiri yosauka kwambiri, kuti ndisagwiritse ntchito mwangozi chinthu chomwe palibe. Vuto lina ndilakuti kufotokozera kwa magwiridwe antchito a PWM a nthawi zonse mu bukhu lofotokozera kuli mumutu wonena za nthawi yoyamba (17.5.7 PWM Mode), kotero muyenera kudumpha mmbuyo ndi mtsogolo muzolembazo nthawi zonse.
PWM pa STM8 ili ndi mwayi wofunikira kuposa PWM pa Atmega:
Zogwirizana ndi malire PWM
Kusintha kwa akaunti kuchokera pansi mpaka pamwamba
Kuwerengera pansi kumagwira ntchito ngati DIR bit mu kaundula wa TIM_CR1 wachotsedwa
Chitsanzo:
Chitsanzo chimagwiritsa ntchito njira yoyamba ya PWM. Chizindikiro cha PWM cha OCiREF chimakhala chokwera mpaka TIM1_CNT <TIM1_CCRi. Apo ayi zimatenga mlingo wochepa. Ngati mtengo wofananitsa mu kaundula wa TIM1_CCRi ndi waukulu kuposa mtengo wa autoload (TIM1_ARR register), chizindikiro cha OCiREF chimakhala pa 1. Ngati mtengo wofananitsa ndi 0, OCiREF imakhala paziro....
STM8 nthawi sinthani chochitika amafufuza kaye yerekezerani mtengo, ndipo pokhapo pamapanga chizindikiro cholozera. Nthawi yoyamba ya Atmega imayamba ndikufanizira, zomwe zimapangitsa compare value == 0 zomwe zimatuluka ndi singano, zomwe ziyenera kuchitidwa mwanjira ina (mwachitsanzo, posintha malingaliro).
Ndiye zomwe tikufuna kuchita: 8-bit PWM (AR == 255), kuwerengera kuchokera pansi mpaka pamwamba, kugwirizanitsa m'malire. Popeza mababu amalumikizidwa ndi chip ndi ma cathode, PWM iyenera kutulutsa 0 (LED) mpaka yerekezerani mtengo ndi 1 pambuyo.
Tawerenga kale za ena Njira ya PWM, kotero timapeza kaundula wofunikira wa chowerengera chachiwiri pofufuza mu bukhu lolozera mawuwa (18.6.8 - TIMx_CCMR1):
Ntchito yachitatu yaying'ono ndikulumikiza ma LED asanu ndi atatu a RGB ku nthawi yachiwiri mu PWM mode ndikuwapangitsa kuti aziwonetsa mitundu yosiyanasiyana. Zimatengera lingaliro la LED multiplexing, kutanthauza kuti ngati muyatsa ndi kuzimitsa ma LED kwambiri, mofulumira kwambiri, zidzawoneka kwa ife kuti akuyatsa nthawi zonse (kulimbikira kwa masomphenya, inertia ya masomphenya). Nthawi ina ndinatero chinthu chonga ichi pa Arduino.
Algorithm yogwira ntchito ikuwoneka motere:
adalumikiza anode ya RGB LED yoyamba;
kuyatsa, kutumiza zizindikiro zofunika kwa cathodes;
Popeza kusintha kwa LED kumakhala kodziwikiratu, tifunika kupanga "memory video" pomwe wosokoneza adzalandira deta. Ili ndi gulu losavuta:
uint8_t colors[8][3];
Kuti musinthe mtundu wa LED inayake, zidzakhala zokwanira kulemba zofunikira pagulu ili. Ndipo kusinthika kudzakhala ndi udindo pa chiwerengero cha LED yogwira
uint8_t cnt;
Demux
Kuti muchulukitse koyenera, tikufuna, modabwitsa, CD74HC238 demultiplexer. Demultiplexer - chipangizo chomwe chimagwiritsa ntchito wogwiritsa ntchito mu hardware <<. Kupyolera mu mapini atatu olowetsa (bits 0, 1 ndi 2) timayidyetsa nambala ya-bit X, ndipo poyankha imatsegula nambala yotuluka (1<<X). Zolowera zotsalira za chip zimagwiritsidwa ntchito kukulitsa mapangidwe onse. Tifunika chip ichi osati kuchepetsa chiwerengero cha zikhomo za microcontroller, komanso chitetezo - kuti musatsegule ma LED ambiri kuposa momwe mungathere komanso osawotcha MK. Chipchi chimawononga khobiri ndipo nthawi zonse chiyenera kusungidwa mu kabati yanu yamankhwala kunyumba.
CD74HC238 yathu idzakhala ndi udindo wopereka magetsi ku anode ya LED yomwe mukufuna. Mu multiplex yodzaza, imatha kupereka magetsi pamndandanda kudzera pa P-MOSFET, koma pachiwonetsero ichi ndizotheka mwachindunji, chifukwa. imakoka 20 mA, malinga ndi mtheradi pazipita mavoti mu datasheet. Kuchokera Chithunzi cha CD74HC238 tikufuna mapinouts ndi pepala lachinyengo ili:
H = mulingo wapamwamba wamagetsi, L = otsika voteji, X - osasamala
Timalumikiza E2 ndi E1 pansi, E3, A0, A1 ndi A3 ku mapini PD5, PC3, PC4 ndi PC5 ya STM8. Popeza tebulo pamwambapa lili ndi magawo otsika komanso apamwamba, timakonza zikhomozi ngati zikhomo zokoka.
Zithunzi za PWM
PWM pa nthawi yachiwiri imakonzedwa mofanana ndi nkhani yapitayi, ndi zosiyana ziwiri:
Choyamba, tiyenera kuyatsa kusokoneza Kusintha Chochitika (UEV) yomwe idzayitanitse ntchito yomwe imasintha LED yogwira. Izi zimachitika ndikusintha pang'ono Sinthani Kusokoneza Yambitsani mu kaundula wokhala ndi dzina