This example demonstrates how to use an TFT LCD display using the SPI.

Dependencies:   mbed

Fork of Nucleo_Ex01_TFT by woodstock .

Intro

This example demonstrates how to use an TFT LCD display using the SPI.

Parts

STM32 Nucleo F446RE
QVGA 2.2 TFT SPI 240x320 (ILI9341)
Register 100k ohm
Register 100 ohm
Breadboard
Wires

Wiring diagram

/media/uploads/beaglescout007/nucleo_ex01_tft.jpg This circuit diagram was created by fritzing.

TFT J2Nucleo
VCC3V3
GNDGND
CSPB_5(D4)
ResetPA_10(D2) Pull Up(100k)
D/CPA_8(D7)
MOSIPA_7(D11)
SCKPA_5(D13)
LEDLED-100ohm-3V3
MISOPA_6(D12)

https://youtu.be/vj4JuKe-D9E

Committer:
beaglescout007
Date:
Mon Mar 21 11:41:25 2016 +0000
Revision:
1:9c5fbf92ee76
Parent:
0:de7a10d9be52
TFT_GREEN value was fixed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
beaglescout007 0:de7a10d9be52 1 #include "mbed.h"
beaglescout007 0:de7a10d9be52 2
beaglescout007 0:de7a10d9be52 3 SPI spi(PA_7, PA_6, PA_5);
beaglescout007 0:de7a10d9be52 4
beaglescout007 0:de7a10d9be52 5 DigitalOut cs(PB_5); // TFT chipselect pin
beaglescout007 0:de7a10d9be52 6 DigitalOut dc(PA_8); // TFT data command select pin
beaglescout007 0:de7a10d9be52 7 DigitalOut rst(PA_10); // TFT reset pin
beaglescout007 0:de7a10d9be52 8
beaglescout007 0:de7a10d9be52 9 #define TFT_WIDTH 320
beaglescout007 0:de7a10d9be52 10 #define TFT_HEIGHT 240
beaglescout007 0:de7a10d9be52 11
beaglescout007 0:de7a10d9be52 12 #define TFT_BLUE 0x1F00
beaglescout007 0:de7a10d9be52 13 #define TFT_RED 0x00F8
beaglescout007 1:9c5fbf92ee76 14 #define TFT_GREEN 0xE007
beaglescout007 0:de7a10d9be52 15
beaglescout007 0:de7a10d9be52 16 /*-------------------------------------------------------------------*/
beaglescout007 0:de7a10d9be52 17 /* Write command */
beaglescout007 0:de7a10d9be52 18 /*-------------------------------------------------------------------*/
beaglescout007 0:de7a10d9be52 19 void write_cmd(uint8_t cmd)
beaglescout007 0:de7a10d9be52 20 {
beaglescout007 0:de7a10d9be52 21 dc = 0;
beaglescout007 0:de7a10d9be52 22 spi.write(cmd);
beaglescout007 0:de7a10d9be52 23 }
beaglescout007 0:de7a10d9be52 24
beaglescout007 0:de7a10d9be52 25 /*-------------------------------------------------------------------*/
beaglescout007 0:de7a10d9be52 26 /* Write data */
beaglescout007 0:de7a10d9be52 27 /*-------------------------------------------------------------------*/
beaglescout007 0:de7a10d9be52 28 void write_data(uint8_t data)
beaglescout007 0:de7a10d9be52 29 {
beaglescout007 0:de7a10d9be52 30 dc = 1;
beaglescout007 0:de7a10d9be52 31 spi.write(data);
beaglescout007 0:de7a10d9be52 32 }
beaglescout007 0:de7a10d9be52 33
beaglescout007 0:de7a10d9be52 34 /*-------------------------------------------------------------------*/
beaglescout007 0:de7a10d9be52 35 /* TFT reset */
beaglescout007 0:de7a10d9be52 36 /*-------------------------------------------------------------------*/
beaglescout007 0:de7a10d9be52 37 void tft_reset()
beaglescout007 0:de7a10d9be52 38 {
beaglescout007 0:de7a10d9be52 39 wait_ms(200);
beaglescout007 0:de7a10d9be52 40 cs = 1;
beaglescout007 0:de7a10d9be52 41 dc = 1;
beaglescout007 0:de7a10d9be52 42 rst = 1;
beaglescout007 0:de7a10d9be52 43 wait_ms(200);
beaglescout007 0:de7a10d9be52 44 rst = 0;
beaglescout007 0:de7a10d9be52 45 wait_us(10);
beaglescout007 0:de7a10d9be52 46 rst = 1;
beaglescout007 0:de7a10d9be52 47 wait_ms(120);
beaglescout007 0:de7a10d9be52 48 cs = 0;
beaglescout007 0:de7a10d9be52 49 wait_ms(10);
beaglescout007 0:de7a10d9be52 50
beaglescout007 0:de7a10d9be52 51 write_cmd(0x3A); // Pixel Format
beaglescout007 0:de7a10d9be52 52 write_data(0x55); // 16bit Color
beaglescout007 0:de7a10d9be52 53
beaglescout007 0:de7a10d9be52 54 write_cmd(0xB1); // Frame Control
beaglescout007 0:de7a10d9be52 55 write_data(0);
beaglescout007 0:de7a10d9be52 56 write_data(0x1f);
beaglescout007 0:de7a10d9be52 57
beaglescout007 0:de7a10d9be52 58 write_cmd(0x36); // Memory Access Control
beaglescout007 0:de7a10d9be52 59 write_data(0xE8); // MY MX MV BGR
beaglescout007 0:de7a10d9be52 60
beaglescout007 0:de7a10d9be52 61 write_cmd(0x11); // Sleep Out
beaglescout007 0:de7a10d9be52 62 wait_ms(5);
beaglescout007 0:de7a10d9be52 63
beaglescout007 0:de7a10d9be52 64 write_cmd(0x29); // Display On
beaglescout007 0:de7a10d9be52 65 }
beaglescout007 0:de7a10d9be52 66
beaglescout007 0:de7a10d9be52 67 /*-------------------------------------------------------------------*/
beaglescout007 0:de7a10d9be52 68 /* Set the windows area and Start memory write. */
beaglescout007 0:de7a10d9be52 69 /*-------------------------------------------------------------------*/
beaglescout007 0:de7a10d9be52 70 void tft_set_window(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1)
beaglescout007 0:de7a10d9be52 71 {
beaglescout007 0:de7a10d9be52 72 write_cmd(0x2A); // Column Address Set
beaglescout007 0:de7a10d9be52 73 write_data(x0 >> 8);
beaglescout007 0:de7a10d9be52 74 write_data(x0);
beaglescout007 0:de7a10d9be52 75 write_data(x1 >> 8);
beaglescout007 0:de7a10d9be52 76 write_data(x1);
beaglescout007 0:de7a10d9be52 77
beaglescout007 0:de7a10d9be52 78 write_cmd(0x2B); // Page Address Set
beaglescout007 0:de7a10d9be52 79 write_data(y0 >> 8);
beaglescout007 0:de7a10d9be52 80 write_data(y0);
beaglescout007 0:de7a10d9be52 81 write_data(y1 >> 8);
beaglescout007 0:de7a10d9be52 82 write_data(y1);
beaglescout007 0:de7a10d9be52 83
beaglescout007 0:de7a10d9be52 84 write_cmd(0x2C); // Memory Write
beaglescout007 0:de7a10d9be52 85
beaglescout007 0:de7a10d9be52 86 wait_us(20);
beaglescout007 0:de7a10d9be52 87
beaglescout007 0:de7a10d9be52 88 dc = 1;
beaglescout007 0:de7a10d9be52 89 }
beaglescout007 0:de7a10d9be52 90
beaglescout007 0:de7a10d9be52 91 /*-------------------------------------------------------------------*/
beaglescout007 0:de7a10d9be52 92 /* Clear screen */
beaglescout007 0:de7a10d9be52 93 /*-------------------------------------------------------------------*/
beaglescout007 0:de7a10d9be52 94 void tft_clear(uint16_t color)
beaglescout007 0:de7a10d9be52 95 {
beaglescout007 0:de7a10d9be52 96 tft_set_window(0, 0, TFT_WIDTH, TFT_HEIGHT);
beaglescout007 0:de7a10d9be52 97
beaglescout007 0:de7a10d9be52 98 for (int i = 0; i < TFT_WIDTH * TFT_HEIGHT; ++i)
beaglescout007 0:de7a10d9be52 99 {
beaglescout007 0:de7a10d9be52 100 spi.write(color & 0xff);
beaglescout007 0:de7a10d9be52 101 spi.write(color >> 8);
beaglescout007 0:de7a10d9be52 102 }
beaglescout007 0:de7a10d9be52 103 }
beaglescout007 0:de7a10d9be52 104
beaglescout007 0:de7a10d9be52 105 int main()
beaglescout007 0:de7a10d9be52 106 {
beaglescout007 0:de7a10d9be52 107 spi.frequency(45000000);
beaglescout007 0:de7a10d9be52 108
beaglescout007 0:de7a10d9be52 109 tft_reset();
beaglescout007 0:de7a10d9be52 110
beaglescout007 0:de7a10d9be52 111 tft_clear(TFT_RED);
beaglescout007 0:de7a10d9be52 112
beaglescout007 0:de7a10d9be52 113 wait(1);
beaglescout007 0:de7a10d9be52 114
beaglescout007 0:de7a10d9be52 115 tft_clear(TFT_GREEN);
beaglescout007 0:de7a10d9be52 116
beaglescout007 0:de7a10d9be52 117 wait(1);
beaglescout007 0:de7a10d9be52 118
beaglescout007 0:de7a10d9be52 119 tft_clear(TFT_BLUE);
beaglescout007 0:de7a10d9be52 120
beaglescout007 0:de7a10d9be52 121 while(1);
beaglescout007 0:de7a10d9be52 122 }