Skocz do zawartości

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


Pomocna odpowiedź

Napisano

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

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

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