3.5" inch TFT LCD Display Module 480X320 driven with FSMC.

TFT LCD Display Module 480X320 driven with FSMC

I have recently bought a 3.5" inch TFT LCD Touch Screen Display Module 480X320 with a www.mcufriend.com label on the back side. The display was equipped with an 8bit parallel interface. First I decided to test it with the UniGraphic library using the BUS_8 protocol. The display was very slow but improved when I switched to the PAR_8 protocol. Because I heard about the possibility to use a Flexible Static Memory Controller (FSMC), built into some STM MCU's, to drive LCD's (read/write to LCD's memory rather than to an external SRAM) I thought it would be a fun to try it out.

https://os.mbed.com/media/uploads/hudakz/lcd_3.5_tft_480x320_mcufriend_front.png

Below is the brief story of what I did:

  • Selected FSMC in the Connectivity category and configured it as below: https://os.mbed.com/media/uploads/hudakz/arch_max_fsmc_conf.png
  • Let the STM32CubeIDE generate the code (files).
  • Created a new program for the Seeed Arch Max target in the Mbed Online Compiler by selecting a mbed os blinky template.
  • Replaced the main.cpp with the main.c content of the STM32CubeIDE project.
  • Copy & Pasted the other files with codes from the STM32CubeIDE project to the online compiler project.
  • Renamed and modified:
    "stm32f4xx_it.h" to "stm32f4xx_it_msp.h"
    "stm32f4xx_it.c" to "stm32f4xx_it_msp.c"
  • Added the UniGraphic library to the online compiler project.
  • Extended the UniGraphic library with a FSMC_8 protocol and replaced the TFT::set_orientation(int orient) function with the one used by mcufriend for arduino.
  • Modified the main.cpp as needed.
https://os.mbed.com/media/uploads/hudakz/stm32f407vet6_st-link03.pnghttps://os.mbed.com/media/uploads/hudakz/lcd_3.5_tft_480x320_mcufriend_back.png


Wiring

STM32F407VETFT LCD module
+3.3V3V3
GNDGND
PB_12LCD_RST
GNDLCD_CS
PD_13 (RS)LCD_RS
PD_5 (WR)LCD_WR
PD_4 (RD)LCD_RD
PD_14 (DB00)LCD_D0
PD_15 (DB01)LCD_D1
PD_0 (DB02)LCD_D2
PD_1 (DB03)LCD_D3
PE_7 (DB04)LCD_D4
PE_8 (DB05)LCD_D5
PE_9 (DB06)LCD_D6
PE_10 (DB07)LCD_D7



