Skocz do zawartości

STM32F407VET6 black board ILI9341 FSMC 16bit init LCD


virtualny

Pomocna odpowiedź

Jest taki zestaw oferowany między innymi na Aliexpress:

 02_VET605_TOP_BLACK.thumb.jpg.6dfba5a9c601153e8400ca47cc15d816.jpg

 

Oprócz tego można dokupić dedykowany do zestawu wyświetlacz, co ma wielki sens:

04_LCD_BLACK_01.thumb.jpg.d68297fee0966209966a29074699ac25.jpg

04B_VET6_BOARD_PLUS_LCD.thumb.jpg.59c44cfc2a672eaa580449c75d64fdd6.jpg

Z wielu powodów ma to sens, choćby że jest to znakomicie dopasowane, a LCD jest dołączone do 16 bitowej magistrali FSMC dzięki czemu wyświetlacz nie jest tragicznie wolny.

Schemat zestawu:

06_VET6_SCHEME.thumb.GIF.68bd1d2ba7658b3980e1c67d8e0fb8fa.GIF

 

Podstawowe właściwości zestawu:

1. Procesor STM32F407VET6 - max do 168MHZ, 512KB internal FLASH i 192KB internal static RAM, obudowa LQFP100

2. LCD 3.2 cala, rozdzielczość 320x200, FSMC 16bit sterownik ILI9341

Resztę dodatkowych użytków widać na schemacie i zdjęciu, dlatego pominę ich wyliczanie. Istnieją także inne wersje np. niegdyś sprzedawane przez sklep OMDAZZ, także wersje black z procesorem STM32F407ZE lub ZGT6 (LQFP144).

 

To co jest tutaj głównym celem, to sprawne skonfigurowanie i oprogramowanie wyświetlacza. Nie jest to może super łatwe, ale mając do dyspozycji CUBE, czyli graficzny interfejs do ustalenia ustawień, nie jest to także bardzo trudne. Konfiguracja procesora w CUBE wygląda tak:

00_CUBE_CONFIG.thumb.png.71d4ce73a519070783413930f2c549bd.png

 

Procesor jest ustawiony na 168MHZ i taktowanie z zewnętrznego kwarcu. Ustawienia FSMC są widoczne w CUBE, a dla uzupełnienia podam kod wynikowy inicjujący magistralę FSMC:

 

/* FSMC initialization function */
static void MX_FSMC_Init(void)
{
  FSMC_NORSRAM_TimingTypeDef Timing = {0};
  FSMC_NORSRAM_TimingTypeDef ExtTiming = {0};

  /** Perform the SRAM1 memory initialization sequence
  */
  hsram1.Instance = FSMC_NORSRAM_DEVICE;
  hsram1.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
  /* hsram1.Init */
  hsram1.Init.NSBank = FSMC_NORSRAM_BANK1;
  hsram1.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;
  hsram1.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM;
  hsram1.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16;
  hsram1.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE;
  hsram1.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
  hsram1.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
  hsram1.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
  hsram1.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE;
  hsram1.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
  hsram1.Init.ExtendedMode = FSMC_EXTENDED_MODE_ENABLE;
  hsram1.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
  hsram1.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE;
  hsram1.Init.PageSize = FSMC_PAGE_SIZE_NONE;
  /* Timing */
  Timing.AddressSetupTime = 15;
  Timing.AddressHoldTime = 15;
  Timing.DataSetupTime = 60;
  Timing.BusTurnAroundDuration = 0;
  Timing.CLKDivision = 16;
  Timing.DataLatency = 17;
  Timing.AccessMode = FSMC_ACCESS_MODE_A;
  /* ExtTiming */
  ExtTiming.AddressSetupTime = 9;
  ExtTiming.AddressHoldTime = 15;
  ExtTiming.DataSetupTime = 8;
  ExtTiming.BusTurnAroundDuration = 0;
  ExtTiming.CLKDivision = 16;
  ExtTiming.DataLatency = 17;
  ExtTiming.AccessMode = FSMC_ACCESS_MODE_A;

  if (HAL_SRAM_Init(&hsram1, &Timing, &ExtTiming) != HAL_OK)
  {
    Error_Handler( );
  }
}

 

Kolejnym poziomem jest "dogadanie się" z ILI9341 poprzez sterownik. Pominę tu jego program, jest on dostępny w załączonych źródłach.

Końcowy program w bin ma poniżej 5000 bajtów, i robi następująco:

1. Inicjalizuje systemclock na 168MHZ

2. Inicjalizuje GPIO i FSMC

3. Inicjalizuje LCD

4. Wypełnia ekran kolorem niebieskim, poniżej zdjęcie:

05_BLUE_SCREEN.thumb.JPG.080d01a38fe7a02231c8183754d08501.JPG

 

W załączeniu program z STM32CubeIDE: STM32F407VET6-BLACK-ILI9341-INIT.zip

 

Wersja na github z załączonymi plikami dokumentacji: 

STM32F407VET6-BLACK-ILI9341-INIT

 

Bardziej rozbudowaną wersję można znaleźć na moim githubie:

STM32F407VET6-BLACK-ILI9341-BENCHMARK

 

Działanie benchmarku można obejrzeć na youtube:

 

 

 

 

 

 

 

Edytowano przez virtualny
Link do komentarza
Share on other sites

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

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.