Jump to content

    

Sanya_kv

Свой
  • Content Count

    188
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Sanya_kv

  • Rank
    Частый гость

Информация

  • Город
    Россия
  1. Вопросы по редактору кода в Keil 5

    Отлично разобрали тему по кирпичикам!!! Хотел это добавить, но Вы меня опередили ))
  2. Вопросы по редактору кода в Keil 5

    Да, но цвет у " uint32_t " будет отличным от "void" или "int". На мой взгляд проще добавить строчку "int8_t uint8_t int16_t uint16_t int32_t uint32_t int64_t uint64_t s8 S8 u8 U8 s16 S16 u16 U16 s32 S32 u32 U32 s64 S64 u64 U64 " нежели добавлять все по отдельности.
  3. Вопросы по редактору кода в Keil 5

    Добавь в файле Keil_v5\UV4\global.prop.def в разделе keywordclass.cpp дополнительные строковые константы Будут выделяться тем же цветом что и "void". У меня получилось что-то вроде: # Keywords for C/C++ keywordclass.cpp=alignas alignof and and_eq asm auto bitand bitor bool break case catch char char16_t char32_t class compl \ const constexpr const_cast continue decltype default delete do double dynamic_cast else enum explicit export extern false \ float for friend goto if inline int long mutable namespace new noexcept not not_eq nullptr operator or or_eq private protected \ public register reinterpret_cast return short signed sizeof static static_assert static_cast struct switch template this thread_local \ throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while xor xor_eq\ int8_t uint8_t int16_t uint16_t int32_t uint32_t int64_t uint64_t s8 S8 u8 U8 s16 S16 u16 U16 s32 S32 u32 U32 s64 S64 u64 U64
  4. Keil 4.50

    Для себя решил проблему с Русской кодировкой путём замены UvEdit.dll из версии 5.23. UvEdit.rar
  5. Как вариант помимо RMII/MII интерфейса, использовать LAN9220, к микроконтроллеру подключается как sram.
  6. 32F769IDISCOVERY + MIPI DSI 720p (1280x720)?

    Цитата(mantech @ Oct 30 2017, 11:18) т.к. в контроллере МК скорее всего нет выборочной загрузки измененных фрагментов. Делать это программно есть и в STM32F7 эта аппаратно. Цитата(mantech @ Oct 30 2017, 11:18) что когда его снимут с пр-ва, вы найдете аналог... На разрешение 800х480 достаточно много вариантов. В моем случае, микроконтроллер без проблем поддерживает нужное разрешение в видео режиме. По этому дальнейшие поиски прекратил.
  7. 32F769IDISCOVERY + MIPI DSI 720p (1280x720)?

    Цитата(uriy @ Oct 28 2017, 18:08) Подскажите MIPI DSI дисплеи имеют в себе контроллер и встроенный framebuffer как например ILI9341, SSD1351 или же они тупые и в них нужно только гнать поток данных как в дисплеях с RGB интерфейсом? Есть два базовых режима интерфейса MIPI DSI: "Video mode" и "Command mode". В видео режиме они, как Вы выразились "тупые", в командный режим подразумевает что для хранения картинки в дисплее используется своя GRAM, т.е. встроенный framebuffer. К сожалению далеко не все контроллеры с MIPI DSI поддерживают командный режим. Мне так и не удалось найти дисплей с поддержкой командного режима и разрешения хотя бы 1280х800.
  8. 32F769IDISCOVERY + MIPI DSI 720p (1280x720)?

    Цитата(Огурцов @ Oct 23 2017, 06:40) ещё вопрос: есть мысли как подключить к stm второй дисплей ? с разными картинками, конечно Побаловался с MIPI DSI в командном режиме. Идея его в том, что на индикаторе используется графический контроллер со своей GRAM памятью (например OTM8009A), передача данных происходит при необходимости изменения картинки. Соответственно к DSI шине вполне возможно подключить несколько индикаторов. "Шаманъ" Случайно не проверяли, что быстрее копирует DMA2D или просто DMA. Имеется в виду режим MemToMem
  9. 32F769IDISCOVERY + MIPI DSI 720p (1280x720)?

    Цитата(Obam @ Oct 26 2017, 17:46) Кино - 24 fps и ничего, никно не жужжит… или это не те fps? В кино каждый кадр в отдельности смазан. Тема эта достаточно обширна, описана боле менее здесь https://habrahabr.ru/post/338796/ (раскрывается в комментариях). На хабаре так же есть статья, как сделать нормальную анимацию с низким FPS. Найти сейчас не смог. Читал пару лет назад.
  10. 32F769IDISCOVERY + MIPI DSI 720p (1280x720)?

    Цитата(Огурцов @ Oct 26 2017, 15:19) да, в одном, а какая разница, где я её рисую ? если бы она просто мерцала, я бы даже не спрашивал, но она куда-то улетает - каков механизм этого ? Попробуйте понизить частоту вывода.
  11. 32F769IDISCOVERY + MIPI DSI 720p (1280x720)?

    Цитата(Огурцов @ Oct 26 2017, 13:16) олл, почему дисплей подёргивается, когда dma2d работает ? т.е. картинка как бы сдвигается в сторону это синхра слетает или что, или это нормально, куда копать ? Причин может быть 2: Либо у Вас высокая частота вывода, медленная память, 16 бит память. Или Вы выводите картинку и рисуете её в одном буфере. На 32 битной памяти (в 32F769IDISCOVERY) без проблем выводится разрешение 1280х800 RGB565 1 слой 42 гц. С помощью DMA2d вывожу анимацию частотой 42 гц. После того как разобрался с DMA2d, во втором слое не вижу необходимости.
  12. 32F769IDISCOVERY + MIPI DSI 720p (1280x720)?

    Цитата(Шаманъ @ Oct 25 2017, 16:28) Например, можно нарисовать горизонтальную линию, но не прямоугольник. Прямоугольник рисовать можно, Пример: Цитата(Sanya_kv @ Oct 9 2017, 18:52) CODE void LCD_DRV_DrawFillRectAlpha(uint32_t LayerAddr, uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t ColorRGB888, uint8_t Alpha) { if (y0 > y1) { uint16_t bak; bak = y1; y1 = y0; y0 = bak; } if (x0 > x1) { uint16_t bak; bak = x1; x1 = x0; x0 = bak; } uint16_t Width = x1 - x0; uint16_t Height = y1 - y0; #if (LCD_PIXEL_BYTES == 2) uint32_t Xaddress = LayerAddr + 2*(LCD_DRV_GetXSize()*y0 + x0); #else uint32_t Xaddress = LayerAddr + 4*(LCD_DRV_GetXSize()*y0 + x0); #endif LCD_DRV_LL_DMA2D_FillBufferAlphaColor(Xaddress, Width, Height, (LCD_DRV_GetXSize() - Width), DMA2D_OUTPUT_RGB565, ColorRGB888, Alpha, true); } //=============== Заполнить область цветом с коэффициентом прозрачности ======== void LCD_DRV_LL_DMA2D_FillBufferAlphaColor(uint32_t BufferAddr, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t OutputColorMode, uint32_t ColorRGB888, uint8_t Alpha, uint8_t wait) { LCD_DRV_DMA2D_WaitEND();//Дождаться конца выполнения предыдущего вывода // Замешивание MODIFY_REG(DMA2D->CR, DMA2D_CR_MODE, DMA2D_M2M_BLEND); //Конфигурация переднего плана DMA2D->FGPFCCR = (DMA2D_FGPFCCR_CM & DMA2D_INPUT_A8)// Формат цвета |(DMA2D_FGPFCCR_AM & (1 << DMA2D_FGPFCCR_AM_Pos))//Замена альфа канала |(DMA2D_FGPFCCR_ALPHA & (Alpha << DMA2D_FGPFCCR_ALPHA_Pos));//Алфа канал DMA2D->FGCOLR = ColorRGB888; DMA2D->FGMAR = BufferAddr; DMA2D->FGOR = OffLine; //Конфигурация заднего плана DMA2D->BGPFCCR = DMA2D_BGPFCCR_CM & OutputColorMode;// Формат цвета DMA2D->BGMAR = BufferAddr; DMA2D->BGOR = OffLine; //Выходной буфер // Формат цвета DMA2D->OPFCCR = DMA2D_OPFCCR_CM & OutputColorMode; DMA2D->OMAR = BufferAddr;//адрес буфера для заполнения DMA2D->OOR = OffLine; // установка смещения (xSize + OffLine = LayerXSize) // установка количества пикселей на линию и количество линий DMA2D->NLR = (DMA2D_NLR_NL|DMA2D_NLR_PL) & (ySize| (xSize << DMA2D_NLR_PL_Pos)); //Запуск DMA2D->CR |= DMA2D_CR_START; if(wait)LCD_DRV_DMA2D_WaitEND(); }
  13. 32F769IDISCOVERY + MIPI DSI 720p (1280x720)?

    Цитата(Огурцов @ Oct 23 2017, 06:40) ещё вопрос: есть мысли как подключить к stm второй дисплей ? с разными картинками, конечно Можно. Только если у второго дисплея будет свой графический контроллер.
  14. 32F769IDISCOVERY + MIPI DSI 720p (1280x720)?

    Цитата(Шаманъ @ Oct 6 2017, 17:40) Чтобы сделать то, что Вы хотите Вам нужно сконфигурировать DMA2D для полной обработки (режим Memory-to-memory with blending, см. описание регистра DMA2D->CR). Далее в качестве переднего плана указать формат цвета А8, с заменой альфа канала на указанное Вами значение, установить регистр DMA2D->FGCOLR в требуемый цвет, в качестве заднего плана нужно использовать тот же кусок фреймбуфера куда будете рисовать. Тогда у Вас будет прочитано исходное изображение произведен блендинг с указанным Вами цветом переднего плана и прозрачностью, и результат записан обратно. В Reference Manual DMA2D блок достаточно хорошо описан - там нет ничего сложного. Сделал как вы рекомендовали, все завилось с пол пинка. Попутно избавился от СТМовских библиотек в LTDC и DMA2D, лишнего там ... . Ещё раз благодарю "Шаманъ" за помощь . Неизвестно сколько мне одному пришлось разбираться. По началу банально не был уверен в позитивном результате. На будущие, может кому пригодится, примерный набросок рабочей функции заливки области цветом с прозрачностью. CODE//=============== Заполнить буфер цветом с коэффициентом прозрачности ======== void LCD_DRV_LL_FillBufferAlphaColor(uint32_t BufferAddr, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t OutputColorMode, uint32_t ColorRGB888, uint8_t Alpha) { // Копирование с замешиванием MODIFY_REG(DMA2D->CR, DMA2D_CR_MODE, DMA2D_M2M_BLEND); //Конфигурация переднего плана DMA2D->FGPFCCR = (DMA2D_FGPFCCR_CM & DMA2D_INPUT_A8)// Формат цвета |(DMA2D_FGPFCCR_AM & (1 << DMA2D_FGPFCCR_AM_Pos))//Замена альфа канала |(DMA2D_FGPFCCR_ALPHA & (Alpha << DMA2D_FGPFCCR_ALPHA_Pos));//Алфа канал DMA2D->FGCOLR = ColorRGB888; DMA2D->FGMAR = BufferAddr; DMA2D->FGOR = OffLine; //Конфигурация заднего плана DMA2D->BGPFCCR = DMA2D_BGPFCCR_CM & OutputColorMode;// Формат цвета DMA2D->BGMAR = BufferAddr; DMA2D->BGOR = OffLine; //Выходной буфер // Формат цвета DMA2D->OPFCCR = DMA2D_OPFCCR_CM & OutputColorMode; DMA2D->OMAR = BufferAddr;//адрес буфера для заполнения DMA2D->OOR = OffLine; // установка смещения (xSize + OffLine = LayerXSize) // установка количества пикселей на линию и количество линий DMA2D->NLR = (DMA2D_NLR_NL|DMA2D_NLR_PL) & (ySize| (xSize << DMA2D_NLR_PL_Pos)); //Запуск DMA2D->CR |= DMA2D_CR_START; if((DMA2D->CR & DMA2D_CR_START) != RESET) { uint32_t tickstart = HAL_GetTick(); __IO uint32_t DMA2D_ISR; uint32_t ErrorCode; //Ожидаем конца выполнения рисования while(((DMA2D_ISR = DMA2D->ISR) & DMA2D_FLAG_TC) == RESET) { if ((DMA2D_ISR & (DMA2D_FLAG_CE|DMA2D_FLAG_TE)) != RESET) {//Ошибка if ((DMA2D_ISR & DMA2D_FLAG_CE) != RESET) { ErrorCode |= HAL_DMA2D_ERROR_CE; } if ((DMA2D_ISR & DMA2D_FLAG_TE) != RESET) { ErrorCode |= HAL_DMA2D_ERROR_TE; } DMA2D->IFCR = DMA2D_FLAG_TC | DMA2D_FLAG_CTC; return;//произошла ошибка } if((HAL_GetTick() - tickstart ) > DMA2D_TIMEOUT) {//Вышло время ожидания DMA2D->CR |= DMA2D_CR_ABORT;// DMA2D->IFCR = DMA2D_FLAG_TC | DMA2D_FLAG_CTC; return; } } } DMA2D->IFCR = DMA2D_FLAG_TC|DMA2D_FLAG_CTC; }
  15. 32F769IDISCOVERY + MIPI DSI 720p (1280x720)?

    Цитата(Шаманъ @ Oct 6 2017, 17:40) Надеюсь Вы поняли меня Спасибо за развернутый ответ. Честно говоря уже и не рассчитывал.