Skocz do zawartości
Komentator

Kurs STM32 F4 - #10 - Obsługa SPI, wyświetlacz OLED

Pomocna odpowiedź

Witam serdecznie

Mam pytanie odnośnie kodu.

W przypadku gdy sam wpiszę kod po dołączeniu bibliotek po zbudowaniu projektu generowany jest błąd jak niżej

W przypadku kompilacji projektu pobranego ze strony kursu błędy jak jak niżej

Czy ktoś może wie o co chodzi.

Pozdrawiam

PS. Wszystko działa. Potraktujcie ten wpis jako marudzenie NOBA

Pozdrawiam

Udostępnij ten post


Link to post
Share on other sites

Witam!

Ktoś ogarnia tę transmisję SPI z wykorzystaniem HAL? Nie mogę się połączyć z żyroskopem L3GD20, który znajduje się na omawianej płytce Discovery. Niestety powierzchowne zaprezentowanie tematu z wykorzystaniem gotowych bibliotek nie pomaga mi w ogarnięciu SPI.

1. Ustawiam pin 'Chip select' tak by wybrać dane urządzenie

2. Wysyłam bajt adresu rejestru

3. Wysyłam żądanie odczytu i... dostaję wartość 0, chociaż funkcje HAL_SPI_Transmit i HAL_SPI_Receive zwracają status HAL_OK

4. Wystawiam z powrotem jedynkę na CS.

#define L3GD20_CS_LOW		HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET)
#define L3GD20_CS_HIGH		HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET)
#define L3GD20_REG_CTRL_REG1		0x20

//(...)

while (1) {
L3GD20_CS_LOW;

/* Send address with read command */

Tx = HAL_SPI_Transmit(&hspi1, L3GD20_REG_CTRL_REG1, 1, 1000 );
/* Read data */
Rx = HAL_SPI_Receive(&hspi1, &GyroXYZ[0], 1, 1000 );

/* CS high */
L3GD20_CS_HIGH;
}

Żyroskop leży podpięty właśnie do spi1 - do pinów PA5, PA6 i PA7, CS znajduje się na pinie PE3, tak też te wyjścia skonfigurowałem w cube.

Co robię nie tak? Przecież to powinno być banalne.

Udostępnij ten post


Link to post
Share on other sites

Miałem ten sam problem co kolega @Oldman podaję rozwiązanie dla potomnych.

Problem polegał na tym, że brakowało pliku mxconstants.h, plik ten zawierać ma dyrektywy #define z nazwami używanych przez nas w projekcie pinów. W moim przypadku definicje te zawierały się w pliku main.h i to włąśnie tan plik zamiast mxconstants.h załączyłem w LIB_config.h co rozwiązało problem.

Być może spowodowane to było jakąś aktualizacją w CubeMX albo coś i teraz plik mxcopnstatnts już nie jest generowany.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Witam,
Szukam pomocy, przy obsłudze tego wyświetlacza OLED,

Kompilacja nie wyrzuca mi żadnych błędów poza jednym warningiem: passing "char [13]" to parametr of type "const uint8_t *" (aka "const unsigned char *") convents between pointers to integer types with different sign", w funkcji ssd1331_display_string.

Rozumiem, że to jakieś problemy z rzutowaniem, ale nawet po zakomentowaniu tej linijki i wgraniu programu na płytkę, na wyświetlaczu każdy pixel ma losowy kolor, więc nie działą funkcja ssd1331_clear_screen(BLACK); podobnie ssd1331_draw_line().

Wnioskuję z tego, że komunikacja po SPI z wyświetlaczem nie działa prawidłowo, czy ktoś ma jakiś pomysł, co mogło to spowodować? Miał podobny przypadek? Podobna sytuacja ma się po wgraniu gotowego programu załączonego do kursu.

Dodam, że używam Keila, dołączam projekt.

Dziękuję z góry za pomoc. 😉

07_SPI_OLED.rar

Udostępnij ten post


Link to post
Share on other sites

Grados, witam na forum 🙂 Zacznijmy o kwestii sprzętowych, czy na pewno używasz dokładnie takiego wyświetlacza jak znajduje się w zestawach do tego kursu? Pytam, ponieważ wiele już było przypadków, gdy sprzęt jednak nie był taki sam, co generowało później różne problemy (dotyczy to ogólnie wszystkich kursów) 😉

Udostępnij ten post


Link to post
Share on other sites

Witam!

Tak, tak, sprzęt jest z zestawu dedykowanego do tego kursu oczywiście.

