Pád programu by mohlo vysvetliť toto
https://electronics.stackexchange.com/q ... n-an-stm32
Máš obslúžený aj overrun interrupt?
A teraz ako k nemu dôjde. Nuž tak že v obsluhe prerušenia prijatia znaku v prípade prijatia znaku LF (mimochodom namiesto čísla 10 sa zvykne v C používať znaková konštanta '\n') tak začneš vysielať celý nabuffrovaný riadok. Ak v tejto dobe prídu dva znaky tak to spôsobí overrun nakoľko ten prvý prijatý už nič nevyberie.
Je nemúdre v prerušeniach vykonávať akékoľvek akcie ktoré trvajú dlhý čas. Takéto veci sa riešia práve cez buffre, stavové mašiny, semafóry, mutexy a vôbec to nie je jednoduché. Začal si poriadne zložitým problémom na začiatok.
-- Spojený príspevok 15 Feb 2020, 11:07 --
Ono ešte lepšie ako buffre je na tento problém kruhová fronta. Ak to chceš naozaj naprogramovať na STM tak by si to mal najprv pochopiť ako to pracuje. To znamená že by si mal úplne do detailu pochopiť napríklad ako to má urobené Arduino v knižnici Serial, vrátane toho ako hýbať tými ukazatelmi head a tail, tak aby to bolo atomické a aby sa ti nestratil pri príjme/vysielaní v prerušení a v hlavnej slučke ani byte.
(teda potrebuješ dve kruhové fronty, jednu na príjem, jednu na vysielanie).
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.