I agree with Frank,
With the flicker, I often have noticed it is not necessarily the refresh rate that is the issue, it has more to do with how the screen is updated.
That is if your code is setup to do something like:
Code:
tft.fillscreen(ILI9341_BLACK);
<Draw new screen>
You will see flicker... unless of course you can exactly time it such that each pixel data is only touched and updated in one pass of the screen update (TE signal as Paul mentioned, I think?)
However if you are running a board that has enough memory to do a backing frame buffer (currently only T3.6), then you can do tricks to make it better. i.e Frank's DMA version or mine which I modeled after his.
In mine, you can turn on Frame buffer, then in the code.
You could do the above, but add a call to update... That is in my ili9341_t3n I have:
Code:
tft.fillscreen(ILI9341_BLACK);
<Draw new screen>
updateScreen(); // which says do the update now.
I also have a version of the updateScreen (updateScreenDMA) which can do the update async using DMA... Either one shot or continuous...
But again I am not sure this fully solves your issue as, you might still see parts of one screen and then parts of another screen (tearing? ), but my guess is it would make your flicker look a lot better... I also have the ability to set clipping rectangle, so if you are only updating a portion of the display, it will do only that portion.
But again only good for T3.6 as this requires 320*240*2 (153,600) bytes, and only T3.6 has this much... I have thought about ways to make it work somewhat on lesser memory, but have not done so. Could setup logical clipping rectangle that at max is size of memory and build offsets into memory... Could convert from 16 bits per pixel to maybe 8 or 4 with color lookup...