![]() |
STM32 generic board - Printable Version +- DIY Electronic projects (https://forum.yu3ma.net) +-- Forum: Mikrokontroleri (https://forum.yu3ma.net/forumdisplay.php?fid=52) +--- Forum: Razvojni sistemi i moduli (https://forum.yu3ma.net/forumdisplay.php?fid=56) +--- Thread: STM32 generic board (/showthread.php?tid=1529) |
RE: STM32 generic board - npejcic - 03-05-2017 Pogledaj ovde imaš alat koji će ti olakšati celu postavku: http://www.st.com/en/development-tools/stm32cubemx.html Ovde su HAL biblioteke za sve STM32 mikrokontrolere: http://www.st.com/en/embedded-software/stm32cube-embedded-software.html?querycriteria=productId=LN1897 RE: STM32 generic board - mikikg - 03-05-2017 Nebojsa je objasnio kako to uraditi sa tajmerima, evo jos jedan primer blinkanja LED ali bez upotrebe tajmera i blokirajucih petlji: Code: void loop() { Primer je abstraktan (za Arduino) ali samo da pokazem koncept. Dakle u glavnoj petlji koja vrti nas progam imamo jedan brojac koji inkrementujemo svaki put kada program tu prodje, kada se stigne do 65536 program tu promenljivu vraca na 0. U tom trenutlu kada smo stigli do max vrednosti se izvrsi toggleLED() funkcija (pali/gasi LED), nema blokirajuceg code-a, nista se ne ceka jednostavno svaki 65636-ti put prolaza toglujemo LED. Bas za takve stvari postoji SysTick tajmer i na slican nacin se koristi, stim sto je on vezan bas za interne tajmere a u primeru sam vezao na prolaze petlje. Moj primer ima dve osobine, jedna je da nije blokirajuci code a druga je da ce frekvencija blinkanja zavisiti od ostalog opterecenja procesora i funkcija tako da moze da daje nekakvu indikaciju koliko smo vremena potrosili u glavnoj petlji. Ako se zahteva striktno frekventno blinkanje onda mora da se koriste tajmeri ili PWM modul. RE: STM32 generic board - mikikg - 03-05-2017 Ovaj primer sa LED sam iskoristio za step/dir<>pwm konverter, imao sam dve iste plocice i dve USB konekcije i uradio sam samo ovo u programu: Code: if(MySerial.isConnected() && (MySerial.getDTR() || MySerial.getRTS())) { Kada preko USB dobije signale za DTR ili RTS tj da je terminal prikljucen u glavnoj petlji sam samo ubrzao malo povecavanje cnt promenljive sto je dovelo da blinkanje bude brze i tako sam mogao da tamo u nekoj shumi kablova prepoznam na koju sam se plocicu ukacio ![]() Na ovaj nacin se takodje dobije malo bolji utisak kako program radi (ili ako ne blinka znamo da je zaglavio), ako bi stavili toglovanje LED na svaki prolaz bilo bi prebrzo, videli bi samo neki osrednji intenzitet svetla od LED ali kada se podeli sa brojacem na neku vrednost oko 10Hz tacno se vidi sta je program uradio za taj jedan kratak blink (recimo prosao 20.000 puta kroz loop kada se saberu svi oni ++). Dok tako blinka u sustini je sve OK, 20.000 nasih operacija u petlji u sekundi je vise nego dovoljno za sve moguce potrebe logike. Medjutim, ako stavimo LCD 2x16 u tu petlju i pratimo blinkanje ove LED, posle ukljucivanja uredjaja sledeci blink LED ce se desiti prekosutra ![]() Sta to znaci, to znaci da je taj LCD pojeo neverovatno mnogo procesorskog vremena jer koristi delay() funkcije neophodne za komunikaciju sa tom relativno sporom periferijom i vise nema 20.000 prolaza kroz petlju u sekundi nego ako stignemo do 20-50 bice super ![]() Mnogo je korisnije na primer potrositi to raspolozivo vreme na usrednjavanje prilikom A/D konverzije (oversampling) da dobijemo finije merenje i filtriranje od smetnji, manijacio sam se sa STM32F4 jednom prilikom i radio 8192x oversampling, dobijao sam merenje napona sa A/D jos malo pa kao kod Sanwa-e ![]() Resenje je naravno da se ta LCD komunikacija prebaci na nekog drugog, bilo koriscenjem I2C prostih modula (sa PCF chipovima) sto je polovicno resenje ili koristiti jos jedan MCU koji je uvezan sa drasticno brzim komunikacijama poput SPI i gde mi iz nase glavne petlje brzinski mozemo da prenesemo poruku za LCD i da nastavimo dalje da izvrsavamo program a drugi MCU to lagano isprica LCD-u sta da crta! Naravno postoje dosta napredniji graficki moduli koji vecinu ovih problema resavaju. RE: STM32 generic board - yugaja - 03-06-2017 Ja sam gledao, da kada god sam mogao koristim "multitread principe" na bare metalu : ![]() Sve funkcije koje trose puno vremena (npr neka I2C sw implementacija, ili taj smart LCD) sam pisao kao FSMasine, tako da ako moraju da cekaju 20mS, nece blokirati ostatak programa, vec ce x puta prolaziti kroz stanje masine X_WAIT_20MS npr... Problem se prebacuje na sinhronizaciju gomile FSMova (nekad ih imam > 20) ali negde mora da se zapne. RE: STM32 generic board - npejcic - 03-06-2017 @yugaja Da, takva postavka je jedino moguća u kompleksnijim uređajima... protočnost, nikako drugačije. Nikako da se rešim da krenem sa konkretnim RTOS-om kojih danas ima u free varijantama i prilično su dobri. Dosta se koristi recimo FreeRTOS, a i STM ga ima u svojim template-ovima kao podržan. Takođe ruski OSA, itd... Inače, zanimljivo je da RTOS-ovi za profi namene koji su komercijalnog tipa mogu da koštaju 3000-4000$, a znam da su recimo QNX RTOS-ovi koštali svojevremeno i do 30000$ ![]() RE: STM32 generic board - yugaja - 03-06-2017 Ma ista stvar i kod mene, sve se neckam da krenem, ali nikako da se sve sredi. Uvek je neka frka sa vremenom, a do sada sam nakupio funkcija i resenja pa je cesto dovoljno da se samo poslozi... Ali kad vidim kako Miki resi problem sa arduinom npr, pomislim koji sam ja loodak sto sve radim iz nule.. RE: STM32 generic board - npejcic - 03-06-2017 @yugaja ![]() ![]() RE: STM32 generic board - gorankg - 03-06-2017 Ne stajte mi na muku ![]() Misljenja sam da neko kome cena mikrokontrolera nije presudna (radi manji broj uredjaja po projektu ili se igra kao ja) treba da odabere MCU ubicu sa svim I svacim na sebi I sve nadalje radi sa njim. Cak I kad je ocigledno overkill nema veze, guras taj MCU. RE: STM32 generic board - mikikg - 03-06-2017 Upravo isto zagovaram, mnogo je laksi razvoj, jos sa ovom Black Magic Probe sam prezadovoljan kako radi, recimo za dan sam iscukao program koji mi treba preko Arduino IDE, brzo se upucava program (merio, treba mu 2 sekunde od stiskanja upload dugmeta do resetovanog i spremnog MCU za rad!!!), brzo proveris, ne resetuje ti se terminal seriske veze, USB sam u novoj verziji zaobisao pa sam dobio dodatne memorije i procesorko vreme i isto zagovaram maksimalnu upotrebu HW modula, nista SOFT I2C/Serial i slicno, radi bolje i brze sve, zato i postoje ti moduli, A/D recimo kod STM32 je 12bitni i prilicno brz, uz osrednjavanje (bez DSP instrukcija) radi ko bombona ... Ove Blue Pill STM32 plocice su toliko jeftine da mi se isplati da kupim na oglasima i odlemim MCU ako pravim custom PCB, lakse to nego da se mlatim sa uvoznicima i kupujem klot MCU, a cak ima i fora koju cu proveriti, kazu da ovi MCU imaju 128kB FLASH memorije umesto 64KB koliko bi trebao da ima po DS! Jedino cekam da se kinezi izbace sa STM32F4 jeftinim plocicama poput 1Bitsy, meni jaci MCU od toga ne treba niti vise I/O, ako treba vise I/O stavim dve plocice, ako treba i jace od toga onda se ide na RPi ili Beagle Bone Black koje inace razmatram cak i za "bare metal" programiranje (tu cekam RPi i BBB podrsku za BMP koju su najavili): https://www.kickstarter.com/projects/esden/1bitsy-and-black-magic-probe-demystifying-arm-prog RE: STM32 generic board - mikikg - 03-06-2017 (03-06-2017, 11:31 AM)npejcic Wrote: Da, takva postavka je jedino moguća u kompleksnijim uređajima... protočnost, nikako drugačije. Za "protocnost", sve ovo sa MCU je igracka kakvu protocnost moze da dobijes sa FPGA ili CPLD, samo zamisli da se ona nasa loop() ne izvrsava u hiljade i hiljade CLOCK taktova, nego u 1 ili 2 CLOCK takta, masivni paralelizam, to je prava stvar za extremno brzu logiku! Moze da se desi da ce mi trebati nesto tako jer cu imati potrebe za merenjem rastojanja preko ultra zvuka (neki specificni linearni davaci) pa cu morati da arbittriram vrlo precicno i sa vrlo kratkim porcijama vremena, FPGA/CPLD je "rodjen" za takve potrebe! RE: STM32 generic board - gigabyte091 - 03-06-2017 Pločice su u Amsterdamu... sve je spremno samo se ona glavna stvar još čeka... Nego meni je frend koji ide na elektrotehniku jučer pokazivao MBED online IDE, čak smo našli i library da taj IDE može funkcionirati sa običnom pločicom, a ne nekom razvojnom pločom od ST-a (Jedino moraš imat ST-Link ![]() Miki kako si pločicu onu pretvorio u BMP ? imaš kakav tutorijal RE: STM32 generic board - npejcic - 03-06-2017 @gorankg U pravu si apsolutno... ko može i ko radi manje količine nemoj da štedi na MCU-u. Međutim, često viđam da su neki od početnika u zabludi da je dovoljno odabrati neki veoma moćan MCU i time rešiti problem "protočnosti"... Recimo koristim u jednom od projekata STM32F429 koji je svakako moćan, ali ako se kod zaglavi pri ispisu nekih stvari na displeju ili čekajući neku periferiju ostatak koda "trpi". Zato često dosađujem da se Delay funkcije trebaju izbaciti iz koda kompletno ili svesti se na DelayUs (mikrosekunde). @mikikg Da, ali opet ponavljam, ako imamo recimo sledeće stvari koje opslužuje "običan" MCU: LAN konekcija, GSM modul, senzorika (temperature, vlažnost itd...), FLASH memorija za log, LCD prikaz, tasteri, I2C RTC i još par stvari pride za to nam ne treba FPGA/CPLD ali main petlja MORA biti dovoljo protočna. Nikako ne meriti recimo senzor temperature po principu pokreni merenje, čekaj da završi koristeći DelayMs(100) pa onda idemo dalje... Nego, sve mora kroz state-machine i onda proveravati recimo na 1ms da li je završen taj-i-taj task/periferija. Na taj način sve radi sekvencijalno i protočno da se ne oseća gomila taskova ili bilo kakvo kočenje. Kod FPGA je latencija od ulaza do izlaza reda ns ![]() ![]() RE: STM32 generic board - mikikg - 03-06-2017 @gigabyte091 Pogledaj ovde za pocetak, ako imas nejasnoca otvori novu temu pa ce mo tu diskutovati: http://www.elitesecurity.org/t494991-Black-Magic-Probe-BMP-ARM-JTAG-Debugger RE: STM32 generic board - Macola - 03-06-2017 Evo primera neke jednostavne, ekstra brze, stejt masine na prostom 8 bit MCU. Iskomentarisao sam edukativno. Možda nekom bude korisno... Code: /* RE: STM32 generic board - Macola - 03-06-2017 To je jednostavan i vrlo brz način jer se koriste samo if else skretnice koje se obavljaju u jednom ili dva sistemska takta + ono što se dogodi u isr. Zavisno od kompajlera while troši prilično taktova (mereno). Brže može samo u Forth ili još brže u asm. RE: STM32 generic board - Macola - 03-06-2017 Na isti način može da se napravi multitasking mašina, gde je jedna switch master stejt mašina a ostale switch drže pojedinačne taskove. Vezne niti se obavljaju flagovima ili posmatranjem trenutnih sevenci pojedinačnih taskova, iz master switch. RE: STM32 generic board - Macola - 03-06-2017 Neki banalizovan primer jednostavnog i ekstremno brzog multitaskinga: Code: //prekondicioniranje P.S. Bare metal ili ti "plekano" pisanje, što bi rekle babe :-) RE: STM32 generic board - Milan94 - 03-07-2017 Posto ste akcenat stavili na LCD displeje da zauzimaju dosta resursa kakvo je stanje ukoliko koristimo PFC8574 modul za komunikacuju sa lcd. Konkretno mislim na ovaj modul da li upotrebom njega povecavamo brzinu komunikacije izmedju MCU i LCD. RE: STM32 generic board - vojinilic - 03-07-2017 (03-07-2017, 03:09 PM)Milan94 Wrote: Posto ste akcenat stavili na LCD displeje da zauzimaju dosta resursa kakvo je stanje ukoliko koristimo PFC8574 modul za komunikacuju sa lcd. Taj IC je obican I/O expander. Brzina se nikako ne povecava sa njim, vec se smanjuje, a dodatno se komplikuje program zbog dosta I2C transakcija. Najbrze je koristiti MCU sa gotovim drajverima za displej ili GPIO. RE: STM32 generic board - mikikg - 03-07-2017 Da upravo to, taj PCF je obican expander, i dalje sa njim mora da se ispostuje tajming za komunikaciju sa LCD, vec smo diskutovali oko toga, nema mnogo opcija, ili da se koristi delay() (najlosija opcija), ili koristiti neke multitasking cake ili RTOS ili najbolja opcija po meni je dodatan MCU koji bi bio uvezan sa SPI komunikacijom sa glavnim procesorom. Sto se cene tice, taj PFC8574 kosta skoro ako ne i vise nego neki MCU! PS: Ja sam mislio na standardne LCD module 2x16 karaktera, oni su spori ... |