STM32 SPI

Martin Locker locker na vosrk.cz
Středa Červen 23 09:37:31 CEST 2021


Zdravím,

narazil jsem asi na moje nepochopení SPI s využitím DMA.

Mám následující úlohu:
1. ze zařízení, kde je STM32 (STM32F103) jako SPI slave periodicky vyčítám data (64B),
z nadřízeného systému je vyžádání dat iniciované na jednom pinu (vnější přerušení)
2. občas potřebuji poslat příkaz pro změnu chování (8B) do slave

Protože to STM32 je docela zaměstnané, chtěl jsme využít DMA pro SPI.
Pokud udělám jen to odesílání dat (DMA na TX, buffer 64B), tak to funguje ok.
Pokud zapnu DMA na RX (buffer 8B) i TX, tak pokud jen odesílám data - ok, pokud ale přijde příkaz shora, tj. přijmu těch 8B, tak se odesílání posune od těch 8B - očekávaný stav (zatím jsem to vyřešil tím, že přijímám také 64B, ale to je plýtvání časem).

Další pokus byl mít zapnuto DMA jen na příjem, pokud přijde požadavek na data, tak vypnu DMA na přijmu a nastavím DMA na vysílání (po odeslání to vrátím). Pokud pouze posílám data, tak ok. Jakmile však něco přijmu, tak se to nějak posune a první vysílaný znak je 0 a pak teprve následuje obsah tx bufferu.

Asi se tam do odesílacího registru dostane při tom zapnutí něco z toho přijmu. 
Jak toto řešit? Díky za připomínky.

S přáním pevného zdraví
Martin Locker

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20210623/3c022b46/attachment.html>


Další informace o konferenci Hw-list