flasher Napisano Grudzień 20, 2016 Udostępnij Napisano Grudzień 20, 2016 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 More sharing options...
dambo Grudzień 21, 2016 Udostępnij Grudzień 21, 2016 Ten sposób wyśle Ci 32 bity z czego 30 będzie jedynkami. O to dokładnie chodzi? Czy chcesz wysłać 30 bitów o różnych wartościach? Link do komentarza Share on other sites More sharing options...
flasher Grudzień 21, 2016 Autor tematu Udostępnij Grudzień 21, 2016 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 More sharing options...
dambo Grudzień 21, 2016 Udostępnij Grudzień 21, 2016 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 More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
deshipu Grudzień 21, 2016 Udostępnij Grudzień 21, 2016 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? Link do komentarza Share on other sites More sharing options...
flasher Grudzień 21, 2016 Autor tematu Udostępnij Grudzień 21, 2016 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 More sharing options...
deshipu Grudzień 21, 2016 Udostępnij Grudzień 21, 2016 To może w celach czysto edukacyjnych poczytaj najpierw specyfikację protokołu SPI? Link do komentarza Share on other sites More sharing options...
flasher Grudzień 21, 2016 Autor tematu Udostępnij Grudzień 21, 2016 To może w celach czysto edukacyjnych poczytaj najpierw specyfikację protokołu SPI?widze, że druga elektroda 😉 ➖ Link do komentarza Share on other sites More sharing options...
dambo Grudzień 21, 2016 Udostępnij Grudzień 21, 2016 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 More sharing options...
flasher Grudzień 21, 2016 Autor tematu Udostępnij Grudzień 21, 2016 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 More sharing options...
dambo Grudzień 21, 2016 Udostępnij Grudzień 21, 2016 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 More sharing options...
deshipu Grudzień 21, 2016 Udostępnij Grudzień 21, 2016 A jak już przeczytaj, to poszukaj DMA_InitStructure.DMA_PeripheralDataSize Link do komentarza Share on other sites More sharing options...
dambo Grudzień 21, 2016 Udostępnij Grudzień 21, 2016 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 More sharing options...
deshipu Grudzień 21, 2016 Udostępnij Grudzień 21, 2016 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 More sharing options...
dambo Grudzień 21, 2016 Udostępnij Grudzień 21, 2016 Nie mamy do wyboru tylko 8 i 16. Można wybrać dowolne z przedziału 4-16 i nic nie będzie trzeba ręcznie. Screen z dokumentacji: 1 Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »