Jump to content

    

murmur

Участник*
  • Content Count

    594
  • Joined

  • Last visited

Community Reputation

0 Обычный

About murmur

  • Rank
    Знающий

Recent Profile Visitors

3241 profile views
  1. Друзья, контроллер 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 ?
  2. То есть, программатор отключать после отключения основного питания?
  3. Накаркали! Контроллер сгорел. Я не знаю от чего, возможно из-за кривизны рук - гирлянда могла платы контактом коснуться, проводки, переменный резистор. Но.... хотелось бы все-таки понять ваш намек на опасность сгорания - он о чем? О согласовании путем перевода в OD и подтяжки от 5 вольт? Смотрите, как сделала я - перевела ногу в OD, резистор 300 ом к 5 вольтам. Но на плате у меня 5 вольт нет, я их взяла от китайского свистка ST-link V2 - там 5 вольт наружу выведено. Блок питания у меня высокоамперный (при КЗ на проводах плавится изоляция). Так вот в моем случае расплавился провод GND, ведущий от ST-Link к плате. На плате больше ничего не сгорело, только контроллер. Могла быть причиной примененная мной схема согласования, раз уж вы об этом завели речь? У меня такое уже бывало несколько раз, это не может быть как-то связано с взаимодействием земель компьютера и контроллера?
  4. Гре...ные китайцы. По даташиту, если на SET единица, то это LowSpeed, если висит в воздухе - HighSpeed. Распознав висящий в воздухе пин и прочитав даташит, я решила, что это великая задумка - включить режим HighSpeed. Но все оказалось по китайски просто - видать поставили микросхемы из рисовой муки, не поддерживающие HighSpeed. А раз не поддерживающие, то и вывод SET можно оставить в воздухе. Это то меня и сбило с толку - я поставила половинные тайминги. Изменила тайминги на обычные, все заработало как часы. Вот только R,G и B у них действительно перепутаны. Что до пуллап-резистора - схема работает в широких его пределах, но красивая и идеологически правильная осциллограмма получается только при 300 ом.
  5. То есть, приведено к интуитивно-логически понятному формату, единица - это закрытый транзистор? Эмиттерный повторитель... по количеству деталей проще одногейтовый согласователь))) А по поводу осциллограммы - у меня переменный резистор на 10 к. И такая осциллограмма появляется при очень узком диапазоне сопротивлений, так что даже руками трудно выставить.... может резистор гнилой.... Устала что-то.... к черту все до завтрашнего дня... То есть, даем команду опустить на 100 мкс, и на 51 мкс диоды обновятся? Или зажгутся? Пока идет программирование, они выдают предыдущее состояние или гаснут?
  6. И не работает..... Ни с OpenDrain ни с PushPull Взяла 5 вольт от программатора, прицепила резистор. Ножку вот так GPIO_InitStruct.Pin = LED_DATA_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); Получила осциллограмму Светодиода беспорядочно мерцают. Первая мысль - из за заваленных фронтов опять сбои чтения. Но..! Во первых, светодиод моргают одним и тем же цветом (то есть нет случайных ошибок чтения), во вторых цвет смещен. То есть, если писать 255,0,0 - горит не красный, а синий, если 0,0,255 - не синий, а зеленый. Может глянете код выше - там где то собака порылась? Вопрос - после того как записалось - линию в ноль на 50 мкс, а дальше - ее нужно в единицу? Когда гореть должно начать? После прошествия 50 мкс или после 50 мкс и перевода в единицу? Второй вопрос - уже по STM. Если бит установить в единицу, то транзистор открывается и притягивает линию к земле? Или закрывается и отпускает? Эх... похоже проблема нерешаема на OPENDRAIN Вот - все уже опробовано до нас http://we.easyelectronics.ru/STM32/gpio-vyhod-v-rezhime-opendrain.html
  7. Так.... поставила первое, что попалось под руку - 5.1 к. Выход настроила так GPIO_InitStruct.Pin = LED_DATA_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); Получила такую осциллограмму Верхняя точка - 3.3 вольт. Кто виноват? Резистор поменьше надо?
  8. не более 50 см. в данный момент 10 см Так ведь вот чего Din и VDD рядом
  9. Господа, а финт ушами с OpenDrain и подтяжкой пройдет?
  10. Так звоны делают свое дело. И там не 5 вольт надо, а 0.7 от VDD. Переключила выход на VERY_HIGH - светодиод замигали веселее. Скажите, а в качестве меры согласования уровней можно включить выход в OPEN_DRAIN и подтянуть резистором к 5 вольтам? Будет работать?
  11. Говоря "реально", вы имеете в виду какой-то иной способ измерения, нежели осциллографирование? На всякий случай код. Не смейтесь над его "наколенностью", в будущем переделаю на таймер, возможно прикручу DMA, но пока так. На значения задержек тоже не обращайте внимание - на скорую руку переделан код микросекундной задержки, а там свои тонкости со временем выполнения кода, могу только уверить, что по осциллографу реальные задержки соответствуют паспортным (в HighSpeed)
  12. Расчетный - 48% То что указано как 47% - мерялось с экрана, думаю 1% можно пренебречь. Еще странность. Схемотехника ленты вроде бы такая. Питание по даташиту - 6-7 вольт Если замерять на VDD - получается 4.6 вольт. Хотя на входе 12 вольт.... Это как и почему? Микросхема с резистором образуют делитель? Вот для наглядности: На входе: На выходе: