Fórum témák

» Több friss téma
Fórum » ARM - Miértek hogyanok
 
Témaindító: gtk, idő: Jún 26, 2007
Lapozás: OK   146 / 147
(#) HiMen válasza csatti2 hozzászólására (») Nov 1, 2019 /
 
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.
(#) cross51 válasza rolandgw hozzászólására (») Nov 1, 2019 /
 
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)
(#) csatti2 válasza HiMen hozzászólására (») Nov 1, 2019 / 1
 
Például az olcsó blue pill-t. Link
(#) csatti2 válasza cross51 hozzászólására (») Nov 1, 2019 /
 
Ö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 ).
(#) cross51 válasza csatti2 hozzászólására (») Nov 1, 2019 /
 
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.
(#) HiMen válasza csatti2 hozzászólására (») Nov 1, 2019 /
 
Nagyon szuper! Köszi!

Az Arduino IDE-t már ismerem, nagyon örülök, hogy az STM32 -is megy vele!
A
Idézet:
„CubeMX - Truestudio”
vagy a
Idézet:
„Keil”
(többről egyenlőre nem hallottam) nyújt valami többet amiért érdemes lenne beletanulnom?
(#) benjami válasza HiMen hozzászólására (») Nov 1, 2019 / 1
 
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.
(#) HiMen válasza benjami hozzászólására (») Nov 1, 2019 /
 
Meg vagyok győzve
(#) vargham válasza benjami hozzászólására (») Nov 2, 2019 /
 
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.
(#) cross51 válasza HiMen hozzászólására (») Nov 2, 2019 / 2
 
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ő".
(#) cross51 válasza csatti2 hozzászólására (») Nov 2, 2019 /
 
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?
(#) csatti2 válasza cross51 hozzászólására (») Nov 2, 2019 /
 
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.
(#) csatti2 válasza cross51 hozzászólására (») Nov 7, 2019 /
 
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).
(#) vargham válasza csatti2 hozzászólására (») Nov 7, 2019 /
 
Tudsz leírást linkelni? Kösz.
(#) cross51 válasza csatti2 hozzászólására (») Nov 7, 2019 /
 
Ö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.
(#) csatti2 válasza vargham hozzászólására (») Nov 8, 2019 / 1
 
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.
(#) rolandgw hozzászólása Nov 21, 2019 /
 
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.
(#) rolandgw válasza rolandgw hozzászólására (») Nov 22, 2019 / 2
 
Az MX-ben hibáztam. A végén van a jó beállítás:
Bővebben: Link
(#) jefflynn hozzászólása Dec 2, 2019 /
 
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?
(#) icserny hozzászólása Dec 3, 2019 /
 
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?

main.c
    
(#) kapu48 válasza icserny hozzászólására (») Dec 3, 2019 /
 
Én hiányolom az ADC_ClearFlag(ADC1, ADC_FLAG_EOC); sort

Bővebben: Link
(#) icserny válasza kapu48 hozzászólására (») Dec 3, 2019 /
 
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.
(#) kapu48 válasza icserny hozzászólására (») Dec 3, 2019 /
 
A példa 53. sorában pedig törli:
  1. ...
  2. while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)){}
  3. //read ADC value
  4. AD_value=ADC_GetConversionValue(ADC1);
  5. //clear EOC flag
  6. ADC_ClearFlag(ADC1, ADC_FLAG_EOC);
  7. ...
(#) icserny válasza kapu48 hozzászólására (») Dec 3, 2019 /
 
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...
(#) icserny válasza icserny hozzászólására (») Dec 3, 2019 /
 
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...
(#) icserny válasza icserny hozzászólására (») Dec 3, 2019 /
 
Na mondom a megoldást! (Jól eltoltam vele két napot!!!)
  1. void ADC1_Init() {
  2.   RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;    // ADC1 órajel engedélyezés
  3.   RCC->CFGR &= ~RCC_CFGR_ADCPRE_0;       // ADC prescaler = 6
  4.   RCC->CFGR |= ~RCC_CFGR_ADCPRE_1;       // ADCCLK = 72/6 = 12 MHz
  5.   . . .


Itt az utolsó utasításban nem kellett volna hullámvonalat tenni (tilde)! Tehát az utolsó sor helyesen:
  1. RCC->CFGR |= RCC_CFGR_ADCPRE_1;       // ADCCLK = 72/6 = 12 MHz
(#) cross51 hozzászólása Dec 5, 2019 /
 
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)
(#) gtk hozzászólása Dec 11, 2019 /
 
Sziasztok,

HAL SPI.
Keszitettem egy 16b-es valtozatot a HAL_SPI_Transmit( )-bol.

  1. HAL_SPI_Transmit_16b(SPI_HandleTypeDef *hspi, uint16_t *pData, uint16_t Size, uint32_t Timeout)


A lenyegi resze:

Az Init-ben levo, ide vonatkozo:
DSIZE = 16b.

  1. hspi5.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;


Transmit( ):

  1. /* Transmit data in 16 Bit mode */
  2.   if (hspi->Init.DataSize > SPI_DATASIZE_8BIT)
  3.   {
  4.       /* Transmit data in 16 Bit mode */
  5.       while (hspi->TxXferCount > 0U)
  6.       {
  7.         /* Wait until TXE flag is set to send data */
  8.         if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE))
  9.         {
  10.                 if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXTF)) {
  11.                  __HAL_SPI_CLEAR_TXTFFLAG(hspi);
  12.                 }
  13.                                        
  14.                 *((__IO uint16_t *)&hspi->Instance->TXDR) = (*(uint16_t*)pTxBuffPtr);
  15.                                        
  16.                 pTxBuffPtr ++;
  17.                 hspi->TxXferCount--;
  18.                                        
  19.         }
  20.         else
  21.         {
  22.           /* Timeout management */
  23.           if ((Timeout == 0U) || ((Timeout != HAL_MAX_DELAY) && ((HAL_GetTick() - tickstart) >=  Timeout)))
  24.           {
  25.             /* Set the error code and execute error callback*/
  26.             SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_TIMEOUT);
  27.             HAL_SPI_ErrorCallback(hspi);
  28.  
  29.             /* Set the SPI State ready */
  30.             hspi->State = HAL_SPI_STATE_READY;
  31.  
  32.             /* Process Unlocked */
  33.             __HAL_UNLOCK(hspi);
  34.             return HAL_ERROR;
  35.           }
  36.         }
  37.       }
  38.   }
  39.  
  40.         /* wait for Tx data to be sent */
  41.   if ( (errorcode = SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_EOT, SPI_FLAG_EOT, SPI_DEFAULT_TIMEOUT, tickstart)) != HAL_OK)
  42.   {
  43.     SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG);
  44.   }
  45.   else
  46.   {
  47.     __HAL_SPI_CLEAR_EOTFLAG(hspi);
  48.     __HAL_SPI_CLEAR_TXTFFLAG(hspi);
  49.   }


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:

  1. if ( (errorcode = SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_EOT, SPI_FLAG_EOT, SPI_DEFAULT_TIMEOUT, tickstart)) != HAL_OK)


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
(#) cross51 válasza gtk hozzászólására (») 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.
(#) gtk válasza cross51 hozzászólására (») Dec 11, 2019 /
 
Idézet:
„En a helyedben inkabb ar rxnet figyelnem az pontosan akkor fog it-t adni ha atment 16 bit.”
Nem ertem. It nem kell
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
Következő: »»   146 / 147
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu