www.elektronik.si
STM32F4 discovery
Pojdi na stran 1, 2  Naslednja  :||:
www.elektronik.si -> Programiranje embedded sistemov

Avtor: Sentinel66Kraj: Ljubljana PrispevekObjavljeno: Tor Sep 25, 2018 11:30 pm    Naslov sporočila:  STM32F4 discovery
----------------------------------------------------------------------------
Pozdravljeni,

Sem študent računalništva, tekom študija smo se pri enem predmetu spoznali s omenjeno ploščico, naredili nekaj osnovnih stvari, vžig ledic, časovniki, itd., pri vsem pa so nam pomagali asistenti z navodili, itd. Moje vprašanje pa je naslednje. Kako pa se stvari lotiti ko nimaš navodil in imaš samo dokumentacijo ploščice ? Z žalostjo namreč ugotavljam da samo s tistim sam ne bi znal niti ledic vklopiti. Morda sem se tekom faksa preveč navadil na to da imam povsod točna navodila in postopke in izgubil tisti raziskovalni duh. Če omenim kje se mi je prvič postavilo to vprašanje - pri temperaturnem senzorju. Sam sem ga usposobil ker sem na spletu našel knjižnico in rešitev za točno to ploščico in točno ta senzor. V kolikor bi moral sam iz 0 spisati vse ukaze za poljuben senzor, sploh ne vem kje bi se lotil.

Avtor: MarkoMKraj: Lovrenc na P. PrispevekObjavljeno: Sre Sep 26, 2018 8:27 am    Naslov sporočila:  
----------------------------------------------------------------------------
Dokumentacija ploščice ti ne bo kaj dosti pomagala. Najlažji način je, da greš skozi primere našega soforumaša https://stm32f4-discovery.net/

Avtor: tilz0RKraj: Črnomelj PrispevekObjavljeno: Sre Sep 26, 2018 9:27 am    Naslov sporočila:  
----------------------------------------------------------------------------
Sentinel66, kaj te zanima točno?

Predlagam, da narediš naslednje:
- Inštaliraš Atollic TrueSTUDIO, free orodje za programiranje STM32
- Inštaliraš STM32CubeProgrammer, da boš imel enostaven dostop do programatorja/debuggerja
- Preneseš dol STM32CubeF4 package, ki ga dobiš na st.com
- Preseneš dol STM32CubeMX program, ki ti bo pomagal zgenerirati projekte.

Ta kombinacija je super za začetnike. Če potrebuješ še kakšna navodila, kako začeti, mi pošlji ime, priimek, email na tilen.majerle@st.com in ti omogočim MOOC račun, kjer imamo online treninge, takšne in drugačne.

Avtor: juremKraj: Ljubljana PrispevekObjavljeno: Sre Sep 26, 2018 3:20 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Obstaja tudi 15 člankov v slovenščini na to temo, Svet elektronike pa je na voljo tudi v knjižnicah.

Lp
Jure

Avtor: Sentinel66Kraj: Ljubljana PrispevekObjavljeno: Sre Sep 26, 2018 6:45 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala za vse odgovore, bom odgovoril kar po vrsti.

MarkoM je napisal/a:
Dokumentacija ploščice ti ne bo kaj dosti pomagala. Najlažji način je, da greš skozi primere našega soforumaša https://stm32f4-discovery.net/


Tudi sam sem se stvari lotil tako - poiskal sem podobne primere in za svoje potrebe prilagodil kodo. Vendar te primere je nekdo moral napisati - če citiram svojega mentorja: "boljše literature od Reference Manual-a ni". Problem nastane ko bi npr. rad implementiral branje iz določenega senzorja, za katerega primera na spletu ni.

tilz0R je napisal/a:
Sentinel66, kaj te zanima točno?

Predlagam, da narediš naslednje:
- Inštaliraš Atollic TrueSTUDIO, free orodje za programiranje STM32
- Inštaliraš STM32CubeProgrammer, da boš imel enostaven dostop do programatorja/debuggerja
- Preneseš dol STM32CubeF4 package, ki ga dobiš na st.com
- Preseneš dol STM32CubeMX program, ki ti bo pomagal zgenerirati projekte.

Ta kombinacija je super za začetnike. Če potrebuješ še kakšna navodila, kako začeti, mi pošlji ime, priimek, email na tilen.majerle@st.com in ti omogočim MOOC račun, kjer imamo online treninge, takšne in drugačne.


Ne boš verjel ampak ravno tvojo kodo sem uporabil za implementacijo temperaturnega senzorja in ko sem šel čez vso to kodo se mi je postavilo vprašanje kako si do te kode prišel, sam je z reference manualom ne bi znal spisati. Uporabljam IAR Embedded Workbench, ki smo se ga naučili uporabljati na faksu.

