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

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Pondělí Říjen 14 21:43:44 CEST 2019


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




Další informace o konferenci Hw-list