2023-08-25 04:31 PM
Hi Folks,
Our project needs to use a 7" TFT display and be able to write data to a USB stick. The Nucleo-F429ZI board looked promising but as far as I can tell it won't let me enable the LTDC and USB-OTG-FS (or HS) at the same time.
I found the Nucleo-F767 board that allows both but it's not available anywhere.
Does anybody have any suggestions?
Thanks,
Richard
2023-08-25 04:48 PM
What is the resolution of the screen? Where are you putting the frame buffer(s)?
Looked at WaveShare boards?
Some of the newer H7 and U5 boards?
2023-08-25 04:55 PM
it won't let me enable the LTDC and USB-OTG-FS (or HS) at the same time
If you are not going to play videos, it might be enough to use the SPI port for the display. I used it like that, but with a 2.4" 320x240 display, ILI9341 LCD controller (max SPI clock rate: 10MHz, 100ns).
For example:
RA8876 LCD controller SPI Input clock: 50MHz
https://www.buydisplay.com/download/ic/RA8876.pdf
https://www.buydisplay.com/spi-7-inch-tft-lcd-dislay-module-1024x600-ra8876-optl-touch-screen-panel
Another alternative might be to use an autonomous display, like Nextion, or use a dedicated STM32 for the display (HMI) and another MCU for the USB Host.
2023-08-25 04:58 PM
I'm using LTDC and USB host at the same time on the H743 without any issues
https://community.st.com/t5/touchgfx-and-gui-mcu/problem-using-ltdc-with-usb-in-stm32h7/m-p/278227
2023-08-25 05:01 PM
Development environment is CubeIDE.
The code supports a USB keyboard and VGA output using the LTDC and a RGB565 R2R DAC. It can play MP3 and FLAC audio over the on-chip DACs and runs a Basic interpreter. Until recently I have always compiled with O2 set.
I have had a longstanding issue with very minor instability of the LTDC clocking which could cause flicker and in extreme cases temporary loss of synch in the monitor. This was almost completely solved by using a crystal oscillator rather than a crystal to clock the processor. Loss of sync was most pronounced when using ARGB4444 in 800x600 resolution with the framebuffer in SDRAM and a 60Hz frame rate, running a FPU intensive Basic program, and whilst decoding mp3 and outputting using 44100 timer interrupts per second (yes I know I should be using DMA).
I've also been having issues with cache coherency in some code when pointers to pointers were used to update SDRAM. Whilst playing with solutions to the latter problem I switched to optimisation "Ofast". This didn't affect my caching issue but the loss of synch disappeared. Unfortunately the interpreted Basic programs ran about 5% slower with the "fast" optimisation. I can live with that so I decided to stick with Ofast.
However, a side affect was that enumeration of the USB keyboard became much less robust. Enumeration on power up stopped working and enumeration on insertion only worked occasionally. Once enumerated the keyboard worked correctly.
I then started playing with optimisation changes at a source code level and found that by compiling stm32h7xx_ll_usb.c with "O2" USB functionality returned to normal.
All this takes a huge amount of time and I'm certainly not going to wade through a disassembler listing to understand the differences. however, my learnings are as follows:
SDRAM and/or LTDC works better when compilation is with Ofast
USB must have stm32h7xx_ll_usb.c compiled with "O2"
A crystal oscillator provides a better clock source than a crystal