Problem rozwiązany, ponieważ był on mi potrzebny do istniejącego projektu, gdzie zainicjowana była praca paru peryferiów, musiały one w jakiś sposób uniemożliwiać prawidłowe funkcjonowanie interfejsu SPI1, po zmianie na SPI2 w CubeMX i w bibliotekach (dokładnie w LIB_Config.h) wszystko zaczęło działać prawidłowo 🙂

Udostępnij ten post


Link to post
Share on other sites

Grados, super, że udało się rozwiązać zagadkę! Dzięki za podzielenie się rozwiązaniem - na pewno przyda się komuś w przyszłości 🙂

Udostępnij ten post


Link to post
Share on other sites

Witam, program nie chce mi się skompilować, wyświetlają się błędy że nie można znaleźć pliku nagłówkowego. Miał z was ktoś coś podobnego?

Udostępnij ten post


Link to post
Share on other sites

zb111112, próbowałeś dodać pliki do projektu raz jeszcze (nie chodzi o wklejania do katalogu, tylko o "dodanie do projektu"), wyczyścić projekt i skompilować cały projekt od nowa?

Udostępnij ten post


Link to post
Share on other sites

Mógłby mi ktoś pomóc z połączeniem jednocześnie ekranu OLED i używaniem UART? Chciałam wpisywać dane przez UART i wyświetlać na ekranie, ale niestety nie działają mi te dwie rzeczy jednocześnie... Jak działa mi UART (wysyłanie ciągu znaków) to nie świeci mi w ogóle ekran. Wszystko mam skonfigurowane jak w kursach 🙁 Wcześniej działał mi sam ekran, a UART z kolei nie. Robiłam już kilka projektów, testów i po prostu nie wiem co jest tego przyczyną. One się jakoś ze sobą kłócą czy co? :/

Udostępnij ten post


Link to post
Share on other sites

Mistress9, najlepiej będzie jeśli założysz osobny temat i wkleisz swój kod, który miałby wykorzystywać oba peryferia. Ciężko coś doradzić bez znajomości Twojego programu oraz połączeń. Do tej pory nie kojarzę, aby ktoś inny zgłaszał takie problemy.

Udostępnij ten post


Link to post
Share on other sites

Witajcie,
długo szukałem odpowiedzi, ale nie znalazłem, a własnej dedukcji jeszcze nie do końca ufam.

Czy dla wyrażenia zapisanego za pomocą bibliotek ST:

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);

w bibliotekach HAL odpowiednikiem jest:

while (__HAL_SPI_GET_IT_SOURCE(&hspi1, SPI_FLAG_TXE) == RESET); ?

I analogicznie:

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);

while (__HAL_SPI_GET_IT_SOURCE(&hspi1, SPI_FLAG_RXNE) == RESET); ?

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Witam,

Proszę o pomoc, podczas kompilacji wyrzuca mi taki błąd: "pointer targets in passing argument 3 of 'ssd1331_display_string' differ in signedness [-Wpointer-sign]" dla linii kodu:  ssd1331_display_string(0, 0, "Hello Word", FONT_1608, BLUE);

Co to może być? Zmieniałem z SPI1 na inne jak kolega Grados, ale nic nie pomogło. Wyświetlacz nie ma tu znaczenia, bo kompilacja nie przechodzi, więc coś programem musi być nie tak.

 

image.thumb.png.2584e83d4773e90c77d82b8e161c4d3f.png

Edytowano przez elektrokam92

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Cześć

Warning o którym pisze kolega elektrokam92 można wyeliminować robiąc w wywołaniu funkcji rzutowanie na oczekiwany typ:

(const uint8_t*)”Hello world!”

po dodaniu rzutowania nie mam żadnych warningow/błędów, program kompiluje się bez problemów (z załączonymi bibliotekami), ale z wyświetlaczem nie dzieje się nic, próbowałem zmienic kolor czyszczenia tła na RED, żeby sprawdzić czy ta funkcja działa, ale to też nie przyniosło efektu. Czy ktoś może potwierdzić, że postępując dokładnie według kursu w sierpniu 2018 roku wszystko zadziałało? Nie wiem czy mam dalej szukać mojej pomyłki, czy od czasu publikacji coś się zmieniło.

Edytowano przez maciejzj
  • Lubię! 1
  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Dzięki za podpowiedź, masz rację, zapomniałem, że tak można zrobić, po rzutowaniu kompilacja przechodzi poprawnie. Ja mam inny wyświetlacz i nie działa mi ta biblioteka, ale ściągnąłem inną pod mój jednokolorowy i udało mi się uruchomić po paru przeróbkach. 

 

Udostępnij ten post


Link to post
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!

Gość
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...