ProHoster > Blag > nuacht idirlín > Léigh bileoga 2: SPI ar STM32; PWM, lasc ama agus idirbhristeacha ar STM8
Léigh bileoga 2: SPI ar STM32; PWM, lasc ama agus idirbhristeacha ar STM8
В an chéad chuid Rinne mé iarracht insint d'innealtóirí leictreonaic caitheamh aimsire a d'fhás aníos ó Arduino pants conas agus cén fáth ar cheart dóibh bileoga sonraí agus doiciméid eile le haghaidh micrea-rialaitheoirí a léamh. Bhí an téacs mór, agus mar sin gheall mé samplaí praiticiúla a thaispeáint in alt ar leith. Bhuel, thug sé beacán bainne air féin ...
Sa lá atá inniu taispeánfaidh mé duit conas bileoga a úsáid chun go leor simplí a réiteach, ach is gá le haghaidh go leor tionscadal, tascanna ar rialtóirí STM32 (Blue Pill) agus STM8. Tá gach tionscadal taispeána tiomnaithe do na soilse is fearr liom, cuirfimid iad i gcainníochtaí móra, agus beidh orainn gach cineál forimeallach suimiúil a úsáid le haghaidh.
Bhí an téacs ollmhór arís, mar sin ar mhaithe le caoithiúlacht tá an t-ábhar á dhéanamh agam:
Séanadh: Ní innealtóir mé, ní ligim orm go bhfuil eolas domhain agam ar leictreonaic, tá an t-alt dírithe ar amaitéaraigh cosúil liomsa. Go deimhin, mheas mé mé féin dhá bhliain ó shin mar an spriocghrúpa. Dá mbeadh duine éigin tar éis a rá liom ag an am sin nach raibh na sonraí ar shlis neamhaithnidiúla scanrúil le léamh, ní bheadh mórán ama caite agam ag lorg roinnt píosaí cód ar an Idirlíon agus ag cumadh crutches le siosúr agus téip ghreamaitheach.
Tá fócas an ailt seo ar bhileoga sonraí, ní ar thionscadail, agus mar sin seans nach mbíonn an cód an-néata agus go minic teoranta. Tá na tionscadail féin an-simplí, cé go bhfuil siad oiriúnach do chéad aithne leis an sliseanna nua.
Tá súil agam go gcabhróidh mo alt le duine ag céim den chineál céanna den tumoideachas sa chaitheamh aimsire.
STM 32
16 stiúir le DM634 agus SPI
Tionscadal beag ag baint úsáide as Blue Pill (STM32F103C8T6) agus DM634 tiománaí LED. Ag baint úsáide as datasheets, déanfaimid amach an tiománaí, calafoirt STM IO agus cumróimid SPI.
DM634
Is féidir sliseanna Taiwanese le 16 aschur PWM 16-giotán, a nascadh i slabhraí. Tá an tsamhail íseal-deireadh 12-giotán ar eolas ó thionscadal intíre Pacáiste solais. Ag am amháin, ag roghnú idir an DM63x agus an TLC5940-aitheanta go maith, roghnaigh mé DM ar chúiseanna éagsúla: 1) Tá TLC ar Aliexpress cinnte falsa, ach níl an ceann seo; 2) Tá PWM uathrialach ag DM lena gineadóir minicíochta féin; 3) d'fhéadfaí é a cheannach go saor i Moscó, seachas fanacht le dáileacht ó Ali. Agus, ar ndóigh, bhí sé suimiúil foghlaim conas an sliseanna a rialú duit féin, seachas leabharlann réidh a úsáid. Cuirtear sliseanna i láthair go príomha anois sa phacáiste SSOP24; is furasta iad a shádráil le cuibheoir.
Ós rud é gur Taiwanese an monaróir, Bileog sonraí tá an sliseanna scríofa i mBéarla na Síne, rud a chiallaíonn go mbeidh sé spraoi. Ar dtús breathnaíonn muid ar an pinout (Ceangal Bioráin( ) a thuiscint cén cos lena gceanglófar cad chuige, agus cur síos ar na bioráin (Cur síos ar an mBioráin). 16 bioráin:
Foinsí Doirteal DC (Drain Oscailte)
Sink / Aschur draein oscailte – taosc; foinse an tsrutha insreafa; tá an t-aschur ceangailte le talamh sa stát gníomhach - tá na soilse ceangailte leis an tiománaí ag catodes. Go leictreach, ní “draein oscailte” é seo ar ndóigh (draein oscailte), ach i mbileogáin is minic a aimsítear an t-ainmniú seo do phionnaí i mód draein.
Friotóirí seachtracha idir REXT agus GND chun an luach reatha aschuir a shocrú
Tá friotóir tagartha suiteáilte idir an bioráin REXT agus an talamh, a rialaíonn friotaíocht inmheánach na n-aschur, féach an graf ar leathanach 9 den bhileog sonraí. Sa DM634, is féidir an fhriotaíocht seo a rialú freisin le bogearraí, ag socrú an gile iomlán (gile domhanda); Ní dhéanfaidh mé sonraí san alt seo, ní dhéanfaidh mé ach friotóir 2.2 - 3 kOhm a chur anseo.
Chun tuiscint a fháil ar conas an sliseanna a rialú, déanaimis féachaint ar an gcur síos ar chomhéadan an fheiste:
Sea, seo é, Béarla na Síne ina ghlóir ar fad. Is fadhb é seo a aistriú, is féidir leat é a thuiscint más mian leat, ach tá bealach eile ann - féach ar an gcaoi a gcuirtear síos ar an gceangal leis an TLC5940 atá cosúil le feidhmiúil sa bhileog sonraí:
... Níl ach trí bhioráin ag teastáil chun sonraí a chur isteach sa ghléas. Aistríonn imeall ardú an chomhartha SCLK na sonraí ón bioráin SIN chuig an gclár inmheánach. Tar éis na sonraí go léir a luchtú, cuireann comhartha gearr ard XLAT na sonraí a aistrítear go seicheamhach isteach sna cláir inmheánacha. Is éard atá i gcláir inmheánacha ná geataí a spreagann leibhéal comhartha XLAT. Tarchuirtear na sonraí go léir ar dtús an giotán is suntasaí.
Latch – latch/latch/glas. Imeall ag ardú – ceannródaíocht na bíge MSB ar dtús – an giota is suntasaí (ar chlé) ar aghaidh. chun sonraí a chlog – sonraí a tharchur go seicheamhach (beagán ar giotán).
Слово latch Is minic a fhaightear sna doiciméid le haghaidh sceallóga agus aistrítear é ar bhealaí éagsúla, mar sin ar mhaithe le tuiscint ceadóidh mé mé féin
clár oideachais beagIs clár shift é an tiománaí LED go bunúsach. "Shift" (aistriú) in ainm - gluaiseacht sonraí beagán ciallmhar taobh istigh den fheiste: brúnn gach giotán nua taobh istigh an slabhra iomlán chun tosaigh os a chomhair. Ós rud é nach bhfuil aon duine ag iarraidh féachaint ar chaochadh na soilse le linn an aistrithe, tarlaíonn an próiseas i gcláir mhaoláin atá scartha ó na cláir oibre ag damper (latch) is cineál seomra feithimh é ina socraítear na píosaí sa seicheamh atá ag teastáil. Nuair a bhíonn gach rud réidh, osclaíonn an cróluas agus téann na giotán ag obair, ag cur in ionad an bhaisc roimhe seo. Focal latch i gcáipéisíocht na micrichiorcaid beagnach i gcónaí tugann sé le tuiscint go bhfuil taise den sórt sin ann, is cuma cén teaglaim a úsáidtear é.
Mar sin, déantar aistriú sonraí chuig an DM634 mar seo: socraigh ionchur DAI de réir luach an ghiotán is suntasaí den bhfad LED, tarraing DCK suas agus síos; socraigh ionchur DAI go luach an chéad ghiotán eile, tarraing DCK; agus mar sin de go dtí go mbeidh gach giotán tarchurtha (clogáilte isteach), tar éis dúinn a tharraingt LAT. Is féidir é seo a dhéanamh de láimh (giotán-bang), ach tá sé níos fearr comhéadan SPI a úsáid atá oiriúnaithe go speisialta dó seo, ós rud é go gcuirtear i láthair é ar ár STM32 i dhá chóip.
Pill Gorm STM32F103
Tosaigh: Tá rialaitheoirí STM32 i bhfad níos casta ná Atmega328 ná mar a d'fhéadfadh a bheith scanrúil. Thairis sin, ar chúiseanna coigilte fuinnimh, déantar beagnach gach forimeallach a mhúchadh ag an tús, agus is é an minicíocht clog 8 MHz ón bhfoinse inmheánach. Go fortunately, scríobh ríomhchláraitheoirí STM cód a thugann an sliseanna suas go dtí an 72 MHz “ríofa”, agus chuir údair na IDEanna go léir a bhfuil aithne agam orthu é sa nós imeachta tosaigh, mar sin ní gá dúinn clogáil (ach is féidir leat más mian leat i ndáiríre). Ach beidh ort na forimeallaigh a chasadh air.
Doiciméadú: Tá Blue Pill feistithe leis an sliseanna tóir STM32F103C8T6, tá dhá dhoiciméad úsáideacha ann:
Bileog sonraí le haghaidh microcontrollers STM32F103x8 agus STM32F103xB;
Pinouts – pinouts sliseanna – ar eagla go gcinnfimid na cláir a dhéanamh sinn féin;
Léarscáil Chuimhne – léarscáil chuimhne le haghaidh sliseanna ar leith. Tá léarscáil don líne iomlán sa Lámhleabhar Tagartha, agus luann sé cláir nach bhfuil againne.
Tábla sainmhínithe bioráin – liosta de phríomhfheidhmeanna agus feidhmeanna malartacha na bioráin; don “pill gorm” is féidir leat pictiúir níos áisiúla a fháil ar an Idirlíon le liosta bioráin agus a bhfeidhmeanna. Mar sin, déanaimid Google Pinout Blue Pill láithreach agus coinnímid an pictiúr seo ar láimh:
NB: bhí earráid sa phictiúr ón Idirlíon, a tugadh faoi deara sna tuairimí, go raibh maith agat as sin. Tá an pictiúr curtha in ionad, ach tá sé seo le ceacht - tá sé níos fearr chun faisnéis a sheiceáil ní ó bhileoga sonraí.
Bainimid an bhileog sonraí, osclaíonn muid an Lámhleabhar Tagartha, agus as seo amach ní úsáidimid ach é.
Nós Imeachta: déileálaimid le hionchur/aschur caighdeánach, déanaimid SPI a chumrú, cuirimid na forimeallaigh riachtanacha ar siúl.
Ionchur Aschur
Ar an Atmega328, cuirtear I/O i bhfeidhm thar a bheith simplí, agus is é sin an fáth gur féidir mearbhall a chur ar an iliomad roghanna STM32. Anois níl ach conclúidí de dhíth orainn, ach tá ceithre rogha acu seo fiú:
draein oscailte, brú-tarraingt, brú-tharraingt eile, draein oscailte eile
"tarraingt-bhrú" (brú-tarraingt) an gnáth-aschur ón Arduino, is féidir leis an bioráin an luach ARD nó ÍSEAL a ghlacadh. Ach le “draein oscailte” tá deacrachtaí, cé go bhfuil gach rud simplí anseo:
Cumraíocht aschuir / nuair a shanntar an port don aschur: / cumasaithe maolán aschuir: / – mód draein oscailte: cumasaíonn “0” sa chlár aschuir N-MOS, fágann “1” sa chlár aschuir an port i mód Hi-Z ( Níl P-MOS gníomhachtaithe ) / – modh brú-tharraingt: gníomhaíonn “0” sa chlár aschuir N-MOS, gníomhaíonn “1” sa chlár aschuir P-MOS.
Gach difríocht idir draein oscailte (draein oscailte) ó “push-pull” (brú-tarraingt) is é sin nach féidir leis an gcéad bioráin glacadh leis an staid ARD: agus ceann á scríobh chuig an gclár aschuir, téann sé isteach i mód ardfhriotaíochta (impedance ard, Hi-Z). Agus nialas á scríobh, iompraíonn an bioráin mar an gcéanna sa dá mhodh, go loighciúil agus go leictreach.
Sa ghnáth-mhodh aschuir, ní chraolann an bioráin ach ábhar an chláir aschuir. Sa "rogha" tá sé á rialú ag na forimeallaigh comhfhreagracha (féach 9.1.4):
Má tá giotán calafoirt cumraithe mar bhioráin fheidhm mhalartach, tá an clár bioráin díchumasaithe agus tá an bioráin ceangailte leis an bioráin forimeallach.
Déantar cur síos ar fheidhmiúlacht mhalartach gach bioráin i Sainmhínithe Bioráin Tá an bhileog sonraí ar an íomhá íoslódáilte. Ar an gceist cad atá le déanamh má tá roinnt feidhmeanna malartacha ag bioráin, tugtar an freagra le fonóta sa bhileog sonraí:
Má úsáideann forimeallaigh iolracha an bioráin chéanna, chun coinbhleacht idir feidhmeanna eile a sheachaint, níor cheart ach forimeallach amháin a úsáid ag an am, scoránaigh ag baint úsáide as an giotán cumasaithe clog forimeallach (sa chlár RCC cuí).
Ar deireadh, tá luas clog ag bioráin i mód aschuir freisin. Is gné eile coigilte fuinnimh é seo; inár gcás féin, déanaimid é a shocrú chomh hard agus is féidir agus déanaimid dearmad air.
Mar sin: táimid ag baint úsáide as SPI, rud a chiallaíonn gur cheart go mbeadh dhá bhioráin (le sonraí agus le comhartha clog) ina “fheidhm bhrú-tarraingt eile”, agus gur cheart go mbeadh ceann eile (LAT) ina “bhrú-tharraingt rialta”. Ach sula sannfar iad, a ligean ar déileáil le SPI.
SPI
Clár beag oideachais eile
Is comhéadan simplí agus an-éifeachtach é SPI nó Comhéadan Forimeallach Srathach (comhéadan sraitheach forimeallach) chun MK a nascadh le MKanna eile agus an domhan lasmuigh i gcoitinne. Tá cur síos déanta cheana féin ar phrionsabal a oibríochta thuas, áit a bhfuil sé mar gheall ar an tiománaí LED Síneach (sa lámhleabhar tagartha, féach alt 25). Is féidir le SPI oibriú i mód máistir (“máistir”) agus sclábhaí (“sclábhaí”). Tá ceithre bhealach bhunúsacha ag SPI, agus ní féidir gach ceann díobh a úsáid:
MOSI, Máistir-Aschur / Ionchur Sclábhaí: tarchuireann an bioráin seo sonraí i mód máistir, agus faigheann sé sonraí i mód sclábhaithe;
MISO, Máistir-Ionchur / Aschur daor: a mhalairt ar fad, faigheann sé sa mháistir, agus tarchuireann sé sa sclábhaí;
SCK, Clog Srathach: socraíonn sé minicíocht tarchurtha sonraí sa mháistir nó faigheann sé comhartha clog sa sclábhaí. Buillí a bhualadh go bunúsach;
SS, Slave Select: le cabhair ón gcainéal seo, tá a fhios ag an sclábhaí go bhfuil rud éigin ag teastáil uaidh. Ar STM32 tugtar NSS air, áit a bhfuil N = diúltach, i.e. bíonn an rialtóir ina sclábhaí má tá talamh sa chainéal seo. Comhcheanglaíonn sé go maith leis an modh Aschuir Drain Oscailte, ach sin scéal eile.
Cosúil le gach rud eile, tá SPI ar STM32 saibhir i bhfeidhmiúlacht, rud a fhágann go bhfuil sé deacair a thuiscint. Mar shampla, féadann sé oibriú ní hamháin le SPI, ach freisin le comhéadan I2S, agus sa doiciméadú tá a gcuid tuairiscí measctha, is gá an barrachas a ghearradh amach go tráthúil. Tá an tasc atá againn thar a bheith simplí: ní mór dúinn ach sonraí a sheoladh ag baint úsáide as MOSI agus SCK amháin. Téim go dtí alt 25.3.4 (cumarsáid leathdhéphléacsacha, cumarsáid leathdhéphléacsacha), áit a bhfaighimid 1 clog agus 1 sreang sonraí aontreoch (comhartha 1 chlog agus 1 sruth sonraí aontreoch):
Sa mhodh seo, úsáideann an feidhmchlár SPI i mód tarchurtha amháin nó modh glactha amháin. / Tá an modh tarchurtha amháin cosúil leis an modh déphléacsacha: tarchuirtear sonraí ar an bioráin tarchuir (MOSI i mód máistir nó MISO i mód sclábhaithe), agus is féidir an bioráin ghlactha (MISO nó MOSI faoi seach) a úsáid mar bhioráin I/O rialta . Sa chás seo, ní gá don iarratas ach neamhaird a dhéanamh ar an maolán Rx (má léitear é, ní bheidh aon sonraí aistrithe ann).
Go hiontach, tá an bioráin MISO saor in aisce, déanaimis an comhartha LAT a nascadh leis. Breathnaímid ar Slave Select, ar féidir é a rialú go cláir ar an STM32, rud atá thar a bheith áisiúil. Léimid an t-alt den ainm céanna i gcuid 25.3.1 Cur Síos Ginearálta SPI:
Rialú bogearraí NSS (SSM = 1) / Tá faisnéis maidir le roghnú daor sa ghiotán SSI den chlár SPI_CR1. Tá bioráin seachtrach an NSS fós saor in aisce do riachtanais feidhmchláir eile.
Tá sé in am scríobh chuig na cláir. Chinn mé SPI2 a úsáid, lorg a sheoladh bonn sa bhileog sonraí - i gcuid 3.3 Léarscáil Chuimhne:
Oscail alt 25.3.3 leis an teideal féinmhínithe “SPI a Chumrú i Máistir-Mhód”:
1. Socraigh minicíocht an chlog srathach le giotán BR[2:0] sa chlár SPI_CR1.
Bailítear na cláir sa chuid den lámhleabhar tagartha den ainm céanna. Aistriú seolta (Fritháireamh seoltaí) le haghaidh CR1 – 0x00, de réir réamhshocraithe glantar gach giotán (Athshocraigh luach 0x0000):
Socraíonn na giotán BR an roinnteoir clog rialaitheora, rud a chinnfidh an minicíocht ag a n-oibreoidh an SPI. Is é 32 MHz ár minicíocht STM72, feidhmíonn an tiománaí LED, de réir a bhileog sonraí, le minicíocht suas le 25 MHz, mar sin ní mór dúinn a roinnt ar cheithre (BR[2:0] = 001).
2. Socraigh na giotán CPOL agus CPHA chun an gaol idir aistriú sonraí agus uainiú cloig srathach a shainiú (féach an léaráid ar leathanach 240)
Ós rud é go bhfuil bileog sonraí á léamh againn anseo agus nach bhfuilimid ag féachaint ar schematics, déanaimis breathnú níos géire ar an gcur síos téacs ar na giotán CPOL agus CPHA ar leathanach 704 (Cur Síos Ginearálta SPI):
Céim clog agus polaraíocht
Trí úsáid a bhaint as na píosaí CPOL agus CPHA den chlár SPI_CR1, is féidir leat ceithre ghaol uainiúcháin a roghnú go ríomhchláraithe. Rialaíonn an giotán CPOL (polaracht clog) staid an chomhartha clog nuair nach bhfuil aon sonraí á dtarchur. Rialaíonn an giotán seo na modhanna máistir agus sclábhaithe. Má athshocraítear CPOL, tá an bioráin SCK íseal i mód scíthe. Má tá an giotán CPOL socraithe, tá an bioráin SCK ard le linn mód sosa.
Nuair a leagtar an giotán CPHA (céim clog), is é an strobe gaiste giotán ard an dara imeall den chomhartha SCK (ag titim má tá CPOL soiléir, ag ardú má tá CPOL socraithe). Tá na sonraí a gabhadh ag an dara athrú ar an comhartha clog. Má tá an giotán CPHA soiléir, is é an strobe gaiste giotán ard ná imeall ardú an chomhartha SCK (imeall titim má leagtar CPOL, imeall ardú má dhéantar CPOL a ghlanadh). Gabhtar sonraí ag an gcéad athrú ar an comhartha clog.
Tar éis dúinn an t-eolas seo a ionsú, tháinig muid ar an tátal go gcaithfidh an dá ghiotán fanacht mar nialais, mar gheall ar Ba mhaith linn go bhfanfaidh an comhartha SCK íseal nuair nach bhfuil sé in úsáid, agus go dtarchuirfear sonraí ar imeall ardú na bíge (féach Fíor. Imeall Éirí Amach sa bhileog DM634).
Dála an scéil, anseo ar dtús tháinig muid ar ghné den stór focal i mbileoga ST: iontu scríobhtar an frása “athshocraigh an giotán go nialas” a athshocrú beagánAgus ní a ghlanadh beagán, cosúil le, mar shampla, Atmega.
3. Socraigh an giotán DFF chun a chinneadh an bhfuil an bloc sonraí formáid 8-giotán nó 16-giotán
Ghlac mé DM16 634-giotán go sonrach ionas nach gcuirfí isteach ar shonraí PWM 12-giotán a tharchur, cosúil leis an DM633. Déanann sé ciall DFF a shocrú go ceann amháin:
4. Cumraigh an giotán LSBFIRST sa chlár SPI_CR1 chun an fhormáid bloc a chinneadh
Déanann LSBFIRST, mar a thugann an t-ainm le fios, tarchur a chumrú leis an ngiotán is lú suntas ar dtús. Ach tá DM634 ag iarraidh sonraí a fháil ag tosú ón giotán is suntasaí. Dá bhrí sin, fágfaimid é a athshocrú.
5. I mód crua-earraí, má tá ionchur ón bioráin NSS ag teastáil, cuir comhartha ard i bhfeidhm ar an bioráin NSS le linn an t-ord iomlán aistrithe beart. I mód bogearraí NSS, socraigh na giotán SSM agus SSI sa chlár SPI_CR1. Má tá an bioráin NSS le húsáid mar aschur, ní gá ach an giotán SSOE a shocrú.
Suiteáil SSM agus SSI chun dearmad a dhéanamh ar mhodh crua-earraí an NSS:
#define SSI 0x0100
#define SSM 0x0200
_SPI2_ (_SPI_CR1) |= SSM | SSI; //enable software control of SS, SS high
6. Ní mór na giotán MSTR agus SPE a shocrú (ní fanann siad socraithe ach amháin má tá an comhartha NSS ard)
I ndáiríre, leis na píosaí seo ainmnímid ár SPI mar mháistir agus cuirimid ar siúl é:
Tá SPI cumraithe, scríobhaimis láithreach feidhmeanna a sheolann bearta chuig an tiománaí. Lean ar aghaidh ag léamh 25.3.3 “SPI a chumrú i mód máistir”:
Ordú aistrithe sonraí
Tosaíonn tarchur nuair a scríobhtar beart chuig an maolán Tx.
Lódáiltear an beart sonraí isteach sa chlár sealaithe ag comhthreomhar modh (ón mbus inmheánach) le linn an chéad ghiotán a tharchur, tar éis é a tharchur chuig seicheamhach Mód bioráin MOSI, an chéad ghiotán nó an giotán deireanach ar aghaidh ag brath ar shocrú an ghiotán LSBFIRST sa chlár CPI_CR1. Socraítear an bhratach TXE tar éis tarchur sonraí ó mhaolán Tx go clár aistrithe, agus gineann sé idirbhriseadh freisin má tá an giotán TXEIE sa chlár CPI_CR1 socraithe.
D’aibhsigh mé cúpla focal san aistriúchán chun aird a tharraingt ar ghné amháin de chur i bhfeidhm an SPI i rialtóirí STM. Ar Atmega an bhratach TXE (Tx Folamh, Tx folamh agus réidh le sonraí a fháil) socraithe ach amháin tar éis an beart iomlán a sheoladh amach. Agus anseo socraítear an bhratach seo tar éis an beart a chur isteach sa chlár aistrithe inmheánach. Ós rud é go bhfuil sé á bhrú ann leis na giotán go léir ag an am céanna (go comhthreomhar), agus ansin aistrítear na sonraí go seicheamhach, socraítear TXE sula seoltar an beart go hiomlán. Tá sé seo tábhachtach mar gheall ar i gcás ár dtiománaí LED, ní mór dúinn an bioráin LAT a tharraingt tar éis a sheoladh Gach sonraí, i.e. Ní leor an bhratach TXE amháin dúinn.
Ciallaíonn sé seo go bhfuil bratach eile ag teastáil uainn. Breathnaímid ar 25.3.7 - “Bratacha Stádais”:
<…>
Brat GNÓTHA
Socraítear agus glantar an bhratach BSY le crua-earraí (níl aon éifeacht ag scríobh chuige). Léiríonn bratach BSY staid na ciseal cumarsáide SPI.
Athshocraíonn sé:
nuair a bheidh an t-aistriú críochnaithe (ach amháin i mód máistir má tá an t-aistriú leanúnach)
nuair atá SPI díchumasaithe
nuair a tharlaíonn earráid mháistir-mhóid (MODF=1)
Mura bhfuil an t-aistriú leanúnach, glantar an bhratach BSY idir gach aistriú sonraí
Ceart go leor, beidh sé seo áisiúil. Faighimis amach cá bhfuil an maolán Tx suite. Chun é seo a dhéanamh, léigh “Clár Sonraí SPI”:
Giotán 15:0 DR[15:0] Clár Sonraí
Sonraí a fuarthas nó sonraí atá le tarchur.
Tá an clár sonraí roinnte ina dhá mhaolán - ceann amháin le haghaidh scríbhneoireachta (maolán tarchurtha) agus ceann le haghaidh léitheoireachta (faigh maolán). Scríobhann scríobh chuig an gclár sonraí chuig an maolán Tx, agus cuirfidh léamh ón gclár sonraí an luach atá sa mhaolán Rx ar ais.
Bhuel, agus an clár stádais, áit a bhfuil na bratacha TXE agus BSY le fáil:
Bhuel, ós rud é go gcaithfimid 16 huaire dhá byte a tharchur, de réir líon na n-aschur tiománaithe LED, rud mar seo:
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();
}
Ach níl a fhios againn conas an bioráin LAT a tharraingt go fóill, mar sin rachaimid ar ais chuig I/O.
Bioráin a shannadh
Sa STM32F1, tá na cláir atá freagrach as staid na bioráin go leor neamhghnách. Is léir go bhfuil níos mó acu ná Atmega, ach tá siad difriúil ó sceallóga STM eile freisin. Cuid 9.1 Cur Síos Ginearálta ar GPIO:
Gach ceann de na calafoirt I/O ginearálta (GPIO) tá dhá chlár cumraíochta 32-giotán (GPIOx_CRL agus GPIOx_CRH), dhá chlár sonraí 32-giotán (GPIOx_IDR agus GPIOx_ODR), clár tacair/athshocraigh 32-giotán (GPIOx_BSRR), clár athshocraithe 16-giotán (GPIOx_BRR) agus clár 32-giotán clár blocála giotán (GPIOx_LCKR).
Tá an chéad dá chlár neamhghnách, agus deacair go leor freisin, toisc go bhfuil na 16 bioráin chalafoirt scaipthe trasna orthu i bhformáid “ceithre ghiotán in aghaidh an deartháir”. Iad siúd. tá bioráin náid go seacht gcinn i CRL, agus tá an chuid eile i CRH. Ag an am céanna, d'éirigh go maith leis na giotaí de bhioráin uile an chalafoirt sna cláir atá fágtha - is minic go mbíonn an leath fágtha “ar coimeád”.
Ar mhaithe le simplíocht, déanaimis tosú ó dheireadh an liosta.
Níl clár blocála de dhíth orainn.
Tá na cláir socraithe agus athshocraithe go leor greannmhar sa mhéid is go ndéanann siad dúbailt ar a chéile go páirteach: ní féidir leat gach rud a scríobh ach amháin i BSRR, áit a ndéanfaidh na 16 giotán níos airde an bioráin a athshocrú go nialas, agus socrófar na cinn níos ísle go 1, nó is féidir leat freisin bain úsáid as BRR, agus ní athshocróidh na 16 ghiotán níos ísle ach an bioráin . Is maith liom an dara rogha. Tá na cláir seo tábhachtach mar go dtugann siad rochtain adamhach ar phionnaí:
Socraigh nó Athshocraigh Adamhach
Ní gá idirbhriseadh a dhíchumasú agus GPIOx_ODR á ríomh ag an leibhéal giotán: is féidir giotán amháin nó níos mó a athrú le hoibríocht scríofa adamhach amháin APB2. Baintear é seo amach trí "1" a scríobh chuig an gclár tacair/athshocraigh (GPIOx_BSRR nó, le haghaidh athshocrú amháin, GPIOx_BRR) den ghiotán is gá a athrú. Fanfaidh giotán eile gan athrú.
Tá ainmneacha féinmhínitheacha go leor ar na cláir sonraí - IDR = Ionchur Clár Treo, clár ionchuir; ODR = Aschur Clár Treo, clár aschuir. Ní bheidh siad de dhíth orainn sa tionscadal reatha.
Agus ar deireadh, cláir rialaithe. Ós rud é go bhfuil suim againn sa dara bioráin SPI, eadhon PB13, PB14 agus PB15, féachaimid láithreach ar CRH:
Agus feicimid go mbeidh orainn rud éigin a scríobh i giotáin ó 20 go 31.
Táimid tar éis figured amach cheana féin thuas cad ba mhaith linn ó bioráin, mar sin anseo beidh mé a dhéanamh gan screenshot, beidh mé a rá go sonraíonn MODE an treo (ionchur má tá an dá giotán socraithe go 0) agus luas bioráin (ní mór dúinn 50MHz, i.e. an dá phionna go “1”), agus socraíonn CNF an modh: “brú-tarraingt” rialta – 00, “eile” – 10. De réir réamhshocraithe, mar a fheicimid thuas, tá an tríú giotán ag gach bioráin ón mbun (CNF0), leagann sé go mód iad ionchur ar snámh.
Ós rud é go bhfuil sé beartaithe agam rud éigin eile a dhéanamh leis an sliseanna seo, ar mhaithe le simplíocht shainmhínigh mé gach luach MODE agus CNF a d'fhéadfadh a bheith ann do na cláir rialaithe íochtair agus uachtaracha araon.
(LAT_low díreach de bharr táimhe, bhí sé mar sin i gcónaí, lig dó fanacht)
Anois tá gach rud iontach, ach ní oibríonn sé. Toisc gurb é seo STM32, sábhálann siad leictreachas, rud a chiallaíonn go gcaithfidh tú na forimeallaigh riachtanacha a chlogáil.
Cuir clogáil ar siúl
Tá an faire, ar a dtugtar Clog freisin, freagrach as clogáil. Agus d'fhéadfaimis an giorrúchán RCC a thabhairt faoi deara cheana féin. Lorgaimid é sa doiciméadú: is é seo Athshocraigh agus Rialú Clog.
Mar a dúradh thuas, ar an dea-uair, rinne daoine ó STM an chuid ba dheacra den ábhar clogála dúinn, agus gabhaimid buíochas mór leo as ucht (arís eile tabharfaidh mé nasc chuig An láithreán gréasáin Di Halt, chun é a dhéanamh soiléir cé chomh mearbhall is atá sé). Ní theastaíonn uainn ach cláir atá freagrach as clogáil forimeallach a chumasú (Cláir Cumasaithe Clog Forimeallach). Ar an gcéad dul síos, faighimid seoladh bonn an RCC, tá sé ag tús an “Léarscáil Chuimhne”:
Agus ansin cliceáil ar an nasc ina ndéanann tú iarracht rud éigin a aimsiú sa phláta, nó, i bhfad níos fearr, téigh tríd na tuairiscí ar na cláir chumasaithe ó na hailt faoi cláir a chumasú. Cá bhfaighidh muid RCC_APB1ENR agus RCC_APB2ENR:
Agus, dá réir sin, tá giotán iontu a chuimsíonn clogáil SPI2, IOPB (I/O Port B) agus feidhmeanna malartacha (AFIO).
Má tá an deis agus an fonn ort tástáil a dhéanamh, ceangail an DM634 mar seo: DAI go PB15, DCK go PB13, LAT go PB14. Cumhachtaímid an tiománaí ó 5 volta, ná déan dearmad na forais a nascadh.
STM8 PWM
PWM ar STM8
Nuair a bhí an t-alt seo díreach á phleanáil agam, chinn mé, mar shampla, iarracht a dhéanamh máistreacht a fháil ar fheidhmiúlacht éigin de shlis neamhaithnidiúla ag baint úsáide as bileog sonraí amháin, ionas nach mbeadh gréasaí gan buataisí agam. Bhí STM8 oiriúnach don ról seo: ar an gcéad dul síos, bhí cúpla bord Síneach agam le STM8S103, agus ar an dara dul síos, níl an-tóir air, agus mar sin luíonn an temptation chun réiteach a léamh agus a fháil ar an Idirlíon ar an easpa réitigh seo.
De réir réamhshocraithe, feidhmíonn STM8 ag minicíocht 2 MHz, ní mór é seo a cheartú láithreach.
Clog HSI (Ardluais Inmheánach).
Díorthaítear comhartha clog HSI ó oscillator inmheánach 16 MHz RC le roinnteoir in-ríomhchláraithe (1 go 8). Tá sé socraithe sa chlár deighilteoirí cloig (CLK_CKDIVR).
Nóta: ag an tús, roghnaítear oscillator HSI RC le roinnteoir de 8 mar phríomhfhoinse an chomhartha clog.
Faighimid seoladh an chláir sa bhileog sonraí, an cur síos i refman agus feicimid gur gá an clár a ghlanadh:
Ós rud é go bhfuil muid chun PWM a rith agus na soilse stiúir a nascadh, déanaimis féachaint ar an bpionós:
Tá an sliseanna beag, tá go leor feidhmeanna ar fionraí ar na bioráin chéanna. Is é an rud atá idir lúibíní cearnacha ná “feidhmiúlacht mhalartach”, aistrítear é le “beart rogha” (bearta rogha) – rud éigin cosúil le fiúsanna Atmega. Is féidir leat a luachanna a athrú go cláir, ach ní gá, mar gheall ar Ní chuirtear an fheidhmiúlacht nua i ngníomh ach amháin tar éis atosaigh. Tá sé níos éasca ST Visual Ríomhchláraitheoir a úsáid (íoslódáil le Visual Develop), ar féidir leis na bearta seo a athrú. Léiríonn an pinout go bhfuil na bioráin CH1 agus CH2 den chéad lasc ama i bhfolach idir lúibíní cearnacha; is gá na giotán AFR1 agus AFR0 a shocrú i STVP, agus aistreoidh an dara ceann aschur CH1 an dara lasc ama ó PD4 go PC5 freisin.
Mar sin, rialóidh 6 bhioráin na soilse: PC6, PC7 agus PC3 don chéad lasc ama, PC5, PD3 agus PA3 don dara ceann.
Tá sé níos simplí agus níos loighciúla na bioráin I/O a shocrú iad féin ar STM8 ná ar STM32:
an chéad chlár rialaithe CR1, nuair a bhíonn an t-aschur, socraítear an modh brú-tharraingt (1) nó draein oscailte (0); ós rud é go nascann mé na soilse chuig an sliseanna le catóidí, fág mé nialais anseo;
an dara clár rialaithe CR2, nuair a aschur, socraíonn an luas clog: 1 = 10 MHz
Minicíocht PWM – a mhinice is a sníonn an t-amadóir;
Athlódáil uathoibríoch, AR – luach in-uathluchtaithe a n-áireofar an t-amadóir go dtí sin (tréimhse chuisle);
Imeacht Nuashonraithe, UEV – teagmhas a tharlaíonn nuair a dhéantar an t-amadóir a chomhaireamh go AR;
Timthriall Dleachta PWM – Timthriall dleachta PWM, ar a dtugtar “fachtóir dleachta” go minic;
Gabháil/Comparáid Luach – luach gabhála/comparáide, lena bhfuil an t-amadóir san áireamh déanfaidh sé rud éigin (i gcás PWM, athraíonn sé an comhartha aschuir);
Luach Réamhluchtaithe – luach réamhluchtaithe. Déan comparáid idir luach Ní féidir athrú agus an t-amadóir ag tic, nó brisfidh an timthriall PWM. Dá bhrí sin, cuirtear luachanna tarchurtha nua i maolán agus tarraingítear amach iad nuair a shroicheann an t-amadóir deireadh a chomhaireamh síos agus go ndéantar é a athshocrú;
Imeall-ailínithe и Modhanna lár-ailínithe – ailíniú feadh na teorann agus ag an lár, mar an gcéanna le Atmel's PWM Tapa и PWM céim-cheart.
OCiREF, Comhartha Tagartha Comparáid Aschur – comhartha aschuir tagartha, i ndáiríre, cad atá le feiceáil ar an bioráin comhfhreagrach i mód PWM.
Mar is léir cheana ón pinout, tá cumais PWM ag dhá lasc ama - an chéad cheann agus an dara ceann. Tá an dá 16-giotán, tá an chéad a lán de na gnéithe breise (go háirithe, is féidir é a chomhaireamh araon suas agus síos). Ní mór dúinn an dá oibriú go cothrom, mar sin shocraigh mé tús a chur leis an dara ceann is boichte ar ndóigh, ionas nach n-úsáidfí rud éigin nach bhfuil ann de thaisme. Fadhb éigin ná go bhfuil an cur síos ar fheidhmiúlacht PWM na n-amadóirí go léir sa lámhleabhar tagartha sa chaibidil faoin gcéad lasc ama (17.5.7 Mód PWM), mar sin caithfidh tú léim siar agus amach ar fud an doiciméid an t-am ar fad.
Tá buntáiste tábhachtach ag PWM ar STM8 thar PWM ar Atmega:
Teorainn PWM Ailínithe
Cumraíocht an chuntais ó bhun go barr
Tá comhaireamh ón mbun aníos gníomhach má tá an giotán DIR sa chlár TIM_CR1 glanta
Sampla
Úsáideann an sampla an chéad mhodh PWM. Coinnítear an comhartha tagartha PWM OCiREF ard chomh fada le TIM1_CNT < TIM1_CCRi. Seachas sin a thógann sé leibhéal íseal. Má tá an luach comparáide sa chlár TIM1_CCRi níos mó ná an luach uathlódála (clár TIM1_ARR), coinnítear an comhartha OCiREF ag 1. Más é 0 an luach comparáide, coinnítear OCiREF ag nialas....
uaineadóir STM8 le linn imeacht nuashonraithe seiceálacha ar dtús luach a chur i gcomparáid, agus gan ach ansin táirgeann sé comhartha tagartha. An chéad scriúnna lasc ama Atmega suas agus ansin i gcomparáid, a eascraíonn i compare value == 0 Is snáthaid é an t-aschur, nach mór déileáil leis ar bhealach éigin (mar shampla, tríd an loighic a inbhéartú go ríomhchláraithe).
Mar sin cad ba mhaith linn a dhéanamh: PWM 8-giotán (AR == 255), comhaireamh ó bhun go barr, ailíniú feadh na teorann. Ós rud é go bhfuil na bolgáin solais ceangailte leis an sliseanna le catóidí, ba cheart don PWM aschur 0 (LED ar aghaidh) go dtí go luach a chur i gcomparáid agus 1 tar éis.
Táimid tar éis a léamh cheana féin faoi roinnt Modh PWM, mar sin aimsímid clár riachtanach an dara lasc ama trí chuardach a dhéanamh sa lámhleabhar tagartha don abairt seo (18.6.8 - TIMx_CCMR1):
110: An chéad mhód PWM – agus an chéad chainéal á chomhaireamh ó bhun go barr, agus TIMx_CNT < TIMx_CCR1. Seachas sin, tá an chéad cainéal neamhghníomhach. [A thuilleadh sa doiciméad tá cóip-ghreamú earráideach ón amadóir 1] 111: An dara modh PWM – agus an chéad chainéal á chomhaireamh ó bhun go barr, tá an chéad chainéal neamhghníomhach agus TIMx_CNT < TIMx_CCR1. Seachas sin, tá an chéad cainéal gníomhach.
Ós rud é go bhfuil na LEDanna ceangailte leis an MK trí chatóidí, tá an dara modh oiriúnach dúinn (an chéad cheann freisin, ach níl a fhios againn go fóill).
Giotán 3 OC1PE: Cumasaigh réamhualach bioráin 1
0: Tá an clár réamhlódála ar TIMx_CCR1 díchumasaithe. Is féidir leat scríobh chuig TIMx_CCR1 am ar bith. Oibríonn an luach nua láithreach.
1: Tá an clár réamhluchtaithe ar TIMx_CCR1 cumasaithe. Oibríochtaí a léamh/scríobh rochtain a fháil ar an gclár réamhualach. Lódáiltear an luach réamhluchtaithe TIMx_CCR1 isteach sa scáthchlár le linn gach imeachta nuashonraithe.
*Nóta: Le go n-oibreoidh mód PWM i gceart, ní mór na cláir réamhlódála a chumasú. Níl sé seo riachtanach i mód comhartha aonair (tá an giotán OPM socraithe sa chlár TImx_CR1).
Ceart go leor, cuirimis gach rud a theastaíonn uainn ar siúl do na trí chainéal den dara lasc ama:
Ní féidir leis an dara lasc ama a chomhaireamh ach ó bhun go barr, ailíniú feadh na teorann, ní gá aon rud a athrú. Socróimid an roinnteoir minicíochta, mar shampla, go 256. Don dara lasc ama, socraítear an roinnteoir sa chlár TIM2_PSCR agus tá dhá chumhacht aige:
Níl fágtha ach na conclúidí a chasadh air agus an dara lasc ama féin. Réitítear an chéad fhadhb le cláir Gabháil/Comparáid Cumasaigh: tá dhá, trí chainéal scaipthe trasna orthu go neamhshiméadrach. Anseo is féidir linn a fhoghlaim freisin go bhfuil sé indéanta polaraíocht an chomhartha a athrú, i.e. i bprionsabal, bhíothas in ann Mód PWM 1 a úsáid. Scríobhaimid:
Scríobhfaimid analóg simplí de AnalogWrite(), a aistreoidh na luachanna iarbhír chuig an lasc ama le haghaidh comparáide. Ainmnítear na cláir go hintuartha Cláir a ghabháil/a chur i gcomparáid, tá dhá cheann acu le haghaidh gach cainéal: na giotáin íseal-ordú 8 i TIM2_CCRxL agus na cinn ard-ordú i TIM2_CCRxH. Ós rud é go bhfuil PWM 8-giotán cruthaithe againn, is leor gan ach na giotáin is lú tábhacht a scríobh:
Tabharfaidh an léitheoir aireach faoi deara go bhfuil PWM beagán lochtach againn, nach féidir linn líonadh 100% a tháirgeadh (ar uasluach 255, cuirtear an comhartha inbhéartaithe ar feadh timthriall lasc ama amháin). Maidir le soilse faoi stiúir ní bhaineann sé seo le hábhar, agus is féidir leis an léitheoir aireach a thomhas cheana féin conas é a dheisiú.
Oibríonn PWM ar an dara lasc ama, a ligean ar bogadh ar aghaidh go dtí an chéad.
Tá na giotáin chéanna go díreach ag an gcéad uaineadóir sna cláir chéanna (is é sin go bhfuil na giotáin a d'fhan "forchoimeádta" sa dara lasc ama á n-úsáid go gníomhach sa chéad uair le haghaidh gach cineál rudaí casta). Mar sin, is leor seoltaí na gclár céanna a aimsiú sa bhileog sonraí agus an cód a chóipeáil. Bhuel, athraigh luach an roinnteora minicíochta, mar gheall ar ... Teastaíonn ón gcéad lasc ama nach bhfaighidh sé cumhacht de dhá cheann, ach luach beacht 16-giotán in dhá chlár Prescaler Ard и Íseal. Déanaimid gach rud agus... ní oibríonn an chéad lasc ama. Céard atá ort?
Ní féidir an fhadhb a réiteach ach trí bhreathnú a dhéanamh ar an gcuid iomlán faoi chláir rialaithe an lasc ama 1, áit a lorgaímid an ceann nach bhfuil ag an dara lasc ama. Beidh 17.7.30 Clár briseadh (TIM1_BKR), cá bhfuil an giota seo:
Is é an tríú mionthionscadal ná ocht stiúir RGB a nascadh leis an dara lasc ama i mód PWM agus iad a dhéanamh dathanna éagsúla a thaispeáint. Tá sé bunaithe ar choincheap an ilphléacsála LED, is é sin má chasann tú ar agus as soilse go han-tapa, beidh sé cosúil dúinn go bhfuil siad ar siúl i gcónaí (marthanacht na físe, táimhe dearcadh amhairc). Rinne mé uair amháin rud éigin mar seo ar Arduino.
Breathnaíonn an algartam oibre mar seo:
ceangailte anóid an chéad RGB LED;
é a lasadh, na comharthaí riachtanacha a sheoladh chuig na catóidí;
d'fhan sé go dtí deireadh an timthriall PWM;
ceangailte anóid an dara RGB LED;
lasadh é...
Bhuel, etc. Ar ndóigh, le haghaidh oibriú álainn ní mór an anóid a nascadh agus an stiúir a “adhaint” ag an am céanna. Bhuel, nó beagnach. In aon chás, ní mór dúinn cód a scríobh a chuirfidh luachanna aschuir i dtrí chainéal den dara lasc ama, iad a athrú nuair a shroichtear UEV, agus ag an am céanna an RGB LED atá gníomhach faoi láthair a athrú.
Ós rud é go bhfuil an t-athrú LED uathoibríoch, ní mór dúinn "cuimhne físeáin" a chruthú óna bhfaighidh an láimhseálaí idirbhriste sonraí. Seo sraith simplí:
uint8_t colors[8][3];
D'fhonn dath LED ar leith a athrú, beidh sé go leor na luachanna riachtanacha a scríobh san eagar seo. Agus beidh an t-athróg freagrach as líon na stiúir gníomhach
uint8_t cnt;
Demux
Chun ilphléacsáil chuí a dhéanamh, ní mór dúinn, rud éigin aisteach go leor, dí-ilphléacsóir CD74HC238. Demultiplexer - sliseanna a chuireann an t-oibreoir i bhfeidhm i crua-earraí <<. Trí bhioráin ionchuir (giotáin 0, 1 agus 2) beathaímid uimhir trí-ghiotán X dó, agus mar fhreagra gníomhaíonn sé uimhir aschuir (1<<X). Úsáidtear na hionchuir atá fágtha den sliseanna chun an dearadh iomlán a scála. Ní mór dúinn an sliseanna seo ní hamháin chun líon na bioráin áitithe den microcontroller a laghdú, ach freisin le haghaidh sábháilteachta - ionas nach gcuirfear níos mó soilse ar siúl trí thimpiste ná mar is féidir agus gan an MK a dhó. Cosnaíonn an tslis pingin agus ba chóir é a choinneáil i do chomh-aireachta leigheas baile i gcónaí.
Beidh ár CD74HC238 freagrach as voltas a sholáthar chuig anóid an stiúir atá ag teastáil. I ilphléacs lánchuimsitheach, sholáthródh sé voltas don cholún trí P-MOSFET, ach sa taispeántas seo is féidir go díreach, mar gheall ar tarraingíonn sé 20 mA, de réir rátálacha uasta iomlána sa bhileog sonraí. Ó Íoslódáil bileog eolais CD74HCT238D tá pinouts agus an bhileog cheat seo ag teastáil uainn:
H = leibhéal ardvoltais, L = leibhéal ísealvoltais, X – is cuma
Ceanglaíonn muid E2 agus E1 leis an talamh, E3, A0, A1 agus A3 le bioráin PD5, PC3, PC4 agus PC5 de STM8. Ós rud é go bhfuil idir leibhéil ísle agus ardleibhéil sa tábla thuas, déanaimid na bioráin seo a chumrú mar bhioráin bhrú-tarraingthe.
PWM
Tá PWM ar an dara lasc ama cumraithe ar an mbealach céanna agus a bhí sa scéal roimhe seo, le dhá dhifríocht:
Gcéad dul síos, ní mór dúinn a chumasú an idirbhriseadh ar Imeacht Nuashonraithe (UEV) a ghlaofar ar fheidhm a scoránaigh an LED gníomhach. Déantar é seo tríd an giotán a athrú Cumasaigh Idirbhriseadh Nuashonraithe i gclár le hainm insinte
Baineann an dara difríocht le feiniméan an ilphléacsála, mar shampla taibhsí – glow seadánacha dé-óidí. Inár gcás, d'fhéadfadh sé a bheith le feiceáil mar gheall ar an bhfíric go leanann an t-amadóir, tar éis briseadh isteach ar an UEV, ag tic, agus nach bhfuil am ag an láimhseálaí idirbhriseadh an stiúir a athrú sula dtosaíonn an t-amadóir ag scríobh rud éigin chuig na bioráin. Chun é seo a chomhrac, beidh ort an loighic a aisiompú (0 = gile uasta, 255 = níl aon rud soilsithe) agus luachanna timthrialla dualgas foircneacha a sheachaint. Iad siúd. a chinntiú tar éis UEV go dtéann na soilse LED amach go hiomlán ar feadh timthriall amháin PWM.
Seachain r, g agus b a shocrú go 255 agus cuimhnigh iad a inbhéartú agus iad á n-úsáid.
Idirbhriseadh
Is é bunbhrí idirbhriseadh ná go stopann an tslis i gcúinsí áirithe an príomhchlár a fheidhmiú agus go nglaonn sé feidhm sheachtrach éigin. Tarlaíonn cur isteach de bharr tionchair sheachtracha nó inmheánacha, lena n-áirítear an t-amadóir.
Nuair a chruthaigh muid an chéad tionscadal i ST Visual Develop, chomh maith le main.c fuaireamar fuinneog le comhad mistéireach stm8_interrupt_vector.c, san áireamh go huathoibríoch sa tionscadal. Sa chomhad seo, sanntar feidhm do gach idirbhriseadh NonHandledInterrupt. Ní mór dúinn ár bhfeidhm a cheangal leis an idirbhriseadh atá ag teastáil.
Tá tábla veicteoirí idirbhriste sa bhileog, ina bhfaighimid na cinn a theastaíonn uainn:
13 nuashonrú/thar maoil TIM2
14 TIM2 a ghabháil/comparáid
Ní mór dúinn an LED a athrú ag UEV, mar sin ní mór dúinn idirbhriseadh #13.
Dá réir sin, ar dtús, sa chomhad stm8_interrupt_vector.c athraigh ainm réamhshocraithe na feidhme atá freagrach as idirbhriseadh Uimh. 13 (IRQ13) chuig do cheann féin:
{0x82, TIM2_Overflow}, /* irq13 */
Ar an dara dul síos, beidh orainn comhad a chruthú main.h leis an ábhar seo a leanas:
Agus ar deireadh, scríobh an fheidhm seo i do 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;
}
Níl fágtha ach cur isteach a chumasú. Déantar é seo ag baint úsáide as an ordú cóimeálaí rim - beidh ort é a chuardach i Lámhleabhar Clárúcháin:
//enable interrupts
_asm("rim");
Tá ordú cóimeálaí eile sim – idirbhriste a mhúchadh. Ní mór iad a mhúchadh agus luachanna nua á scríobh chuig an “fhíschuimhne”, ionas nach ndéanfaidh cur isteach a dhéantar ag an nóiméad mícheart an t-eagar a mhilleadh.
Má fhaigheann duine éigin ar a laghad an t-alt seo úsáideach, níor scríobh mé go neamhbhalbh é. Beidh áthas orm tuairimí agus ráitis a fháil, déanfaidh mé iarracht gach rud a fhreagairt.