murmur 0 17 января, 2021 Опубликовано 17 января, 2021 (изменено) · Жалоба Друзья, контроллер STM32F7, рисуется у меня картинка - сначала фон на весь экран, потом мелкий фрагмент. Хочу предварительно сохранить фон где-нибудь за пределами графической области, а потом вставлять оттуда при случае. Для того, чтобы понять принцип DMA2D копирования в режиме Memory-to-Memory, написала простенький код. который сначала делит экран на 4 области и раскрашивает каждую разными цветами, затем копирует одну область экрана в другую. Все это в цикле, переменные на лету меняю в отдладчике, дабы не перепрошивать каждый раз uint32_t offset=0x00000000; uint32_t source_addr=0xD0000000; uint32_t dest_addr=0xD00F0000; uint16_t width=500; uint16_t height=450; while(1) { TFT_FillRectangle(0,0,511,299,0xFF0000); // левый верхний - в красный цвет TFT_FillRectangle(512,0,1024,299,0x00FF00); //правый верхний - в зеленый TFT_FillRectangle(0,300,511,600,0x0000FF); //левый нижний - в синий TFT_FillRectangle(512,300,1024,600,0xFFFF00); //правый нижний - в желтый HAL_Delay(500); // Смотрим hdma2d.Init.Mode = DMA2D_M2M; hdma2d.Init.ColorMode = DMA2D_OUTPUT_RGB888; hdma2d.Init.OutputOffset =offset; if(HAL_DMA2D_Init(&hdma2d) == HAL_OK)// Настраиваем { if(HAL_DMA2D_Start(&hdma2d, source_addr, dest_addr, width, height) == HAL_OK) // копируем { HAL_DMA2D_PollForTransfer(&hdma2d, 10); } } HAL_Delay(500); } С указанными начальными данными полоса из верхней области экрана, шириной во весь экран, копируется куда-то вниз. Параметры source_addr, dest_addr, width, height мне интуитивно понятны. Но так и не получилось скопировать ограниченную прямоугольную область. Подскажите, как этой функцией скопировать прямоугольник размерами 100х100 из координат 50,50 в координаты 400,400 ? Изменено 17 января, 2021 пользователем murmur Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 17 января, 2021 Опубликовано 17 января, 2021 (изменено) · Жалоба https://github.com/ua1arn/hftrx/blob/567e22fa03f3a080c959507b499723a4aee1c994/src/display/framebuf.c#L1213 Для каждой из обоастей надо указать, сколько осталось до 1024 полной ширины экрана Изменено 17 января, 2021 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 19 января, 2021 Опубликовано 19 января, 2021 · Жалоба И как оно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться