0

I have ILI9486 based tft display to initiate via 16bit FSMC. I did gpio, fsmc, and lcd initialization.

    // Interface Mode Control
    LCD_WRITE_CMD(0xb0);
    LCD_WRITE_DATA(0x00);
    // Interface Pixel Format, 16 bits / pixel
    LCD_WRITE_CMD(0x3A);
    LCD_WRITE_DATA(0x55);
    // PGAMCTRL(Positive Gamma Control)
    LCD_WRITE_CMD(0xE0);
    LCD_WRITE_DATA(0x0F);
    LCD_WRITE_DATA(0x1F);
    LCD_WRITE_DATA(0x1C);
    LCD_WRITE_DATA(0x0C);
    LCD_WRITE_DATA(0x0F);
    LCD_WRITE_DATA(0x08);
    LCD_WRITE_DATA(0x48);
    LCD_WRITE_DATA(0x98);
    LCD_WRITE_DATA(0x37);
    LCD_WRITE_DATA(0x0A);
    LCD_WRITE_DATA(0x13);
    LCD_WRITE_DATA(0x04);
    LCD_WRITE_DATA(0x11);
    LCD_WRITE_DATA(0x0D);
    LCD_WRITE_DATA(0x00);
    // NGAMCTRL (Negative Gamma Correction)
    LCD_WRITE_CMD(0xE1);
    LCD_WRITE_DATA(0x0F);
    LCD_WRITE_DATA(0x32);
    LCD_WRITE_DATA(0x2E);
    LCD_WRITE_DATA(0x0B);
    LCD_WRITE_DATA(0x0D);
    LCD_WRITE_DATA(0x05);
    LCD_WRITE_DATA(0x47);
    LCD_WRITE_DATA(0x75);
    LCD_WRITE_DATA(0x37);
    LCD_WRITE_DATA(0x06);
    LCD_WRITE_DATA(0x10);
    LCD_WRITE_DATA(0x03);
    LCD_WRITE_DATA(0x24);
    LCD_WRITE_DATA(0x20);
    LCD_WRITE_DATA(0x00);
    // VCOM Control
    LCD_WRITE_CMD(0xC5);
    LCD_WRITE_DATA(0x00);
    LCD_WRITE_DATA(0x00);
    LCD_WRITE_DATA(0x00);
    LCD_WRITE_DATA(0x00);
    // Power Control 3
    LCD_WRITE_CMD(0xC2);
    LCD_WRITE_DATA(0x44);
    // Memory Access Control
    LCD_WRITE_CMD(0x36);
    LCD_WRITE_DATA(0x08);
    // Set rotation
    DIRECTION(0);
    // # Sleep OUT
    LCD_WRITE_DATA(0x11);
    DELAY(500); // ms
    // Display ON
    LCD_WRITE_DATA(0x29);

Mem. regs:

CMD: 0x60020000
DATA: 0x60000000

Timings:

  Timing.AddressSetupTime = 2;
  Timing.AddressHoldTime = 0;
  Timing.DataSetupTime = 5;
  Timing.BusTurnAroundDuration = 0;
  Timing.CLKDivision = 0;
  Timing.DataLatency = 0;

Wiring is double checked. NE1 is CS, RS -> A16, Reset set high.

The problem is that the display seems to be ON after all (gray background), but it's not possible to draw anything on it. Practically, doing DRAW_SOMETHING(...) the display just flashes and turns bright gray. I have checked every command and absolutely have no clue why this could happen. Any help highly appreciated thanks ~

----------------------[UPD]

correct memory addresses:

CMD: 0x60000000
DATA: 0x60020000
Sergio
  • 21
  • 5

2 Answers2

2

The problem was found in memory addressing. Correct memory addresses are:

CMD: 0x60000000
DATA: 0x60020000
Sergio
  • 21
  • 5
0

I'm trying to get my 3.5" lcd working. I've used your code as a starting point and I get a static snowstorm background. One error I spotted is that the below should be commands, not data

// # Sleep OUT
LCD_WRITE_DATA(0x11);
DELAY(500); // ms
// Display ON
LCD_WRITE_DATA(0x29);
  • Hi! That's correct. Besides, the error was in memory addresses. I had to flip them for this controller. Feel free to continue this topic if any questions. I have had some practice now. – Sergio Aug 05 '19 at 14:35
  • Sounds like we've been through the same pain. I've now got the display working properly, but I'm now working with the touch capability. Are you using that? – user2177276 Aug 07 '19 at 08:35
  • Hey @user2177276. Sorry for a delay. I've made a Github repo, so you can check the complete code here https://github.com/way5/ili9486-driver-for-stm32-hal – Sergio Aug 14 '19 at 01:56