Za konec naj povem da pišem diplomo, v njej uporabljam stm32discovery in precej me ovira dejstvo da je stm32 precej obskurna zadeva, precej malo je na spletu uporabnih primerov (za razliko od npr. spletnih ogrodij kot javaee, django, kjer lahko najdeš primer za popolnoma vse kar si zmisliš). In moje osnovno vprašanje je šlo prav v tej smeri, ne da me zanima nekaj konkretnega ampak kako se lotiti iz 0, saj konec koncev je vse te tutoriale nekdo moral spisati iz 0 samo s pomočjo manual-a. Sklepam da me ovira moje pomanjkanje podrobnega elektrotehniškega znanja ?

Avtor: mosqito PrispevekObjavljeno: Čet Sep 27, 2018 12:45 am    Naslov sporočila:  
----------------------------------------------------------------------------
Sentinel66 je napisal/a:

Problem nastane ko bi npr. rad implementiral branje iz določenega senzorja, za katerega primera na spletu ni.


Jaz se tega lotim z branjem datasheeta. Redko uporabim kodo, ki je na voljo, ampak grem skoraj vedno pisati svojo kodo. Če ne drugega, da imam vse driverje za senzorje v lastnem "dialektu". Kaj si boš ti izbral, je odvisno od tebe. Nekaterim odgovarja uporaba makrojev, drugim direktna uporaba vrednosti. Izbiranje bitov v registrih lahko narediš s bitfieldi ali pa z logičnimi operacijami. Eno in drugo ima prednosti in slabosti. Podobnih načinov prostopa k problematiki pisanja driverja za nek senzor je še malo morje. Kaj boš izbral, je odvisno od izkušenj, oz. "kilometrine". Najbolje, da se stvari lotiš modularno in po vrsti:

- vsak senzor potrebuje funkcijo za branje (sicer bi ne bil senzor)
- v veliko senzorjev se vrednosti lahko tudi vpisuje (recimo neke nastavitve)

kako se lotiti teh dveh operacij?

Najprej loči harverski del, ki je odvisen od izbranega mikrokontrolerja in "pripravi" funkcijo za branje in vpis vrednosti v/iz senzorja. Če je ta na I2C, naredi funkcijo npr.
Koda:
read_reg(I2C_HandleTypeDef *hi2c, uint8_t adr, uint8_t reg, uint8_t *val)


in
Koda:
write_reg(I2C_HandleTypeDef *hi2c, uint8_t adr, uint8_t reg, uint8_t val)


Pri tem je hi2c kazalec na strukturo (handle) od I2C, ki si jo uporabil pri inicializaciji I2C in ga potem uporabiš pri dejanski interakciji preko I2C. S tem ločiš izbiro I2C (mikrokontrolerji jih imajo lahko več) od samega driverja za senzor. Pri inicializaciji boš uporabil npr. I2C2 na nekam MCU in npr. I2C1 na nekem drugem. Pri uporabi tvojega driverja potem ne bo potrebno spreminjati nič in ga boš lahko uporabil v vseh novih projektih...

Naslednji korak je definicija internih registrov nekega senzorja. Jaz tu velikokrat uporabljam bitfield-e, ker je enostavno za pisanje kode. Nekateri se bodo seveda križali, ampak s skrbno uporabo je to lahko kar močno orodje. Največja težava pri bitfieldih je, da se spremeni položaj MSB in LSB. O uporabi tega ali "hsift & mask" je bilo že veliko napisanega. Samo par linkov:
https://opensourceforu.com/2015/03/be-cautious-while-using-bit-fields-for-programming/
https://www.pagetable.com/?p=250
https://hackaday.com/2015/08/28/firmware-factory-bit-fields-vs-shift-and-mask/
itd...

Podajam primer za senzor Si7013 (temperatura, vlaga).

V datasheet-u je npr. na strani 34 opisan User register 1 s položajem in pomenom bitov. Poglej si tabelo in to primerjaj s spodnjo deklaracijo:


Koda:
/** \brief  Union type for the structure of User Register1 in Si7013
 */
typedef union
{
   struct
   {
         uint8_t res0      :1;        /*!< bit:  0 RES0 */
         uint8_t             :1;        /*!< bit:  1 reserved */
         uint8_t htre      :1;        /*!< bit:  2 heater enable */
         uint8_t           :3;        /*!< bit:  3...5 reserved */
         uint8_t vdds      :1;        /*!< bit:  6 VDDS */
         uint8_t res1      :1;        /*!< bit:  7 RES1 */
   } b;
   uint8_t r;
} si7013_reg1_t;


