No slide transition effect for STM32L4R9 Discovery ? Please help me!!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2020-02-24 12:34 AM
Dear All,
I have tried to make the slide transition effect when a screen is changed to another screen. I set all "Interactions" in TouchGFX designer.
- Change screen
- Transition : Slide
- Transition Direction : East
- other setting are all good.
But the screen transition act like "None" transition option.
"Cover" transition option ==> it works.
"Slide" transition option ==> it acts like "None"
But one thing, the simulator works fine for evey options.
Why "Slide" transition option doen't work? Please give me some advises about this matter.
Thanks in advance.
FYI, I don't use GFXmmu and I use DMA2D.
Solved! Go to Solution.
- Labels:
-
STM32L4 series
-
TouchGFX
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2020-02-24 1:24 AM
You're missing an "animation storage" buffer - The slide transition takes a snapshot of the current framebuffer it uses to create the transition. If you do not want to use a buffer you can use "cover transition".
How did you create the project?
/Martin
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2020-02-24 1:24 AM
You're missing an "animation storage" buffer - The slide transition takes a snapshot of the current framebuffer it uses to create the transition. If you do not want to use a buffer you can use "cover transition".
How did you create the project?
/Martin
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2020-02-24 1:38 AM
/**
* @fn virtual void HAL::setFrameBufferStartAddress(void* adr, uint16_t depth = 16, bool useDoubleBuffering = true, bool useAnimationStorage = true)
*
* @brief Sets the address used for frame buffers, usually located in external memory.
*
* Sets the address used for frame buffers, usually located in external memory. Will
* reserve memory for one or two frame buffers based on display size. Will optionally
* also reserve memory for a third frame buffer used for animationStorage.
*
* @param [in] adr Starting address to use for frame buffers.
* @param depth (Optional) Depth of each pixel in bits, default is 16.
* @param useDoubleBuffering (Optional) If true, reserve memory for an extra frame buffer.
* @param useAnimationStorage (Optional) If true, reserve memory for animation storage.
*
* @deprecated Use the setFramaBufferStartAddress with 'format' parameter instead of 'depth'
*/
virtual void setFrameBufferStartAddress(void* adr, uint16_t depth = 16, bool useDoubleBuffering = true, bool useAnimationStorage = true);
e.g.
hal.setFrameBufferStartAddress((uint16_t*)frameBuf0, bitdepth, true, true);
/Martin
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2020-02-24 11:30 PM
Dear Martin,
Thank you very much for your quick response. I could learn one more about TouchGFX from your reply.
You ment that I have to set another framebuffer for using AnimationStorage. Right?
My code is from cubeMX and the initialization code is like the below.
// from MyProject\TouchGFX\target\generated\TouchGFXGeneratedHAL.cpp
void TouchGFXGeneratedHAL::initialize()
{
HAL::initialize();
registerEventListener(*(touchgfx::Application::getInstance()));
setFrameBufferStartAddresses((void*)FRAME_BUFFER0, (void*)FRAME_BUFFER, (void*)0);
lockDMAToFrontPorch(false);
}
I have to use double buffering and I already use 400Kbyte for frame buffer. I think I cannot afford to use another 200kbyte for framebuffer.
(STM32L4R9 has just internal 640K SRM. and I have to use the remained 140K for the other usage.)
So, I have a question about this matter. Can I use external PSRAM for the animation storage frame buffer? OR I have to use only internal SRAM for frame buffer?
Thanks in advance!!
J.Park
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2020-02-25 1:12 AM
You can use SDRAM or PSRAM just fine. Just supply a pointer to where you want the storage to be located.
setFrameBufferStartAddresses((void*)FRAME_BUFFER0, (void*)FRAME_BUFFER, (void*)ANIMATION_STORAGE);
/Martin
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2020-02-26 12:20 AM
Dear Martin,
It works perfectly with PSRAM!! Thank you so much~~
J.Park
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2020-02-26 1:01 AM
Glad it's working! :)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2021-01-27 10:21 AM
Hi!
I have a similar problem on STM32F74G-DISCO board. My default code looks like that:
setFrameBufferStartAddresses((void*)0xC0000000, (void*)0xC003FC00, (void*)0);
0xC0000000 is the address of external SDRAM that is available on the DISCO board.
How do I know what is the next available address which I can use for animation storage?
I can estimate that the second buffer at address 0xC003FC00 is same size as the first at 0xC0000000, which results into 0xC007F800 being available for the third (animation) buffer. However that is not the case, because part of the image on display becomes corrupted, probably because the RAM is overwritten. So how do I effectively determine the next available RAM address?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
‎2021-01-28 12:02 AM
You determine it as you say - If something is getting overwritten something else must be wrong. TouchGFX should keep within the confines of a buffer based on the dimensions and depth of the application.
