Fórum témák
» Több friss téma |
Arduino IDE-vel lehet STM32 -t programozni ? Mit kell hozzá letölteni (linux) , mert a menüjében nem látom felsorolva az alaplapok között.
Ezt megnézem majd.
Még egy kérdés mivel itt egy vektoron van az RX TX Error megszakítás jól gondolom, hogyha mondjuk az RXNE it kezelem és közben be jön egy TXE akkor nem szakíthatja meg saját magát? (még PIC18 assembly-nél emlékszem, hogy ott tiltotta a global it engedélyezést it-be lépéskor és az ISR végén vissza kellet kapcsolni, de itt nem tudom, hogy van)
Önmagát nem tudja megszakítani egy megszakítás, lévén nem magasabb a prioritása saját magánál. Más megszakítás viszont megszakíthatja, ha magasabb a prioritása (azaz a hozzárendelt prioritásérték alacsonyabb, csakhogy könnyebb legyen belezavarodni ).
Az, hogy más megszakítja jelenleg nem érdekel, csak van olyan kontroller ahol differens vektoron vannak a TX, RX, error it-k és ott nem feltétlen jó, ha az rx it-t megszakítja egy error it (bár ezen még azért gondolkoznom kell, mert az se biztos, hogy rossz )
A prioritás értéket már kérdeztem, mert bele zavarodtam utána természetesen logikus volt, hogy miért így van, de én a felső api részen invertálni szoktam, hogy olvashatóbb legyen.
Nagyon szuper! Köszi!
Az Arduino IDE-t már ismerem, nagyon örülök, hogy az STM32 -is megy vele! A Idézet: vagy a „CubeMX - Truestudio” Idézet: (többről egyenlőre nem hallottam) nyújt valami többet amiért érdemes lenne beletanulnom? „Keil”
Arduino ide:
- csak azt a néhány típust támogatja, amihez megcsinálták - nincs debug lehetőség (ill. csak annyi, hogy printf-el kiiratgatod a változóid értékeit) - összetettebb programnál az 1db *.ino-ba mindent beletéve áttekinthetetlenül hosszú lesz Truestudio, Keil: - mindegyik stm32 típus támogatva van - debug / trace lehetőség - fordító optimalizálási lehetőségek használata - ram-ból futtatható kód készítése, debuggolása (fejlesztéskor a flash 'kopásának' elkerülésére és a gyorsabb programfeltöltés miatt hasznos lehetőség) - több forrásfájl használata - a nativ c kód kevésbé erőforrásigényes mint az arduino által használt c++ (a keil/truestudio-ban is van lehetőség c++ kódot csinálni, keverhető is az asm, a c és a c++ forrás Biztos van még ezeken kívül más is, de hirtelen ennyi jutott az eszembe.
A debugba beleértendő: CPU regiszter lista az aktuális értékekkel, változók értékének kijelzése akrá grafikusan is, változók értékének változtatása futásidőben, call stack, stb.
Szerintem bármelyik 32 bites kontroller arduino stack-el ágyúval verébre szituáció.
Az arduino leginkább blocking kódot használ mindenre így elvész arra a teljesítmény pl.: while() polling arra, hogy UART-on ki ment-e egy adat byte. Meg ott a delay_ms függvény is amit én "bűnnek" tartok, mivel x ms-re megállítja a procit (persze interrupt-ot tud kezelni). Amúgy, ha mondjuk egy mega/uno-val is megelégszel arra tudsz kódot írni Atmel Studio-ban is (ami visual studio alapú) és ott van maga a Visual Studio-hoz is a VisualMicro. ARM-es controller-t is lehet visual studio-ban programozni (bár ez fizetős) de ott van a visual studio code video ami ingyenes és szerintem messze jobb még az is mint bármelyik java-án alapuló "memória temető".
Egy más jellegű kérdés.
Van egy tömb azt akarom, hogy a startup ne inicializálja, megtaláltam, hogy be kell rakni egy section-be eddig oké, de ha az a linker script-et nem módosítom (hozzáadok egy .noinit section-t és erre hivatkozok) akkor a build után azt látom, hogy ez a section be került a flash-be is és a ram-ba is és flash és ram szinten is helyet foglalnak a section-be írt változók ez normális?
A section-ok a linker scriptnek fontosak. Ha ott nem adod meg, hogy hova menjen akkor honnan kellene tudnia, hogy ezt csak a flash-ben szeretnéd tárolni? Ugyanolyan változónak fogja tekinteni, mint a többit.
Köszi a VS Code-os tippért, nagyszerű cucc.
Pont valami ilyesmit kerestem mostanában, mert az aktuális projektemben többféle mikrokontrollert is használok (ráadásul különböző gyártóktól) és szerettem volna egységes projektként kezelni az egészet egy IDE alatt, de makefile alapon (SEGGER Studio jó lenne, de nem akarok többé IDE-től függni, Atmel Studio -> EmBitz -> Atollic TrueStudio -> STM Studio ... Grrrr). Az Android Studio-t mondjuk így sem úszom meg... Ugyan kis ideig eltartott, míg összeraktam a saját toolchain-emet rá és kikísérleteztem a szükséges JSON-okat, de most már szépen működik a debug és a fejlesztés is (intellisense is 100%-os, ami gyakran kínszenvedés volt másutt). Simán tudok különböző ARM-okra is (Nordic, STM) vagy akár Win32-re is fordítani (Win32 a GUI szimulátor ha kell, most épp nem kell majd, de egy korábbi projektemen leteszteltem).
Örülök, hogy ezt mondod egyszer csak a gyártók is rá jönnek, hogy a java...
(Nem tudom ki mondta, de valaki említette régebben, hogy azért a Java körül forog az egész ipar, mert mikor elindult a modern IDE dolog akkor a java volt nyílt forrású csak a VS zárt volt) A VS Code-hoz még kevés a doku így nehéz vele elindulni (adott esetben) a Studio-hoz a Visual GDB miatt elég sok doksi van már. Érdemes egyébként utána olvasni mit tud a VS GDB mert szerintem többet tud kb mint bármelyik IDE. Az Android studio-hoz biztos több supportot találsz, de a Visual Studio-ban tudsz C#-ban Android-ra fejleszteni. Én háklis vagyok a kód színére és én a Visual Studio színeit preferálom a legjobban, de a VS Code-ban nem tudsz pontosan VS Studio színt össze rakni.
Több leírásból raktam össze én is.
Itt a template workspace-m, amin dolgozom éppen. Egyelőre két nordic minta projektet lehet belőle fordítani (a debug-ot is teszteltem), illetve egy generált STM32-st. Időzáras link a template projektre Találsz egy setup.txt-t a tőkönyvtárban, ott vannak a telepítési instrukciók a toolchainre és a kötelezően beállítandó környezeti változók. Ha nem akarsz bajlódni a telepítésekkel (a környezeti változókat azért be kell állítani), itt az aktuális toolchain-em: Időzáras link a toolchain-re Az intellisense helyes működéséhez először le kell fordítani a projekteket a build task-okkal. Ekkor automatikusan legenerálódik az a fájl, aminek alapján véigig tud menni a projektfán.
Sziasztok!
NEC IR decode esetén melyik az egyszerűbb megoldás, EXTI / TIMER vagy PWM input? Az utóbbit próbálgatom LL-ben, valahol nem áll össze. Config-ra tippelek.
Az MX-ben hibáztam. A végén van a jó beállítás:
Bővebben: Link
Sziasztok,
Segger embedded studio-val és jlink-el programoznék Nuvoton M4-es procit. A probléma az, hogy a program a fő flash-be (Nuvoton terminológiával APROM) beíródik, a loader területre (LDROM) viszont nem, és ezután ahogy azt kell, verify error-al leáll a programozás. Keil-el működik szépen, szerintem ez a SES hibája, esetleg az enyém, mert valamit nem állítok be jól. Van valakinek ötlete, mi lehet ez?
STM32F103C8 (Blue pill) ADC1 konverterét szeretném hardveresen triggerelni, jelen esetben Timer2 CH2 OC jelével PWM1 módban, de lehetne más is. ADC-vel a belső hőmérőt mérem egyébként. Próbálom az RM0008 Reference Manual leírását követni, de legfeljebb egy konverzió történik, azután néma csend. STM32F4-gyel működik, itt viszont nem. A program Keil környezeteben készült, a CMSIS device inititialisation 72 HHz alapértelmezett órajelet állít be.
Van valakinek tapasztalata/tanácsa az ügyben?
Az EOC flag-et elvileg kitörli az ADC1->DR kiolvasása. Másodjára pedig már be sem billen...
Idézet: „EOC: End of conversion This bit is set by hardware at the end of a group channel conversion (regular or injected). It is cleared by software or by reading the ADC_DR.”
A példa 53. sorában pedig törli:
Idézet: „A példa 53. sorában pedig törli:” Erre mondják, hogy jobb hiába dolgozni, mint hiába lustálkodni... Máshol lehet a probléma. A debuggerben azt látom, hogy első alkalommal TIM2->SR CC2IF nincs bebillenve, viszont az ADC1->SR-ben 1-ben áll EOC. Az adat kiolvasása és EOC törlése vagy törlődése után már többet nem billen be EOC, viszont (egy idő után) TIM2->SR-ben bebillenve látom a CC2IF jelzőbitet. Tehát mintha nem érezné szükségét a Timer, hogy az ADC-t tovább rugdalja...
Kínomban megcseréltem Timer2 és ADC1 inicializálását, de nem biztos, hogy ettől kezdett elműködni, hanem az időzítéseket is drasztikusan le kellett csökkenteni.
Valamilyen rejtélyes okból kb. 4000-szer ritkább a triggerelés, mint ahogy kellene. Most tehát 100 us periódust állítva (1000 ms helyett!), 420 ms-onként jön az ADC1 EOC flag. Nem értem a dolgot, de már fél siker, hogy idáig eljutottam...
Na mondom a megoldást! (Jól eltoltam vele két napot!!!)
Itt az utolsó utasításban nem kellett volna hullámvonalat tenni (tilde)! Tehát az utolsó sor helyesen:
Sziasztok!
Úgy láttam a keresőben nem merült még itt fel. Aki STM32-es kit-ekkel játszik (Nucleo,Discovery) az on-board debugger-t át lehet "alakítani" egy jlink-es debugger-re ami gyorsabb (elvileg). Itt van róla infó. Egy mellékes kérdés a segger nagyban szeretni reklámozni az unlimited breakpoint-ot a jlink-ekhez ez ugye x-től felfelé csak soft breakpoint lehet vagy a segger-nél ennyire "okosak" unlim hw breakpoint van? (ja és persze az átheréléssel nem jön az unlim breakpoint az csak külön licence-el megy)
Sziasztok,
HAL SPI. Keszitettem egy 16b-es valtozatot a HAL_SPI_Transmit( )-bol.
A lenyegi resze: Az Init-ben levo, ide vonatkozo: DSIZE = 16b.
Transmit( ):
Debugerben lepesrol lepesre regiszter szinten ellenorizve, mukodik, ha 3 16b-es adatot kuldok ki folyamatosan. Ha 1 elemu adattal hasznalom, akkor nem allitja be a TXTF flaget amikor kellene, viszont a regiszterek alapjan ugy tunik hogy kikuldi az adatot ( TXC, EOT -t beallitja ), es a vegen le is torli a megfelelo flageket. Ha ezutan meghivom ugy hogy ujra 3 elemet kuldjon ki, akkor ido elott beall a TXTF es az alabbi sornal timeout lesz:
Namost a kodban lathato hogy en ezt flaget figyelem es ha ido elott beallitja, akkor letorlom. Ezzel igy ugy tunik hogy mukodik, de nem ertem hogy miert tortenik mindez konkretan. A _01DATA az initben, ha jol ertem annyit jelent hogy egyszerre egy DSIZE meretu adat ( jelen esetben 16b ) tarolhato egyszerre a FIFOban. Valakinek otlete ? A hozzászólás módosítva: Dec 11, 2019
f429es ref manualba azt latom, hogy a txe flag a 2. bit elkuldesenel beall.
En a helyedben inkabb ar rxnet figyelnem az pontosan akkor fog it-t adni ha atment 16 bit. Idézet: Nem ertem. It nem kell„En a helyedben inkabb ar rxnet figyelnem az pontosan akkor fog it-t adni ha atment 16 bit.” Ez CubeMX generalt HAL kod, es minimalisan modositott, a felepitese jo, az adatlapban leirt folyamat alapjan. Kiveve a fenti esetet jol is mukodik. A hozzászólás módosítva: Dec 11, 2019
|
Bejelentkezés
Hirdetés |