Jump to content

DimaK

Members
  • Content Count

    52
  • Joined

  • Last visited

Community Reputation

2 Обычный

About DimaK

  • Rank
    Осваивающийся
  • Birthday 03/24/1985

Информация

  • Пол
    Мужчина
  • Город
    Pforzheim

Электроника

  • Стаж в электронике
    10-20 лет
  • Сфера радиоэлектроники
    МК, силовая электроника
  • Оборудование
    Tecktronix, Weller

Recent Profile Visitors

2959 profile views
  1. Да это я понял, уже убрал. И вроде даже заработало, но все еще как-то странно.
  2. Да нет, там не вопрос чтобы обеспечить временную параллельность процесса прошивки. Пусть заливается хоть пять минут. Задача именно в том, чтобы обойтись одним каналом УАРТов на всех. Но теперь чую, придется все кроме программируемого держать в ресете и так по очереди.
  3. Еще вопрос такой к знатокам: как можно поместить переменную в определенный адрес в STM32CubeIDE ? Вариант типа: __attribute__((at(0x30000000))) uint32_t DCMI_Data [BUFF_Size]; я пробовал, не получилось, судя по дебагеру.
  4. Приветствую, коллеги! Вот уже несколько дней веду неравный бой с модулем DCMI контролера STM32H743. Фишка в том, что я хочу через этот интерфейс затащить данные с параллельной АЦП. Т.е. использовать совсем не по прямому назначению. Вроде все настроил - и модуль и ДМА. Написал тестовую прошивку, запихивающую содержимое шины в буфер (для начала просто притянул несколько пинов шины данных к питанию, чтобы получить значение 0х0403). Импульсы синхронизации H_Sync и V_Sync подаю с соседних же пинов. Частота пиксельного клока - 50 МГц. Проблема вот в чем: прием останавливается после приема примерно 30-40 значений. При этом срабатывает интеррапт по переполнению ФИФО (overrun). Т.е. судя по всему, ДМА тупо не успевает разгребать значения. Вероятно это как-то связано с кешем - начало хоть как-то работать только после того, как закоментил инициализацию кеша данных (т.е. строку SCB_EnableDCache() ). Буду благодарен за любую идею! Картинки прилагаются. Вот код: /* USER CODE BEGIN 2 */ uint16_t BUFF_Size = 2000; // Размер буфера uint32_t DCMI_Data [BUFF_Size]; // Буфер приема данных от DCMI #if defined ( __ICCARM__ ) #pragma location = 0x24004000 uint32_t DCMI_Data [BUFF_Size]; #elif defined ( __CC_ARM ) ALIGN_32BYTES(__attribute__((section (".RAM_D2"))) uint32_t DCMI_Data [BUFF_Size]); #endif uint16_t i; uint16_t Count_AUX; for (i=0; i<BUFF_Size; i++) // Обнуляем буфер { DCMI_Data = 0; } /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { HAL_GPIO_WritePin (DCMI_V_Sync_GPIO_Port, DCMI_V_Sync_Pin,1); HAL_GPIO_WritePin(DCMI_H_Sync_GPIO_Port, DCMI_H_Sync_Pin, 1); HAL_DCMI_Start_DMA (&hdcmi, DCMI_MODE_SNAPSHOT, (uint32_t)DCMI_Data, BUFF_Size); HAL_GPIO_WritePin(DCMI_V_Sync_GPIO_Port, DCMI_V_Sync_Pin, 0); for (Count_AUX=0; Count_AUX<500; Count_AUX++) // { // Delay } HAL_GPIO_WritePin(DCMI_V_Sync_GPIO_Port, DCMI_V_Sync_Pin, 1); for (Count_AUX=0; Count_AUX<500; Count_AUX++) // { // Delay } HAL_GPIO_WritePin(DCMI_H_Sync_GPIO_Port, DCMI_H_Sync_Pin, 0); // Начало приема данных for (Count_AUX=0; Count_AUX<3000; Count_AUX++) // { // Delay } HAL_GPIO_WritePin(DCMI_H_Sync_GPIO_Port, DCMI_H_Sync_Pin, 1); for (Count_AUX=0; Count_AUX<500; Count_AUX++) // { // Delay } HAL_GPIO_WritePin(DCMI_V_Sync_GPIO_Port, DCMI_V_Sync_Pin, 0); for (Count_AUX=0; Count_AUX<500; Count_AUX++) // { // Delay } HAL_GPIO_WritePin(DCMI_V_Sync_GPIO_Port, DCMI_V_Sync_Pin, 1); // Окончание приема HAL_Delay (3); } /* USER CODE END 3 */
  5. Ну вся линейка PIC32 вообще-то....
  6. А как это проще всего сделать? Для ПИКа это можно было сделать при объявлении, прямо всего массива. А для STM32? Я чё-то ищу и внятного решения найти не могу...
  7. Ок, благодарю. Тогда придётся шить их всетаки по очередти
  8. Да, согласен, аргументы железные...Но вопрос тот же: где этот протокол? Я в референсе ничего такого не нашел. Там как-то простенько так все написано...
  9. Ну вот я тоже так думал...Хотя с другой стороны, вся логика (как я ее понимаю) применения системного бутлоадера основана на том, что можно прошить с любого устройства, которое как бы не знает, что становится программатором. Ну т.е. даже через "гипер терминал" можно запрограммировать. А если нужно организовывать какой-то там обмен, то все становится гораздо сложнее. Кроме того, я с ходу не сог найти протокол этого обмена...
  10. Колееги подскажите пожалуйста такой момент: тут встала задача залить идентичную прошивку в 4 идентичных контроллера с помощью системного бутлоадера. Так вот собственно вопрос: можно ли это сделать параллельно? Т.е. подтянуть у всех четырех разом выводы BOOT как положено и через один и тот же UART1 закинуть прошивку? Или контроллер в процессе прошивки что-то отвечает (тогда начнется каша на Rx UARTa)? Заранее спасибо!
  11. Балин, ну это вообще шик!
  12. У меня будут:) Там рядом генератор, который шарашит короткие импульсы амплитудой до 1кВ
  13. О! А вот такая идея мне вообще нравится! Вот я также тогда и сделаю. А про длину - я в плане помех, про практический опыт. Понятно, что отрезать можно всегда:)
  14. Ну да, так и придется. А с какой длиной шлейфа реально работает? Там родной шлейф - сантиметров 20. Многовато, ИМХО...
  15. Прошу прощения покорнейши, осознал всю полноту своей ошибки! Да, я и правда не имел ввиду "как программировать", естественно я и хочу через SWD. У меня чисто практический вопрос: как по-умному совместить гигантский разъем на программаторе с миниатюрным 4-х пиновым разъемчиком на плате. Думал, может есть стандартные переходники. Но как я понял, каждый решает проблему по своему. У меня просто для ПИКа несколько решений есть, но там и выходило из ICD3 6 контактов через маленький RJ12. А на STMe все несколько гипертрофировано, придется что-то сооружать из шлейфов...
×
×
  • Create New...