Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Homepage
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.

Below is the brief story of what I did:
- Created a project for my STM32F407VE board in the STM32CubeIDE
- Set the
Clock Configurationto match the one used by Mbed for the Seeed Arch Max board:
- Selected
FSMCin theConnectivitycategory and configured it as below:
- Let the
STM32CubeIDEgenerate the code (files). - Created a new program for the Seeed Arch Max target in the Mbed Online Compiler by selecting a
mbed os blinkytemplate. - Replaced the
main.cppwith themain.ccontent of theSTM32CubeIDEproject. Copy & Pastedthe other files with codes from theSTM32CubeIDEproject 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
UniGraphiclibrary with aFSMC_8protocol and replaced theTFT::set_orientation(int orient)function with the one used bymcufriendfor arduino. - Modified the
main.cppas needed.
![]() | ![]() |
Wiring
| STM32F407VE | TFT LCD module |
|---|---|
| +3.3V | 3V3 |
| GND | GND |
| PB_12 | LCD_RST |
| GND | LCD_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 protocol | BUS_8 | FSMC_8 |
| Operation \ Time | ms | ms |
| Clear | 2283.980 | 38.454 |
| Plot | 192.066 | 11.365 |
| 8bit BMP | 63.805 | 41.338 |
| Large Font | 163.872 | 7.895 |
| Sparce pixels | 2072.265/1458.051 | 74.107/52.168 |
| 16bit BMP | 2288.589 | 59.904 |

