2025-05-01 5:57 AM
Hi,
I have a well functioning application transmitting on uart4 using GPDMA1 CH1.
If I turn on DCache, then it does transmit the correct length, only all characters are 0x00 (no problem in turning ICache on).
In HAL_UART_Transmit_DMA(huart, (const uint8_t*)pTx, len), if I make this substitution: HAL_UART_Transmit_DMA(huart, (const uint8_t*)"Hi "/*pTx*/, 3/*len*/), then it works.
I have tried allocating the variable pointed to by pTx to just about any available memory area / type without success.
Any suggestions?
Solved! Go to Solution.
2025-05-01 6:01 AM
After writing the values to memory, but before sending them with DMA, clean the cache with SCB_CleanDCache_by_Addr. You'll need to ensure the buffer is aligned to a cache page.
Managing Cache Coherency on Cortex-M7 Based MCUs
2025-05-01 6:01 AM
After writing the values to memory, but before sending them with DMA, clean the cache with SCB_CleanDCache_by_Addr. You'll need to ensure the buffer is aligned to a cache page.
Managing Cache Coherency on Cortex-M7 Based MCUs
2025-05-07 4:24 AM
Thanks, it solved the problem about transmission.
It seems there is a similar issue with reception, but now I know what to do I guess.
2025-05-07 5:52 AM
> It seems there is a similar issue with reception
As the app note says, after receiving data with DMA, but before reading it with the CPU, invalidate that region with SCB_InvalidateDCache_by_Addr.
2025-05-09 1:03 AM
Thanks. I tried it without success.
As enabling DCache also makes my TouchGFX application malfunction, I won't investigate further for now.
Anyway, I'm sure the information provided will help me to fix this eventually.