Skocz do zawartości

[stm32] jak wysłać 30 bitów?


flasher

Pomocna odpowiedź

Cześć, mam pytanie odnośnie SPI i wysyłki 30 bitów

1) czy mogę wysłać 4 * po 3 bajty + 1 * 6 bitów pod rząd?

2) czy do takiej wysyłki potrzebuję DMA?

3) czy wysyłka w sposó” przedstawiony poniżej będzie ok?

SPI_I2S_SendData(SPI1, 0xFF); // pierwsze 8 bitów 
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1, 0xFF); // drugie 8 bitów 
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1, 0xFF); // trzecie 8 bitów 
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1, 0x3F); // ostatnie 6 bitów 
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);

Byłbym wdzięczny za wszelkie komentarze.

Link do komentarza
Share on other sites

Czy chcesz wysłać 30 bitów o różnych wartościach?
Dzięki za odpowiedź. Chciałbym wysłać równe 30 bitów o różnych wartościach, a w przedstawionym przykładzie chodziło mi o wysłanie równe 30 bitów.

W przedstawiony przeze mnie sposób wyśle 32 bity?

Link do komentarza
Share on other sites

Twój kod wyśle 32 bity, jesli domyślnie masz ustawione, że SPI przyjmuje 8 bitów. Jednak w STM32 możesz przestawić ile bitów ma wysyłać SPI w przedziale 4-16 więc możesz np wysłać 2 razy po 15 bitów. I DMA oczywiście też możesz do ego wykorzystać

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

A może napiszesz nam tutaj co ty tak naprawdę próbujesz zrobić? SPI ma ustandaryzowane wielkości słów (8, 16, 32 bitów), więc skąd ci się wzięła potrzeba wysłania akurat 30?
Chciałbym zrozumieć jak wysłać równe 30 bitów 🙂 W celach czysto edukacyjnych. Zaczynam drogę z STM i zastanawiam się czy można ustawić różną długośc ramki (np 30, 70, 91 itp.)
Link do komentarza
Share on other sites

To może w celach czysto edukacyjnych poczytaj najpierw specyfikację protokołu SPI?

Ale o co Ci chodzi z przeczytaniem dokumentacji protokołu? Wiele urządzeń wymaga zmodyfikowania ustawień typu ramki 9bitowe i to zależy od urządzeń z którymi chcemy pogadać. Jeśli w ten sposób kolega chce poćwiczyć coś - no to czemu nie? Podałeś, że ramki są standardowo zawsze 8,16,32 - błąd, zdarzają się inne. Jak pisałem - w STM32F0 SPI możemy ustawić na wysyłanie od 6 do 16 bitów danych.

Edit:

4 do 16 bitów oczywiście

Link do komentarza
Share on other sites

dambo, dzięki za komentarz wnoszący coś do dyskusji. Wspomniałeś że od 6 do 16 bitów - nie miałeś na mysli od 8 do 16 bitów?

W celach edukacyjnych na jednej płytce wysyłam z spi1 (master) na spi2(slave) i zastanawiam sie jak mogę wysłać na przykład wspomniane 9 bitów. W takim razie ustawiam SPI_DataSize_16b, a w slave obcinam do 9 bitów?

Link do komentarza
Share on other sites

Jak to zrobić na strukturkach z SPL/HAL Ci niestety nie podpowiem.

A czemu chcesz w SLAVE ucinać jakieś bity? Zawsze się dobiera to tak, żeby nie trzeba było robić tego typu operacji.

W dokumentacji F0 jest podane, że od 4 do 16 bitów można ustawić

Link do komentarza
Share on other sites

kolego, wiem do czego zmierzasz i znowu błędnie - oczywiście DMA nie można ustawić na 9 bitów, ale wtedy dane w pamięci trzyma się jako 16 bitowe i tak ustawia DMA, a SPI przy ustawieniu 9 bitowym i tak wyśle 9 bitów i wszystko będzie OK.

Link do komentarza
Share on other sites

No to powodzenia. Z tego, co widzę, to masz szeroki wybór opcji jeśli chodzi o długość słowa w SPI na STM32. Możesz wybrać 8 bitów albo 16 bitów. Z DMA masz jeszcze do wyboru 32 bity. Ale ja się na STM32 nie znam, nigdy go nie programowałem bezpośrednio (stm32duino się nie liczy). Jedyne, z czego mogę czerpać informacje, to ogólna wiedza o tym jak takie peryferia działają, jak są projektowane i ile sensu miałoby wysyłanie 30 bitów. Owszem, są wyświetlacze wymagające 9-bitowego SPI, są też urządzenia użyające 12 bitów -- ale obawiam się, że w tym przypadku przyjdzie to bit-bangować ręcznie.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.