Pri pisanju funkcije za vpis ali branje potem lahko uporabiš direkten sklic na posamezne vrednosti posameznih bitov, tako da npr. prirediš polju res1 vrednost 1 ali 0, ali pa vpisuješ/bereš celotno vrednost kot bajt (preko polja "r").

Ko si definiral to za vse registre, se lotiš funkcij za branje in vpis v registre. Tu lahko za začetek implementiraš le funkcije, ki jih dejansko rabiš, kasneje pa dopolniš z vsemi ostalimi. Ni najbolj "higienično", samo ponavadi se mudi in nekaj kar se v kodi nikoli ne kliče/izvaja tudi prevajalnik spusti in ne uporabi.

Ta skupina funkcij uporablja strukture, ki si jih definiral za registre in kliče gornji funkciji za vpis/branje registrov.

S tem si driver večinoma zaključil. Ostane ti še kakšno preračunavanje vrednosti in podobno. To pa uporablja funkcije za vpis/branje registrov in vrača neke "human readable" vrednosti.

V glavnem: delaj po plasteh, najprej osnovno branje vpis, potem pa greš višje.

LP,
M.

Avtor: Sentinel66Kraj: Ljubljana PrispevekObjavljeno: Čet Sep 27, 2018 1:28 am    Naslov sporočila:  
----------------------------------------------------------------------------
Stvari se bom res moral lotiti po korakih, sem namreč čisti začetnik pri teh stvareh in ne gre tako lahko skozi kot npr. učenje novega jezika, tu gre za veliko več. Me pa veseli da imamo tudi v sloveniji community, ki se spozna na stm32, čez par dni se ponovno lotim diplome in bom z veseljem povprašal za nasvet pri konkretnih vprašanjih, prva stvar ki me čaka je branje podatkov z usb porta. Zaenkrat imam v ta namen ogledano knjižnico usb4java (knjižnica za branje v javi). Če ima kdo kakšno boljšo idejo (drug jezik, druga knjižnica) sem odprt za ideje.

Avtor: tilz0RKraj: Črnomelj PrispevekObjavljeno: Čet Sep 27, 2018 6:02 pm    Naslov sporočila:  
----------------------------------------------------------------------------
https://www.st.com/content/st_com/en/support/learning/stm32-education/stm32-step-by-step.html?ecmp=tt8206_gl_social_sep2018

Avtor: Sentinel66Kraj: Ljubljana PrispevekObjavljeno: Sre Okt 17, 2018 8:28 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Da ne bom odpiral nove teme bom kar tukaj vprašal. Kot rečeno diplomo delam s STM32, sedaj pa se je izkazalo da bom rabil še en majhen WIFI modul ESP8266, arduino. Med spoznavanjem z malo stvarco sem zašel še na razne arduino tutoriale in stvar me je šokirala.

Do sedaj kar sem uspel opaziti je, da je z arduinotom vse enostavno. Pri STM32 je potrebnih veliko vrstic za tako preprosto stvar kot je prižgati ledico. Pri branju s senzorja gre za ogromno količino kode, ki jo priznam polovico ne razumem. V arduinotu vse izgleda tako enostavno da večino stvari lahko opraviš z eno vrstico.

Čisto banalen primer, ki sem ga našel in bi bil pri meni uporaben. Branje voltaže. Koda izgleda takole:
Koda:
sensorValue = analogRead(A0)


Kolikor sem uspel na netu prebrati je STM32 superioren arduinotu kar se hardware-a tiče, vendar roko na srce, jaz delam precej preproste stvari. Resno razmišljam da bi presedlal na arduinota. Mi lahko kdo pove ali se motim glede zgoraj napisanega, sploh bi mi veliko pomenilo mnenje tilz0R-ja, ki je zelo domač z STM32.

Avtor: mosqito PrispevekObjavljeno: Sre Okt 17, 2018 9:20 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Dokler ti ni potrebno početi stvari v realnem času, je arduino povsem uporaben. Če ne uporabljaš periferije kot je bila mišljena (npr.bit banging namesto hardverskega i2c) je arduino čisto ok. Če ti ni treba početi nekaj ob točno določenem trenutku, ampak lahko rešiš problem z zakasnitvijo, ki se izvaja v for zanki (wait v obliki zaporedja nop-ov), je arduino čisto ok. Če lahko shajaš z eno vrstico lastne kode (na osnovi nekih "knjižnic" neznanega izvora), da stvar "dela", je čisto ok. Če gre za domač projekt, ki ne rabi testiranja in lahko kadarkoli " zašteka" brez posledic je tudi čisto ok... Če ti je dovolj "debugiranje" zizpisom na serijski port bo a. več kot dovolj...

