STM32 HAL & RTOS

Vse kar je v povezavi z ARM-Cotrex-M procesorji. Sem spada tako HW kot SW.

Moderator: tilz0R

STM32 HAL & RTOS

OdgovorNapisal/-a MareBozo » 13 Mar 2018, 11:31

Pozdravljeni.

Zanima me kaj uporabljate za STM32 "HW abstraction Lib" in kateri RTOS vsebuje "dovolj" dosledno inplementacijo HAL-a za te družine.
Dolgo dolgo nazaj sem driverje za večino periferij pisal sam (za F1 serijo 7 let nazaj - ker ST še ni ponujal nekih driverjev). Sedaj vem, da ST ponuja knjižnice (cube / HAL) ampak kolikor sem jih videl ... :o :_CR so bolj samokolnica brez kolesa.
Obstajajo tudi druge alternative? Nagibam se k F4 in F7 seriji.

Kako je z RTOS-i? Kaj uporabljate?
MareBozo
 
Prispevkov: 49
Pridružen: 03 Feb 2016, 17:34
Zahvalil se je: 21 krat
Prejel zahvalo: 7 krat
Uporabnika povabil: Dorijan
Število neizkoriščenih povabil: 2

Re: STM32 HAL & RTOS

OdgovorNapisal/-a tilz0R » 13 Mar 2018, 14:51

RTOS:
- FreeRTOS je podprt v Cube knjižnici, Keil RTX, ... itd
- Nobeden free ne vsebuje ST HW abstrakcije

HAL:
Driver za periferijo boš moral sam napisati, če HAL ni to kar iščeš. V tem primeru imaš LL driverje, ki so popolnoma low (praktično pri registrih) in potem moraš sam poskrbeti vse sam, da pohandlaš flage.

Bom pa vesel, da razložiš "samokolnica brez kolesa". Predlagam, da poveš kaj bi spremenil. Vedno je čas za spremembe.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1480
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 362 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: STM32 HAL & RTOS

OdgovorNapisal/-a MareBozo » 14 Mar 2018, 00:27

Hvala za odgovor.
Mogoče sem bil slišati kanček žaljiv kar ni bil moj namen.
Vidim, da bom moral malo še pogledati za konkretne predloge ker so se HAL-i precej spremenili od kar sem jih nazadnje uporabljal.
Če se nahitro spomnim nekaj stvari (lahko da so sedaj drugačne...):
Klical sem funkcijo za sprejem podatkov kot spi slave in ostal notri čeprav sem uporabljal IRQ mode ali DMA. Smiselno bi bilo nastavit state driverju in definirati call back....recimo...
I2C slave si moral v naprej nastavit dolžine podatkov.
Raje bi mel da na evente kot so start,addr,restart,stop.... Definiraš callback. Zdeli so se mi nekako "v kalupu".
Enostavne stari enostavne....malo bolj zavite zadeve, skoraj nerešljive (kot mi tudi deluje arduino).
Določene periferije so kljub prenosu preko DMA ostajale v funkcijah in ala pulling čakale da se prenosi končajo. Paralelna izvajanja so bila praktično nemogoča.

Seveda ko se bom resno (ponovno) spopadel s STM32 vam z veseljom napisem kakšno natančnejšo kritiko.... Zgorje je bilo bolj pisano na pamet, kolikor se spomnim začetnih implementacij.
MareBozo
 
Prispevkov: 49
Pridružen: 03 Feb 2016, 17:34
Zahvalil se je: 21 krat
Prejel zahvalo: 7 krat
Uporabnika povabil: Dorijan
Število neizkoriščenih povabil: 2

Re: STM32 HAL & RTOS

OdgovorNapisal/-a mucek » 14 Mar 2018, 08:45

STM je v zadnjem casu naredil res veliko, kar se tice knjiznjic (da low level driverjev niti ne omenjam! ;) ). Ce si se s tem mucil pred par leti, je zadeva zdaj povsem drugacna, se ti splaca pogledati ... ;)
Drugace so bili v nekaterih knjiznjicah (huh, da ne omenjam zacetkov s CubeMX) res felerji in nelogicnosti, ampak se zadeva lepo pegla in gre imho v pravo smer ... Ce zelis imeti zadevo pregledno in pod kontrolo pa so low level driverji to, kar isces ...
... lahko pa se tudi motim ...
Uporabniški avatar
mucek
 
Prispevkov: 1421
Pridružen: 18 Jan 2015, 21:20
Kraj: Ljubljana
Zahvalil se je: 50 krat
Prejel zahvalo: 393 krat
Uporabnika povabil: s54mtb
Število neizkoriščenih povabil: 72

Re: STM32 HAL & RTOS

OdgovorNapisal/-a MareBozo » 04 Okt 2018, 14:56

@: tilz0R

Hitro vprašanje. Na hitro maoram en demo skup sestaviti. Gledam te HAL funkcije... konkretno HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
A to pomeni da zadevao nastaviš ampak moraš vedeti kako dolg string po uartu pričakuješ da se izide?? .. drugače čakaš in čakaš?
MareBozo
 
Prispevkov: 49
Pridružen: 03 Feb 2016, 17:34
Zahvalil se je: 21 krat
Prejel zahvalo: 7 krat
Uporabnika povabil: Dorijan
Število neizkoriščenih povabil: 2

Re: STM32 HAL & RTOS

OdgovorNapisal/-a tilz0R » 04 Okt 2018, 15:08

Dma receive nastavi registre da ce pride byte, ga dma prenese v memory. Funkcija ne blokira.