Results
Execution times
Used protocolBUS_8FSMC_8
Operation \ Timemsms
Clear2283.98038.454
Plot192.06611.365
8bit BMP63.80541.338
Large Font163.8727.895
Sparce pixels2072.265/1458.05174.107/52.168
16bit BMP2288.58959.904
Committer:
hudakz
Date:
Fri Sep 25 14:52:27 2020 +0000
Revision:
1:47c996032a9e
Parent:
0:fa952828e34c
3.5" inch TFT LCD Display Module 480X320 driven with FSMC.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:fa952828e34c 1 ![](./resources/official_armmbed_example_badge.png)
hudakz 0:fa952828e34c 2 # Blinky Mbed OS example
hudakz 0:fa952828e34c 3
hudakz 0:fa952828e34c 4 The example project is part of the [Arm Mbed OS Official Examples](https://os.mbed.com/code/) and is the [getting started example for Mbed OS](https://os.mbed.com/docs/mbed-os/v5.14/quick-start/index.html). It contains an application that repeatedly blinks an LED on supported [Mbed boards](https://os.mbed.com/platforms/).
hudakz 0:fa952828e34c 5
hudakz 0:fa952828e34c 6 You can build the project with all supported [Mbed OS build tools](https://os.mbed.com/docs/mbed-os/latest/tools/index.html). However, this example project specifically refers to the command-line interface tool [Arm Mbed CLI](https://github.com/ARMmbed/mbed-cli#installing-mbed-cli).
hudakz 0:fa952828e34c 7 (Note: To see a rendered example you can import into the Arm Online Compiler, please see our [import quick start](https://os.mbed.com/docs/mbed-os/latest/quick-start/online-with-the-online-compiler.html#importing-the-code).)
hudakz 0:fa952828e34c 8
hudakz 0:fa952828e34c 9 1. [Install Mbed CLI](https://os.mbed.com/docs/mbed-os/latest/quick-start/offline-with-mbed-cli.html).
hudakz 0:fa952828e34c 10
hudakz 0:fa952828e34c 11 1. Clone this repository on your system, and change the current directory to where the project was cloned:
hudakz 0:fa952828e34c 12
hudakz 0:fa952828e34c 13 ```bash
hudakz 0:fa952828e34c 14 $ git clone git@github.com:armmbed/mbed-os-example-blinky && cd mbed-os-example-blinky
hudakz 0:fa952828e34c 15 ```
hudakz 0:fa952828e34c 16
hudakz 0:fa952828e34c 17 Alternatively, you can download the example project with Arm Mbed CLI using the `import` subcommand:
hudakz 0:fa952828e34c 18
hudakz 0:fa952828e34c 19 ```bash
hudakz 0:fa952828e34c 20 $ mbed import mbed-os-example-blinky && cd mbed-os-example-blinky
hudakz 0:fa952828e34c 21 ```
hudakz 0:fa952828e34c 22
hudakz 0:fa952828e34c 23
hudakz 0:fa952828e34c 24 ## Application functionality
hudakz 0:fa952828e34c 25
hudakz 0:fa952828e34c 26 The `main()` function is the single thread in the application. It toggles the state of a digital output connected to an LED on the board.
hudakz 0:fa952828e34c 27
hudakz 0:fa952828e34c 28 ## Building and running
hudakz 0:fa952828e34c 29
hudakz 0:fa952828e34c 30 1. Connect a USB cable between the USB port on the board and the host computer.
hudakz 0:fa952828e34c 31 2. <a name="build_cmd"></a> Run the following command to build the example project and program the microcontroller flash memory:
hudakz 0:fa952828e34c 32 ```bash
hudakz 0:fa952828e34c 33 $ mbed compile -m <TARGET> -t <TOOLCHAIN> --flash
hudakz 0:fa952828e34c 34 ```
hudakz 0:fa952828e34c 35 The binary is located at `./BUILD/<TARGET>/<TOOLCHAIN>/mbed-os-example-blinky.bin`.
hudakz 0:fa952828e34c 36
hudakz 0:fa952828e34c 37 Alternatively, you can manually copy the binary to the board, which you mount on the host computer over USB.
hudakz 0:fa952828e34c 38
hudakz 0:fa952828e34c 39 Depending on the target, you can build the example project with the `GCC_ARM`, `ARM` or `IAR` toolchain. After installing Arm Mbed CLI, run the command below to determine which toolchain supports your target:
hudakz 0:fa952828e34c 40
hudakz 0:fa952828e34c 41 ```bash
hudakz 0:fa952828e34c 42 $ mbed compile -S
hudakz 0:fa952828e34c 43 ```
hudakz 0:fa952828e34c 44
hudakz 0:fa952828e34c 45 ## Expected output
hudakz 0:fa952828e34c 46 The LED on your target turns on and off every 500 milliseconds.
hudakz 0:fa952828e34c 47
hudakz 0:fa952828e34c 48
hudakz 0:fa952828e34c 49 ## Troubleshooting
hudakz 0:fa952828e34c 50 If you have problems, you can review the [documentation](https://os.mbed.com/docs/latest/tutorials/debugging.html) for suggestions on what could be wrong and how to fix it.
hudakz 0:fa952828e34c 51
hudakz 0:fa952828e34c 52 ## Related Links
hudakz 0:fa952828e34c 53
hudakz 0:fa952828e34c 54 * [Mbed OS Stats API](https://os.mbed.com/docs/latest/apis/mbed-statistics.html).
hudakz 0:fa952828e34c 55 * [Mbed OS Configuration](https://os.mbed.com/docs/latest/reference/configuration.html).
hudakz 0:fa952828e34c 56 * [Mbed OS Serial Communication](https://os.mbed.com/docs/latest/tutorials/serial-communication.html).
hudakz 0:fa952828e34c 57 * [Mbed OS bare metal](https://os.mbed.com/docs/mbed-os/latest/reference/mbed-os-bare-metal.html).
hudakz 0:fa952828e34c 58 * [Mbed boards](https://os.mbed.com/platforms/).
hudakz 0:fa952828e34c 59
hudakz 0:fa952828e34c 60 ### License and contributions
hudakz 0:fa952828e34c 61
hudakz 0:fa952828e34c 62 The software is provided under Apache-2.0 license. Contributions to this project are accepted under the same license. Please see contributing.md for more info.
hudakz 0:fa952828e34c 63
hudakz 0:fa952828e34c 64 This project contains code from other projects. The original license text is included in those source files. They must comply with our license guide.