Jump to content

    

adnega

Свой
  • Content Count

    2984
  • Joined

  • Last visited

Community Reputation

0 Обычный

About adnega

  • Rank
    Гуру
  • Birthday 05/01/1982

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

8790 profile views
  1. Товарищи! В чем смысл выяснения отношений и переходов на личности? Все все поняли, всем все ясно. Если ТС заложит F091, то по грабелькам, может, и пройдется - дык, опыт будет, и нам повод по-обсуждать. Заложит жирный МК - будет только основным функционалом заниматься без углубления в дебри и побочные явления. Меня бы F091 как исполнителя для данного ТЗ - отпугнул.
  2. Да, вы все верно подметили. Я для 168МГц прикинул задержки: порядка 72 нс при допуске 150 нс. Джиттер будет еще меньше. Я когда первый раз столкнулся с задержками DMA, был настолько разочарован, что к DMA сейчас отношусь как к медленному аппаратному блоку, единственное преимущество которого - делать что-то без участия CPU.
  3. А что за бинарная прошивка? Где? К какому МК или плате?
  4. Предлагаю этот вопрос закрыть, т.к. он всплыл от неуверенности работоспособности связки GPIO+TIM+DMA. Связка работоспособна. Обвязка? потребление? цена, наконец? Мы серийно используем F030 для управления светодиодными матрицами, в самых простых случаях. Правда, сейчас (уже несколько лет) перешли на F051. Большинство транспортных табло делаем на нем. Я на практике знаю, что из Cortex-M0 можно по максимуму выжать. Но это для крупных серий. Я ТС рекомендую взять МК "по-толще", все на нем отладить, а при необходимости сменить МК или семейство.
  5. На частоте 48МГц интервал 0.35 мкс, это порядка 16 тактов. Не "прям подряд", но близко. Я рекомендую F4, а еще лучше F3/G4. Там еще бодрее будет. Картинка - это к вопросу, что DMA не мгновенный, а в некоторых случаях десятки тактов.
  6. Ничего. Работать будет. Да, будут дрожать фронты, но это не критично. Я давно об этом уже написал.
  7. В "Martin T., The Insiders Guide to the STM32 ARM based Microcontroller(2008)" в главе "4.2.3 Direct Memory Access" довольно подробно расписан механизм работы DMA. Несложная арифметика дает 7..10 тактов на следующую транзакцию. Т.е. если делать единичные DMA-запросы, то эффект можно и на 3-м такте получить. Но если жарить по-полной, то я меньше 12 тактов не планирую, все равно работать не будет. В теории досконально не разбирался, но на практике 12 тактов наблюдал и побороть не смог. Кста, Проверить-то совсем не сложно: по первому сравнению таймера делаем OC таймера на вывод пина, и запрос DMA на запись в BSRR "1", по второму каналу тоже самое, но запись "0". Наблюдаем на трехканальном анализаторе, измеряем задержку и джитер.
  8. По моим ощущениям, DMA-транзакция может занимать порядка 12 тактов, это при 168МГц порядка 0.071 мкс. Да, дребезжать фронты будут, но по-моему не критично.
  9. Настраиваем 3 канала совпадения (можно и два, если очень захотеть). Первый записывает через DMA лог "1" во все нужные пины GPIOx->BSRR (это может быть UP-событие). Второй канал через 0.35 мкс записывает значение в GPIOx->BSRR из специального массива M[0]. Третий канал через 0.9 мкс записывает значение в GPIOx->BSRR из специального массива M[1]. Задача подготовить два 32-(можно и 16-)битных массива M[0] и M[1], по одному элементу на каждый бит. Т.е. размер в элементах равен 24 * N, где N-число светодиодов в линий. Но так можно до 16 линий одновременно рулить. Если памяти жалко, то можно попробовать в кольцевом DMA готовить данные на лету.
  10. А сколько пинов нужно? Информации об этом не нашел в топике. Я бы предложил 100-нигий, т.к. можно FSMC задействовать, если нужно, типа, многоразрядный SPI. У адресный светодиодов зачастую одна линия с очень строгими таймингами. Тут либо SPI+DMA, либо GPIO+TIM+DMA. ОЗУ в F401 очень много.
  11. Не понял почему именно этот МК был выбран. Цена? Есть же STM32F401RBT6 за 130 руб/шт от 112 шт. Если применить F4/F3 серию, то в цене не сильно возрастает изделие, а в удобстве/скорости/стоимости разработки, перспективах расширения функционала и т.п. - существенное преимущество.
  12. Для структур тоже работает. Это gcc, не уверен, что везде так можно. Так очень удобно задавать int rpm_arr_pos[RPM_NUM] = {[0 ... (RPM_NUM - 1)] = 0}; Не только массивы, но и массивы структур/объединений.
  13. const WordUnion_t MyVal[3] = { {Byte: {0x12,0x34,0x12,0x34}}, // Это объединение инициализировано, как массив байт {HWord: {0x5678,0x1234}}, // Это объединение инициализировано, как массив полуслов {Word: 0x12345678} // Это объединение инициализировано, как массив слов }; А так?
  14. Все железные глюки перечислены в ES. Практика показывает, что в подавляющем большинстве случаев у ST все норм, а не прав программист. Я не припомню ни одного обратного случая. Да, есть особенности, о которых нужно знать, и в документации все можно найти. Глянул ES - там ничего по теме топика нет.