Moraš pa vedeti koliko jih sprejeti, preden boš callback dobil od interrupta, da je konec.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1480
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 362 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: STM32 HAL & RTOS

OdgovorNapisal/-a MareBozo » 05 Okt 2018, 09:22

ufff...
1.)
Ok po občutku. Če nastavim sprejem 1B, zato da sprejemam en char po char (ker nevem koliko B bom sprejel), v call back funkciji ponastavlam sprejem in char "filam" v queue (izvedba bufferja)... IT ali DMA? kateri je hitrejši? oz. katera funkcija se hitreje vrti? Če naglas razmišljam je dilema v tem da pri IT pogleda flage, shrani char in vklopi nazaj state machine in periferijo, pri DMA mora pa še DMA nastavljati....
2.) gleda ta black-magic v HALu in klicanje callbackov. Če pravilno razumem morem narediti lastno funkcijo ki ima identično ime kot weak funkcija v HALu (void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)) ter izvesti handlanje za vse UARTe ki jih uporabljam? Je potrebno kako preko includa še dodat hal-u path do moje funkcije ali se najdejo?
3.) konfiguracija v Cube.... UART kot LIN. Kaj tukaj nastavi? Samo configuracijo BREAK signala ali še kaj?
MareBozo
 
Prispevkov: 49
Pridružen: 03 Feb 2016, 17:34
Zahvalil se je: 21 krat
Prejel zahvalo: 7 krat
Uporabnika povabil: Dorijan
Število neizkoriščenih povabil: 2

Re: STM32 HAL & RTOS

OdgovorNapisal/-a tilz0R » 05 Okt 2018, 09:34

@MareBozo.

Najbolj efektiven sprejem na UART-u je zagotovo DMA, pa ne 1 char in vsakič ponastavljanje, pač pa uporabiš različne možne rešitve. Recimo jaz osebno vedno naredim tako:

- Imam receive buffer, v katerega piše LE DMA, ta je velikosti (ponavadi) 2^n bytov, recimo 32 ali 64.
- DMA nastavim na circular mode in vključim half-transfer in transfer-complete interrupte
- UART-u nastavim IDLE line interrupt (oz. če ga ni na voljo, je na voljo RTO). Če takšna funkcionalnost ni možna, potem je potrebno delati polling če je kaj novega.
- Če se zgodi IDLE line interrupt, pomeni, da je UART linija neaktivna in je mogoče prenos na RX končan in ga teoretično lahko takoj obdelam

Potem pa delam akcije glede na dogodke.

- Če se sproži half-transfer interrupt, potem vem, da imam veljavne podatke na relaciji [prejšnji_pointer_v_arrayju do sredina_bufferja]
- Če se sproži transfer-complete interrupt, potem vem, da imam veljavne podatke na relaciji [prejšnji_pointer_v_arrayju do konec_bufferja]
- Će se sproži IDLE line interrupt od UART-a, potem vem, da imam veljavne podatke na relaciji [prejšnji_pointer_v_arrayju do trenutnega_DMA_pointerja].

Ob vsakem dogodku lahko te podatke takoj obdelam, ali pa le nastavim zastavico da je treba nekaj delati, in to naredim v main datoteki. Paziti moraš le, da obdeluješ podatke hitreje, kot jih DMA lahko zapisuje. Od tega je odvisen baudrate, kompliciranost programa in velikost bufferja za DMA.

Tako moraš delati, če hočeš doseči teoretično hitrost UART-a v real-life, kot piše v datasheetu :)
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1480
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 362 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: STM32 HAL & RTOS

OdgovorNapisal/-a MareBozo » 05 Okt 2018, 09:49

:) OK OK :) to je že pisanje driverja. Ko bo čas za to bom verjetno kar sam šel iz nule ali iz LL nivoja delat. Sedaj moram samo nekaj na hitro skup sestavit. za enkrat bom pomojem IT na 1B naredu pa oud malo spustil :)

Hvala za enkrat.

Aja.. Call back & LIN iz prejšnega posta?
MareBozo
 
Prispevkov: 49
Pridružen: 03 Feb 2016, 17:34
Zahvalil se je: 21 krat
Prejel zahvalo: 7 krat
Uporabnika povabil: Dorijan
Število neizkoriščenih povabil: 2

Re: STM32 HAL & RTOS

OdgovorNapisal/-a tilz0R » 05 Okt 2018, 09:50

2) DA
3) Odvisno od družine. Predlagam da pogledaš kaj se v export kodi zgodi.
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1480
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 362 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255

Re: STM32 HAL & RTOS

OdgovorNapisal/-a MareBozo » 05 Okt 2018, 10:01

tenx!
MareBozo
 
Prispevkov: 49
Pridružen: 03 Feb 2016, 17:34
Zahvalil se je: 21 krat
Prejel zahvalo: 7 krat
Uporabnika povabil: Dorijan
Število neizkoriščenih povabil: 2

Re: STM32 HAL & RTOS

OdgovorNapisal/-a tilz0R » 21 Okt 2018, 13:41

MareBozo,

tukaj opis moje ideje in 4 exampli za različne use-case-e.
https://github.com/MaJerle/STM32_USART_DMA_RX
Knowledge sharing is people' caring., T. MAJERLE
Uporabniški avatar
tilz0R
 
Prispevkov: 1480
Pridružen: 18 Jan 2015, 00:12
Kraj: Črnomelj
Zahvalil se je: 190 krat
Prejel zahvalo: 362 krat
Uporabnika povabil: s56rga
Število neizkoriščenih povabil: 255


Vrni se na ARM-Cortex-M

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost