Skocz do zawartości

[C] inicjalizacja wyświetlacza LCD za pomocą STM32


Sakurazuka

Pomocna odpowiedź

Witam. Mam problem typowy dla początkującego. Otóż mam za zadanie obsłużyć wyświetlacz LCD JHD 162A za pomocą STM32 Discovery

W tym celu posłużyłem się kursem programowania STM32 z tego forum. Jednak, jak łatwo się domyślić nowicjusz coś zepsuł. Jedyny efekt, jaki osiągnąłem to czarne prostokąty w jednej z 2 linii wyświetlacza. Bardzo prosiłbym o sprawdzenie kodu i jeśli to możliwe polecenie jakiejś metody rozwiązania problemu lub użytecznej literatury.

porty RS, R/W i E naszego wyświetlacza podpiąłem do nóżek PA0, 1, 2

Porty DB0 - DB7 podpiąłem do nóżek PB0 - PB7

Poniżej kod, który udało mi się stworzyć...

void inicjalizacja_1(void)
{
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

   GPIO_InitTypeDef GPIO_RSRW;

   GPIO_RSRW.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
   GPIO_RSRW.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_RSRW.GPIO_Speed = GPIO_Speed_10MHz;
   GPIO_Init(GPIOB, &GPIO_RSRW);

   GPIO_ResetBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1);
   GPIO_WriteBit(GPIOB, GPIO_Pin_2, Bit_SET);
  // GPIO_ResetBits(GPIOB, GPIO_Pin_1);

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

   GPIO_InitTypeDef GPIO_A4_7;

       GPIO_A4_7.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;
       GPIO_A4_7.GPIO_Mode = GPIO_Mode_Out_PP;
       GPIO_A4_7.GPIO_Speed = GPIO_Speed_10MHz;
       GPIO_Init(GPIOA, &GPIO_A4_7);

    GPIO_WriteBit(GPIOA, GPIO_Pin_3 | GPIO_Pin_4, Bit_SET);
}

void inicjalizacja_2(void)
{
   //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

   GPIO_InitTypeDef GPIO_RSRW;

   GPIO_RSRW.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
   GPIO_RSRW.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_RSRW.GPIO_Speed = GPIO_Speed_10MHz;
   GPIO_Init(GPIOB, &GPIO_RSRW);

   GPIO_ResetBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1);
   //GPIO_ResetBits(GPIOB, GPIO_Pin_1);

   //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

   GPIO_InitTypeDef GPIO_A4_7;

       GPIO_A4_7.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
       GPIO_A4_7.GPIO_Mode = GPIO_Mode_Out_PP;
       GPIO_A4_7.GPIO_Speed = GPIO_Speed_10MHz;
       GPIO_Init(GPIOA, &GPIO_A4_7);

       GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5);
       GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);

       GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);

       GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);

       GPIO_WriteBit(GPIOA, GPIO_Pin_7, Bit_SET);

       GPIO_ResetBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1);
       GPIO_ResetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
       GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_SET);
       GPIO_ResetBits(GPIOA, GPIO_Pin_4);
       GPIO_WriteBit(GPIOA, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7, Bit_SET);
}

void literka(void)
{


   GPIO_InitTypeDef GPIO_A4_7;

       GPIO_A4_7.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2 |GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
       GPIO_A4_7.GPIO_Mode = GPIO_Mode_Out_PP;
       GPIO_A4_7.GPIO_Speed = GPIO_Speed_10MHz;
       GPIO_Init(GPIOA, &GPIO_A4_7);


       GPIO_WriteBit(GPIOA, GPIO_Pin_2 |GPIO_Pin_3 | GPIO_Pin_5 |  GPIO_Pin_7, Bit_SET);


}



void Delay(volatile unsigned count) {
 while(count--);
}

W mainie:

Delay(10000000);
 inicjalizacja_1();
 Delay(10000000);
 inicjalizacja_1();
 Delay(10000000);
   inicjalizacja_1();
   inicjalizacja_2();
   literka();

Wszystko to wrzucone w szablon TrueStudio STM32 dla tej właśnie płytki.

Wiem, że pewnie popełniłem jakiś głupi, prostacki błąd. Mama nadzieję, że znajdzie się jednak ktoś, kto mi doradzi. Pozdrawiam

Link do komentarza
Share on other sites

Wielkie dzięki! Sprawdzę i poinformuję o efektach

EDIT

Na razie pusty ekran. Efektów brak

EDIT 2

Kod jest dobry. Po poprawieniu kilku lutów wszystko pięknie działa. Dzięki za pomoc. Temat do zamknięcia

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.