Добрый день, дорогие форумчане.
Тоже решил идти в ногу со временем и пересесть с AVR на STM32.
Подключил сенсорный дисплей 800х480 по интерфейсу RGB24 к STM32F429IIT.
Но от того, что поспешил и не предусмотрел в своей схеме SDRAM, теперь мучаюсь.
Настроил тайминги, залил задний фон, активировал слой и окно на нём, но никак не выходит корректно залить область внутри окна.
Получается примерно следующее:

Заливать пробую через DMA2D Register to memory.
Краями, конечно, понимаю, что что-то неверно с адресом заливаемой области, но от неграмотности не могу совладать с DMA2D
Прошу помощи у тех, кто может совладать с DMA2D без SDRAM
Вот кусок кода для заливки
Код
static void _DMA_Fill(void * pDst, int xSize, int ySize, int OffLine, uint32_t ColorIndex) {
DMA2D->CR = 0x00030000UL | (1 << 9); // Register to memory and TCIE
DMA2D->OCOLR = ColorIndex; // Color to be used
DMA2D->OMAR = (uint32_t)pDst; // Destination address
DMA2D->OOR = OffLine; // Destination line offset
DMA2D->OPFCCR = 4; // Defines the number of pixels to be transfered
DMA2D->NLR = ((uint32_t)xSize << 16) | ySize; // Size configuration of area to be transfered
DMA2D->CR |= 1; // Start operation
//
// Wait until transfer is done
//
while (DMA2D->CR & DMA2D_CR_START) {}
}
uint32_t aBufferResult[5000];
int main (void)
{
SystemInit();
HAL_Init();
SystemClock_Config();
DMA2D_Config();
Screen_Init();
_DMA_Fill(aBufferResult+10, 50, 1, 0, 0x1F0A);
_DMA_Fill(aBufferResult+150, 30, 2, 0, 0x1C01);
_DMA_Fill(aBufferResult+300, 5, 20, 0, 0xF0F0);
while(1) {}
}