Skocz do zawartości

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


Pomocna odpowiedź

Napisano
html_mig_img
Jednym z podstawowych zagadnień w świecie elektroniki jest komunikacja pomiędzy układami scalonymi.W kolejnym artykule z serii o STM32 F4 zajmiemy się wyświetlaczem graficznym OLED. Wcześniej zapoznamy się z interfejsem SPI, który używany jest do komunikacji ze sterownikiem wyświetlacza.

UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.

Przeczytaj całość »

Poniżej znajdują się komentarze powiązane z tym wpisem.

Cześć

Obsługa OLED'a bardo przydatna, fajny ten kurs. Dzięki ponownie.

Mam tylko pytanko o extern przy funkcjach w pliku nagłówkowym SSD1331.h. Co to daje ? "Ciało" tych funkcji jest w pliku SSD1331.c, a więc w pliku "do pary".

gufim to właśnie jest częściowo opisane w artykule - jak dodać pliki bibliotek. Powinny być 2 pliki o takiej samej nazwie ale rozszerzeniach h i c czyli np biblioteka.h i biblioteka.c. Plik h to plik nagłówkowy (header), c to właściwe kody funkcji. W pliku c na początku piszesz #include "biblioteki.h",plik h dołączasz przez podobne #include "biblioteka.h"w głównym pliku (main.c) Pliki powinny się znajdować w odpowiednich folderach - pliki h w inc, pliki c w src. Dalej - co i w jakiej kolejności powinny zawierać biblioteki możesz zobaczyć otwierając kilka prostych bibliotek.

  • 4 tygodnie później...

Hej, przede wszystkim dzięki za super kurs 🙂

Mam pytanie do tego artykułu: niestety nie posiadam tego konkretnego wyświetlacza, więc próbuję użyć innego (tego samego, co w kursie STM32F1), ale w ogóle nie chce działać. Trochę nie rozumiem ostatniego parametru funkcji HAL_SPI_Transmit (parametr timeout). Czy mógłbyś może wyjaśnić, cóż to jest i jak to dobrać?

Poza tym, w ogóle fajnie by było, gdyby udało się rozbudować artykuł o chociaż krótki opis jak używać SPI jako takiego wykorzystując HAL (proste wysyłanie i odbieranie danych, bez używanie bibliotek do wyświetlaczy).

Pozdrawiam 😉

  • 2 tygodnie później...

Witam.

Jeśli istnieje taka możliwość to bardzo proszę o podanie wskazówek jak komunikować się przez

SPI, gdy dane należy wysłać pod wskazany adres (tak jak to było z akcelerometrem przez I2C).

Nie wiem gdzie zapisać adres, ponieważ funkcja HAL_SPI_Transmit() nie posiada takiego argumentu.

Z góry dziękuję i pozdrawiam:)

wskazany adres

Adres czego? Urządzenia? Przy SPI urządzenie wybiera się dedykowaną linią. Jeśli masz jakąś nietypową implementację i urządzenie wybiera się tak jak przy I2C to komunikacja powinna być opisana w datasheecie urządzenia które chcesz obsłużyć.

Przy kodzie do obsługi I2C muszę użyć następujących adresów:

TWI();

Wg datascheet przy SPI również muszę użyć adresu rejestru.

Jeśli to pomoże to chodzi o akcelerometr ADXL345.

Nie rozumiem Twojego problemu.

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

2. Wysyłasz bajt adresu rejestru

3. Wysyłasz bajt który chcesz zapisać pod adres wysłany w kroku 2.

EDIT: 4. Zwalniasz 'Chip select'

  • 1 miesiąc później...

Witam wszystkich,
chciałbym się dowiedzieć po co jest ten '&' w argumencie __DATA w funkcji :

#define __SSD1331_WRITE_BYTE(__DATA) HAL_SPI_Transmit(&hspi1, &__DATA, 1, 1000)
  • 1 miesiąc później...

Cześć 🙂

Czy są gdzieś biblioteki w HALu do wyświetlacza OLED (niebieski graficzny 1,3'' 128x64px) konkretnie chodzi mi o ten:

https://botland.com.pl/wyswietlacze-oled/4441-wyswietlacz-oled-niebieski-graficzny-13-128x64px-spii2c-proste-zlacza.html?search_query=oled&results=20

W dokumentacji do tego wyświetlacza są owszem te biblioteki (SSD1306) jednak są one w STD a w artykule nie bardzo zostało wyjaśnione jak przerobić te biblioteki na działające w HALu. Próbuję porównywać Wasz kod całego programu ze swoim, jednak pojawiają się dziwne błędy (głównie przy maskach/innych nazwach funkcji halowskich co nie do końca jest dla mnie zrozumiałe).

Pozdrawiam!

  • 1 miesiąc później...

Witam,

Od bardzo długiego czasu próbuję skomunikować się z akcelerometrem LSM303D przez SPI.

W rezultacie dostaję tylko odpowiedź "-1".

Przez I2C wszystko dobrze działa.

Będę bardzo wdzięczny za komentarz na temat sposobu w jaki staram się dokonać komunikacji:

Ustawienia w Cube:

Frame format: Motorola

Data size: 8 Bits

First Bit: MSB First

Baud Rate: 5.625 MBist/s

CPOL: HIGH

CPHA: 1 Edge

CRC Calculation: Disabled

NSS Signal Type: Output Hardware

Kluczowa część kodu:

 uint8_t adres1 = 0x20;
 uint8_t adres2 = 0x21;
 uint8_t Settings1 = 0b10010010;
 uint8_t Settings2 = 0b11100000;
 uint8_t adres_data_0 = 0x2A;
 uint8_t adres_data_1 = 0x2B;

HAL_SPI_Transmit(&hspi3, &adres1, 1, 1000);
HAL_SPI_Transmit(&hspi3, &Settings1, 1, 1000);
HAL_SPI_Transmit(&hspi3, &adres2, 1, 1000);
HAL_SPI_Transmit(&hspi3, &Settings2, 1, 1000);

 while (1)
 {
  HAL_SPI_TransmitReceive(&hspi3, &adres_data_0, &data_0, 1, 1000);
  HAL_SPI_TransmitReceive(&hspi3, &adres_data_1, &data_1, 1, 1000);

	  data = ((data_1<<8)|(data_0));
 }

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ę »
×
×
  • Utwórz nowe...