Avtor: tilz0RKraj: Črnomelj PrispevekObjavljeno: Sre Okt 17, 2018 11:14 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Kar pravi mosquito bo držalo.
Če pa karkoli od tega ne moreš prežvečiti, imaš pa STM32, ki ga lahko v CubeMX skonfiguriraš, exportaš v free TrueSTUDIO in potem uporabiš še mojo knjižnico za ESP8266 in imaš vse v paketu.

https://github.com/MaJerle/ESP_AT_Lib

Avtor: Sentinel66Kraj: Ljubljana PrispevekObjavljeno: Čet Okt 18, 2018 12:18 am    Naslov sporočila:  
----------------------------------------------------------------------------
Hvala za odgovore,
sem pisal mentorju, če je sploh opcija da grem iz stm32 na arduino, kot rečeno enovrstičnice verjetno ne bodo dovolj za diplomsko nalogo. Je pa tako da imam večino kode v STM32 že spisane, rabim le še objavo podatkov iz STM32 na strežniku, za kar bom uporabil ESP8266, potem bom pa z ločene java aplikacije dostopal do teh podatkov. Pogojno bi moral uporabiti še en senzor in vidim da je opcija tudi da ga priklopim na ESP8266 direktno, po možnosti analogni senzor in z eno vrstico preberem vrednost.

Avtor: tilz0RKraj: Črnomelj PrispevekObjavljeno: Čet Okt 18, 2018 7:20 am    Naslov sporočila:  
----------------------------------------------------------------------------
Sicer je odločitev tvoja. Misliš v življenju programirati embedded sisteme oz. se z njimi resno ukvarjati? Potem ti šef ne bo pustil, da uporabiš Arduino kodo Smile

Avtor: Sentinel66Kraj: Ljubljana PrispevekObjavljeno: Čet Okt 18, 2018 5:31 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Profesionalno se s embedded sistemi ne bom ukvarjal, bom si pa par stvari doma porihtal, verjetno kar s ESP8266 ker mi je blazno všeč Smile

Avtor: s56alKraj: JN66SI & JN76TM PrispevekObjavljeno: Čet Okt 18, 2018 6:54 pm    Naslov sporočila:  
----------------------------------------------------------------------------
Zanimiva tema, se bom navezal nanjo tudi s svojim vprašanjem. Po letih igranja s PIC32MX @ MPLAB, sem se odločil malce pofirbcati še okoli STM32 Smile. Za začetek:

- namestil Open STM32 - Eclipse system workbench http://www.openstm32.org/System%2BWorkbench%2Bfor%2BSTM32
- prek ST-link (USB) vmesnika povezal Olimex STM32F107 (razvojno) ploščico,
- spisal nekaj osnovnih vrstic v C: inicializacija PLL sistema urnih signalov CPU, čakalnih stanj branja iz EEPROMa, timerskega modula za generiranje časovnih zastavic, UART RX prekinitev za preprosto komunikacijo, jasno tudi prižiganje / ugašanje portov in podobne malenkosti... Vse periferne (in sistemske) enote inicializirane / uporabljane z neposrednim pisanjem / branjem registrov (z lastno kodo, pripravljeno na osnovi datasheeta in pripadajočega ST priročnika za programiranje), torej brez vključevanja predpripravljenih knjižnic za periferijo.

Zgoraj našteto zaenkrat deluje. Ker pa je želja oz. dolgoročni cilj tega igranja povezljivost IP / Ethernet, me zanima:

1. Ali ima kdo izkušnje z vključitvijo "IP stacka" v okolju "Open STM32" ? Če da, katerega ter koliko je stvar zahtevna in podokumentirana?

2. Kako je z IP stackom pri tej postavitvi:

tilz0R je napisal/a:

Predlagam, da narediš naslednje:
- Inštaliraš Atollic TrueSTUDIO, free orodje za programiranje STM32
- Inštaliraš STM32CubeProgrammer, da boš imel enostaven dostop do programatorja/debuggerja
- Preneseš dol STM32CubeF4 package, ki ga dobiš na st.com
- Preseneš dol STM32CubeMX program, ki ti bo pomagal zgenerirati projekte.


Največja ovira pri "Open STM-32" je, po mojih dosedanjih opažanjih, dokumentacija oz. njena dokaj slaba preglednost...
.

Stran 1 od 2

Powered by phpBB © 2001,2002 phpBB Group