This example demonstrates how to use an TFT LCD display using the SPI.
Fork of Nucleo_Ex01_TFT by
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
This circuit diagram was created by fritzing.
TFT J2 | Nucleo |
---|---|
VCC | 3V3 |
GND | GND |
CS | PB_5(D4) |
Reset | PA_10(D2) Pull Up(100k) |
D/C | PA_8(D7) |
MOSI | PA_7(D11) |
SCK | PA_5(D13) |
LED | LED-100ohm-3V3 |
MISO | PA_6(D12) |
main.cpp@1:9c5fbf92ee76, 2016-03-21 (annotated)
- 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?
User | Revision | Line number | New 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 | } |