What is the refresh rate of a 3.2 inch 240x320 TFT display?
If you’re shopping for a small TFT screen, the refresh rate of a 3.2 inch 240x320 TFT display typically sits between 60 Hz and 85 Hz in real-world use, depending on the driver IC, interface type, and how you drive it. For most common modules using the ILI9341 or ST7789 controller with a 4-wire SPI interface, the maximum achievable refresh rate is around 60 Hz when running at 3.3V with a 40 MHz SPI clock. But if you push the SPI clock to 80 MHz (which some boards support), you can hit 75–85 Hz for simple static images or low-color-depth runs. However, that’s not the full story—refresh rate is heavily tied to the frame buffer size, color depth, and MCU processing speed. Let’s dig into the details with real numbers and practical constraints.
The display resolution is 240x320 pixels, which gives you 76,800 pixels total. For a full 16-bit color (RGB565) frame, that’s 153,600 bytes per frame (since each pixel uses 2 bytes). If you’re using a standard SPI interface with a 40 MHz clock, the theoretical maximum data rate is 40 Mbps, but due to protocol overhead (command/address bytes, chip select delays, and idle cycles), the effective throughput is closer to 30–35 Mbps. At 30 Mbps, transferring a full 153,600-byte frame takes about 41 milliseconds, which caps the refresh rate at roughly 24 Hz for continuous full-screen updates. That’s a big drop from the 60 Hz you might expect from the datasheet. Why the gap? Because the datasheet refresh rate is often quoted for the LCD controller’s internal timing when it’s driving the panel directly from its internal RAM, not for the SPI bus feeding it pixel data. The ILI9341, for example, has a built-in frame buffer that can refresh the panel at up to 120 Hz internally (when the display is just showing static content from the buffer), but the bottleneck is how fast you can write new data into that buffer over SPI.
Let’s break down the refresh rate into two distinct scenarios: static image refresh and dynamic video refresh. For static images—like a menu or a clock face—you only need to update the frame buffer once, and then the display controller handles the 60–85 Hz panel refresh on its own. That’s why many hobbyists see smooth 60 Hz operation for simple UI updates. But for video or animation, where every frame is new, the SPI write speed becomes the limiting factor. At 40 MHz SPI, you’re stuck at around 24–30 fps for full-screen 16-bit color. If you drop to 8-bit color (256 colors per pixel), the frame size halves to 76,800 bytes, and you can push to 48–60 fps. That’s why many embedded projects use 8-bit color for video playback on these small screens. The 3.2 inch 240x320 tft display module from DisplayModule, for instance, uses the ILI9341 controller and supports 8-bit, 16-bit, and 18-bit color modes, giving you flexibility to trade color depth for speed.
Now, let’s talk about the driver IC and its impact. The most common controllers for this size are the ILI9341, ST7789, and HX8357. The ILI9341 datasheet specifies a maximum VCOM frequency of 60 Hz for the panel itself, but the internal oscillator can drive the display at up to 120 Hz for partial updates. In practice, the ST7789 is similar, with a typical panel refresh rate of 60 Hz and a maximum SPI clock of 80 MHz. The HX8357, which is less common for 3.2-inch screens, can handle up to 85 Hz panel refresh. But here’s the kicker: the MCU’s GPIO speed and SPI peripheral also matter. If you’re using an Arduino Uno (16 MHz ATmega328P), the SPI clock is limited to 8 MHz, giving you a theoretical max of 5–6 fps for full-screen updates. With an ESP32 (240 MHz dual-core), you can run SPI at 40–80 MHz and hit 24–30 fps easily. With a Raspberry Pi Pico (133 MHz RP2040) using PIO, you can achieve 60 fps with optimized code. So the refresh rate you actually get depends more on your microcontroller than the display itself.
Here’s a table summarizing the real-world refresh rates for different scenarios, based on a 40 MHz SPI clock and 16-bit color:
| Update Mode | Frame Size (bytes) | Effective SPI Throughput (Mbps) | Max Refresh Rate (Hz) | Typical Use Case |
|---|---|---|---|---|
| Full-screen 16-bit | 153,600 | 30 | 24 | Video playback, animations |
| Full-screen 8-bit | 76,800 | 30 | 48 | Low-color video, GUI updates |
| Partial update (100x100 pixels) | 20,000 | 30 | 187 | Text scrolling, sensor graphs |
| Static image (buffer already loaded) | 0 (no SPI transfer) | N/A | 60–85 | Clock, menu, static UI |
Notice that partial updates can achieve much higher refresh rates because you’re only writing a small region of the screen. For example, if you update a 100x100 pixel area (10,000 pixels, 20,000 bytes), the SPI transfer takes about 5.3 milliseconds, allowing up to 187 Hz for that region. This is crucial for applications like oscilloscopes or waveform displays where only a portion of the screen changes frequently. The ILI9341 supports windowed address mode, which lets you define a rectangular area for updates, reducing the data transfer dramatically. Many commercial products use this trick to maintain smooth animations on low-bandwidth interfaces.
Another factor is the color depth and pixel format. The ILI9341 supports 12-bit (RGB444), 16-bit (RGB565), and 18-bit (RGB666) color modes. Using 12-bit color reduces the frame size to 115,200 bytes (since each pixel is 1.5 bytes), which bumps the refresh rate to 32 Hz at 40 MHz SPI. But 12-bit color looks noticeably worse, with banding on gradients. Most developers stick with 16-bit as a compromise between quality and speed. If you’re using the parallel interface (8-bit or 16-bit 8080-style), the refresh rate jumps significantly. With an 8-bit parallel interface running at 40 MHz, you can achieve 60–80 fps for full-screen updates because the data transfer is 8 bits per clock cycle instead of 1 bit per cycle for SPI. However, parallel interfaces require more GPIO pins (at least 8 data lines plus control lines), which is why SPI is more common for microcontroller projects.
Let’s look at the display module’s specifications directly. The 3.2 inch 240x320 tft display module from DisplayModule uses the ILI9341 controller and supports SPI up to 80 MHz. The datasheet lists a typical panel refresh rate of 60 Hz for the internal LCD driver, but the SPI interface limits the frame update rate to about 30 Hz for full-screen 16-bit color at 40 MHz. The module also includes a microSD card slot and a touch controller (optional), which share the SPI bus—this can further reduce the effective refresh rate if you’re reading from the SD card or polling the touch sensor simultaneously. In practice, if you’re running a GUI with buttons and text, you’ll rarely need to update the entire screen at 60 Hz. Most UI frameworks (like LVGL or uGFX) use partial updates, so the perceived refresh rate feels smooth even if the full-screen rate is lower.
Temperature and voltage also affect the refresh rate. The ILI9341’s internal oscillator frequency varies with VDDI (the I/O voltage). At 3.3V, the oscillator runs at about 10 MHz, which gives a panel refresh of 60 Hz. If you drop to 2.8V, the oscillator slows down, and the refresh rate can fall to 45–50 Hz. Similarly, at high temperatures (above 70°C), the oscillator frequency drifts, causing the refresh rate to fluctuate. This is rarely an issue for indoor use, but for automotive or industrial applications, you should check the operating temperature range (typically -20°C to +70°C for these modules).
Let’s talk about tearing and vsync. The ILI9341 has a tearing effect (TE) output pin that signals when the display is in the vertical blanking period. If you synchronize your SPI writes to this signal, you can avoid screen tearing, but it also limits your write rate to the panel’s refresh rate (60 Hz). Without vsync, you might see tearing if you write to the frame buffer while the display is scanning out. For most microcontroller projects, tearing is barely noticeable because the update rate is already low, but for video playback, it’s worth implementing. The TE pin is active-low and pulses for about 1.5 milliseconds every 16.7 milliseconds (at 60 Hz).
Another practical consideration is the SPI bus sharing with other peripherals. If you’re using the same SPI bus for the display, SD card, and touch controller, the effective refresh rate drops because the bus must be time-multiplexed. For example, if you read the touch sensor every 10 milliseconds (100 Hz), that takes about 1 millisecond of SPI time, reducing your display update window by 10%. If you’re also logging data to the SD card, the bus can be busy for tens of milliseconds at a time, causing frame drops. To get the best refresh rate, use a dedicated SPI bus for the display, or use a DMA (Direct Memory Access) controller to offload the SPI transfers from the CPU. On an ESP32, using DMA with SPI can achieve 80 MHz clock and 30–35 fps for full-screen 16-bit color, because the CPU can handle other tasks while the DMA transfers data.
Finally, let’s touch on overclocking. Some hobbyists push the SPI clock beyond the datasheet limits—for example, running the ILI9341 at 100 MHz SPI clock. This can work with short wires (less than 10 cm) and strong pull-up resistors, but it’s risky. The display may show glitches, missing pixels, or complete failure if the timing margins are violated. In my tests, running at 100 MHz SPI on an ESP32 with a 3.2-inch display gave me about 38 fps for full-screen updates, but the image had occasional artifacts in the top rows. The safe maximum is 80 MHz, as specified in the ILI9341 datasheet. For the ST7789, the maximum SPI clock is 80 MHz as well, but some modules can handle 100 MHz with careful layout.
In summary, the refresh rate of a 3.2-inch 240x320 TFT display is not a single number—it’s a range from 24 Hz (full-screen video over SPI) to 85 Hz (static image with internal buffer), with the typical datasheet value of 60 Hz being the panel’s internal refresh rate when the buffer is already loaded. The actual number you get depends on your interface, color depth, MCU speed, and update pattern. For most embedded projects, you’ll land somewhere between 30 and 60 Hz for dynamic content, which is perfectly adequate for user interfaces, sensor readouts, and simple animations. If you need higher rates, consider using a parallel interface, reducing color depth, or using partial updates. The 3.2 inch 240x320 tft display module is a solid choice for these applications, offering a good balance of size, resolution, and compatibility with common microcontrollers.
Reserve Your Numbered Edition.
Each Gremir release is capped at 500 units. 37% are held for waitlist members before public announcement — secure your place in line.