SPI a STM32F050C4

HUDA volny hudaklan na volny.cz
Pondělí Prosinec 16 09:40:19 CET 2013


Dobrý den,
narazil jsem na problém s SPI komunikací. Mám master zařízení,
které každou 1 ms posílá a zároveň čte 1 bajt po SPI.
Na to nemohu šáhnout.

STM je přepnuté jako slave a čte 8 bitů. Pokud to je vše OK,
tak komunikace běží tak jak má. Signál NSS je softvérově
nastaven do 0.

Ale po zapnutí napájení pro obě zařízení dojde k rozhození
synchronizace. STM dá interrupt od příjmu už po 7 bitu
a i vysílá bajt posunutý o 1 bit.
Vypadá to jakoby master zařízení naběhlo později a při náběhu
dalo na SCK lince nějaký pupík, který slave vyhodnotí jako
impuls hodin a tím se vše o 1 bit posune.

Potřeboval bych poradit, jak komunikaci zasynchronizovat.

Druhá otázka je na zápis do datového registru SPI.
Měl jsem zápis
   SPI1->DR = (uint8_t)0x8E;
Což je špatně, protože uklá do DR registru 2 bajty.
V příkladech od STM jsem našel 8 bitové ukládání
(upraveno)
globální proměnná
uint32_t SpiDtReg=((uint32_t)SPI1)+0x0c;

v interruptu zápis do DR registru
*(__IO uint8_t *) SpiDtReg = 0x8E;

Dá se to napsat nějak elegantněji (bez proměnné)?

Díky.
HUDA


Další informace o konferenci Hw-list