RE: Programování STM32 - přerušení

Tomas Dresler dresler na hw.cz
Úterý Říjen 15 11:01:06 CEST 2019


K tomu MODBUSu podotknu, ze novejsi STM32 mají timeout (tzv. Binary MODBUS) implementovany primo v UARTu v poctu bitu a IRQ, ale knihovna na to trochu kasle...

A IRQ na prijem znaku (třeba EOF nebo CR, LF) UART implementuje taky (-:

Hezky den

Tomas 

-----Original Message-----
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Jaroslav Buchta
Sent: Monday, October 14, 2019 9:44 PM
To: hw-list na list.hw.cz
Subject: Re: Programování STM32 - přerušení

S prijmem je to trosku tezke, driv jsem pouzival nastaveni prijmu jednoho znaku pres IT a v HAL_UART_RxCpltCallback to cpal to do bufferu, ma to velkou rezii. Ted pouzivam DMA s cyklickym bufferem, prijate znaky ocuchavam v periodicke obsluze a jsem spokojenejsi. Pokud se ceka na presny pocet znaku, tak by to bylo jednodussi, coz muze byt vas pripad. 
Jeste jde nastavit preruseni od timeoutu, nebo jak tomu rikaji, proste kdyz neprijde spojite dalsi znak. Ale obsluhu v HAL to nema, aspon u procesoru kde jsem to resil (MODBUS RTU, ta prodleva 3.5 znaku je peklo, na nacasovani padne jeden z casovacu, nic lepsiho neblokujiciho mne
nenapadlo) Taky bacha na chyby prijmu, chce to reagovat na HAL_UART_ErrorCallbacka nejak to obslouzit, aby se prijem spustil znovu. 
Ja bezne dam abort na vysilani i prijem, pockam par set ms a spustim prijem znovu. Stava se treba pri vypnuti/zapnuti pripojeneho zarizeni.
Do vlastnich .c souboru importuju vlastni hlavickovy soubor, kde mam zkopirovano vse z main.c a pridany vlastni hlavickove soubory. Ten pak importuju i do nekterych generovanych .c souboru Rozvetveni callback funkci nechavam v main, at je to pohromade. Deklarace handle promennych jsou myslim v hlavickovych souborech periferii.


Dne 14.10.2019 v 21:29 cizek.milan na seznam.cz napsal(a):
> Jasně, byl to ten překlep a pak slepota. To jsem si byl celkem jistý, že jsem to bral přes schránku (no asi v předchozí verzi).
>
> Mám další dotazy, obecně...
> Mým cílem je mít asi většinu programu mimo main.c, a tam volat jen pár metod z mého souboru.c, kde bude celá logika.
>
> Jak co nejčistěji v souboru.c pracovat s inicializovanými proměnnými jako huart1, adc...
> Jestli chápu správně, stačí mi na začátku mého souboru dát deklaraci těchto proměnných z main.c a přidat jim extern?
> Chci v mém souboru.c logovat na uart, takež do něj potřebuji dostat už inicializovaný uart z main.c, takto je to ok nebo je lepší cesta?
>
> A pak další dotaz, pokročil jsem k uartu, do kterého mi gps posílá nmea. Přerušení na příjem mám zapnutý.
> Chtěl bych do nějakého bufferu pravidelně kopírovat, co dostanu do RX.
> Dívám se do _it, ale je tu více funkcí k přesání, která by pro tento můj účel byla nejlepší __weak void HAL_UART_RxCpltCallback?
>
> Děkuji.
>
> M.
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz 
> http://list.hw.cz/mailman/listinfo/hw-list


_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list