Skocz do zawartości

[C] STM32F3, ILI9341, brak reakcji


Pomocna odpowiedź

Napisano

Witam.

Z obsługą SPI morduje się już bardzo długo i jestem na tyle zirytowany, że muszę poprosić o pomoc.

Korzystam z płytki STM32F3 discovery, Atollic True Studio oraz bibliotek HAL. Chce nauczyć się obsługiwać SPI, pod ręką mam wyświetlacz oparty na ILI9341, więc od tego zaczynam.

W załączniku wysyłam pliki z projektem. Funkcja TM_ILI9341_Init() inicjuje wyświetlacz i ma go wypełnić kolorem czerwonym, jednak ekran cały czas jest biały.

Ktoś może mnie nakierować dlaczego wyświetlacz nie działa?

Klik1 lub

Klik2

Moje przypuszczenia to:

void TM_ILI9341_SendCommand(uint8_t data) {
ILI9341_WRX_RESET;
ILI9341_CS_RESET;
HAL_SPI_Transmit(&hspi2, data, sizeof(data), 5000);
//TM_SPI_Send(ILI9341_SPI, data);
ILI9341_CS_SET;
}

Czy zapis sizeof(data) jest poprawny w tym wypadku?

Dziękuje, pozdrawiam Kamil

pod ręką mam wyświetlacz oparty na ILI9341

Masz 100% pewności, że wyświetlacz jest oparty właśnie o ten sterownik? Chińczycy potrafią robić głównie kopiuj wklej i sam niedawno spotkałem się z tym, że wszystkie sprzedawane wyświetlacze były oparte o ILI9341 choć prawda była zupełnie inna.

Nie mogę znaleźć żadnego przykładu pod F3 discovery więc pewności nie mam, jednak sprzedający ma same pozytywy.. Chwile temu walczyłem z wyświetlaczem od nokii - na softowym SPI działało, na sprzętowym nie. Dlatego sądzę, że problem jest z programem i poprostu coś źle konfiguruję.

To typowy chiński wyświetlacz, czy ma ILI9341 tego nie wie nikt 😉. Biały wyświetlacz to brak poprawnej inicjalizacji. Wiem, że są gotowe kody na arduino, które odczytują z rejestrów wyświetlacza numer oznaczający typ sterownika. Spróbuj może jakiegoś gotowca na arduino.

Mam z wyglądu bardzo podobny (1,8") i podpinałem go pod Arduino i Raspberry Pi. Na obu śmigał po SPI. No ale podobieństwo wizualnie to trochę za mało do rzeczowej analizy problemu 🙂

Wykluczyłem problem sprzętowy. Mam też LCD PCD8544. Na takim kodzie:

void WriteSPI(unsigned char data)
{
unsigned char i;
for(i=0;i<8;i++){
	if((data&0x80)==0x80)
		SetBit(DATA);
	else
		ClrBit(DATA);
	SetBit(CLK);
	ClrBit(CLK);
	data<<=1;
}
}

Na pinach które wykorzystuje sprzętowe SPI wszystko działa. Po przepisaniu kodu do postaci:

void WriteSPI(unsigned char data)
{
uint8_t dane;
dane=(uint8_t)data;
  switch(HAL_SPI_Transmit(&hspi2, dane, sizeof(data), 5000))
  {
    case HAL_BUSY: HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8,GPIO_PIN_SET); break;
    case HAL_ERROR:HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9,GPIO_PIN_SET);break;
    case HAL_TIMEOUT:HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10,GPIO_PIN_SET) ; break;
    case HAL_OK:HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11,GPIO_PIN_SET) ; break;
  }


}
void LCDInit(void)
{
(...)
WriteCmd(0x21);//komendy rozszerzone
(...)
}

Ekran nie działa.

🙁

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...