Перейти к содержанию
    

Сергей Борщ

Модератор
  • Постов

    10 908
  • Зарегистрирован

  • Посещение

  • Победитель дней

    31

Сообщения, опубликованные Сергей Борщ


  1. В 13.03.2024 в 17:09, EdgeAligned сказал:

    Когда меня уговаривали пойти на эту должность и работу, говорили, что уж на президентских то выборах очень хорошо платят, дескать, там повышающий коэффициент хороший.  Но щас вот чето говорят, что не очень то с деньгами. В общем, как всегда, нае... понятно вопщем.

    Сказали "A" - говорите "Б". Так "нае..." или вы набросили специально, чтобы осадочек остался даже если ложечки найдутся?

    • Upvote 1
  2. 36 минут назад, addi II сказал:

    Не пойму какой нужно прописать в IDE дефайн если у меня STM32F103R8T6

    Вы серьезно пишете программу и не разу не открывали руководство пользователя? Потому что ответ на ваш вопрос содержится в начале буквально каждого раздела

    image.thumb.png.54cbf04329745bd98119d59d024d26ff.png

    image.thumb.png.d6851d3e67704612f70dce5f6afc772a.png

    ...

    image.thumb.png.f6ad6a68e9cd8f981362c071c6022265.png

  3. 2 часа назад, natsu сказал:

    хотя в документации написано что выход будет установлен сразу и независимо от результата сравнения.

    Про "сразу" там ничего не сказано. Сказано, установка произойдет от внешнего триггера.

    image.thumb.png.3924dfdadfa661759d38080b4c51bc9c.png

    Не работал с этим режимом, подробностей не знаю.

  4. 2 часа назад, AlanDrakes сказал:

    когда память не успевала считывать данные из себя

    Это же GD32, у него память отдельно, при старте перегружается в теневое ОЗУ. Дальше работата идет из ОЗУ без задержек.

  5. Если есть необходимость, чтобы никто не докопался: Eclipse + sdcc. Пробовал очень давно, переход по сообщениям об ошибках был недоделан и в компиляторе ошибки были, но их можно было обойти. Наверняка с тех пор стало лучше. Ну а если необходимости нет - среди трофеев есть вполне приличные экземпляры. Симулятор в Кейле был очень достойный еще 20 лет назад - позволял вывести УАПП симулируемой программы прямо в COM-порт машины, на которой запущен и отлаживаться с живыми данными.

  6. Как правильно заметил rkit, обесточенный двигатель всегда находится в положении полного шага. Большинство (все не щупал) драйверов при включении питания устанавливаются в совершенно конкретное положение, соответствующее в их системе понятий шагу 0. То есть рассогласование может быть только до первого выключения/включения, далее двигатели будут вращаться синхронно.

  7. В 25.02.2024 в 19:54, ozforester сказал:

    И IMR1 - это навряд ли, он же для вывода проца из энергосбережения по прерыванию.

    Если посмотреть на картинку блока EXTI (смотрю в документации на первый попавшийся F4xx, помню, что у остальных было так же и сомневаюсь, что у G0xx будет иначе) - то там прекрасно видно, что IMR запрещает выставление флага в IPR и вызов прерывания. А вот выход из энергосбережения идет напрямую. То есть в зависимости от IMR вы можете либо попасть в прерывание EXTI при просыпании либо программа просто пойдет работать дальше, но без записи 1 в соответствующий бит EXTI вы ни прерывания ни флага не получите.

    image.png.a592f8f5b1d1be740dab6654ee95d9bc.png

    Добавлено: не поленился, открыл руководство на G0x0 - картинка сложнее, но идея та же.
    image.thumb.png.777933db58a642f03321d3ed3a83969b.png

    • Thanks 1
  8. В 29.02.2024 в 00:45, Сергей Борщ сказал:

    Теперь мой код тоже определяется компом как неотвечающее low-speed устройство.

    Подводя итог: что-то непропаяно было во второй плате, хотя прозванивал несколько раз. Сейчас на второй плате все летает как USB high-speed c настройками скорости ног ULPI и HIGH и VERY_HIGH и MEDIUM, на первой так и не работает, но это цель дальнейших исследований.

    Чтобы USB334x определялся как high-speed нужно в регистре DCFG выставить в 1 бит XCVRDLY. Без этого оно определяется как full-speed (причина описана в errata USB3340, решение найдено на буржуйских форумах). Для F2xx, F4xx, F7xx все то же самое, причем этот бит в заголовочном файле CMSIS не описан, хотя в руководстве пользователя F7xx, H7xx он есть.

    И еще:

    В 28.02.2024 в 23:11, Сергей Борщ сказал:

    Нашел в интернете упоминание файла из примеров куба, в котором используется обращение к недокументированному регистру F4xx, F7xx для доступа к регистрам физики. Проверил на F767 - да, Vendor ID из физики вычитывается. Попробовал на своей плате с H725 - фиг, в регистре взводится флаг BUSY и все, а должен потом упасть и взвестись DONE.

    Это тоже работает в H725. Вдруг кому-то пригодится диагностировать...

  9. 13 часов назад, Ivan. сказал:

    Первые страницы могут иметь маленький размер, а последние по 128 или 256 кБ.

    Простите, что со своим самоваром встреваю, но в первой странице-двух  располагаю загрузчик, позволяющий передавать заказчику зашифрованный образ обновленной прошивки и заливать его через имеющийся интерфейс (а не тот, который решили использовать ST), далее еще один маленький сектор на настройки и все остальное под рабочую программу, ей уже все равно, какого размера сектора.

  10. 6 минут назад, AndreyVN сказал:

    и поле статуса должен менять Cortex-M0 то-ли через прямой доступ к памяти, то-ли через прерывание.

    Я не знаком с этим контроллером, но может ему надо периодически ставить в очередь команду вроде Get_status?

  11. Ну кто бы мог подумать, что выводам ULPI надо настраивать скорость не VERY_HIGH, а HIGH... Теперь мой код тоже определяется компом как неотвечающее low-speed устройство. Ну хоть какой-то прогресс...

  12. Такс, стоило написать на форум и есть подвижка - код куба, естественно, не трогает ногу RESET физики. Дописал ее отпускание после настройки MCO2 и появилась какая-то жизнь. Код больше не виснет на сбросе, доходит до главного цикла в main(). Тот неописанный регистр ведет себя так же, как в моей программе, видимо в нем что-то поменяли. Но хоть какая-то жизнь есть - комп находит low-speed устройство, из которого ничего не может вычитать. Буду копать свой код дальше...

  13. Отладил макет на лежавшей в тумбочке Nucleo-F767 и USB3340 "на проводах". Все запустилось на самописном стеке USB, который плавно мигрировал с F407 на F207, F107, теперь вот и на встроенной физике F767 взлетел, а потом и на внешней.  Пришло время делать рабочую конструкцию, посмотрел доступность F767 - прослезился в том числе и от цен. Решил поставить H725 - "модно, стильно молодежно", дешевле вдвое и USB, на первый взгляд, такой же. Получил платы, распаял, переписал тактирование - а фиг, реакции на втыкание кабеля USB никакой. Нашел в интернете упоминание файла из примеров куба, в котором используется обращение к недокументированному регистру F4xx, F7xx для доступа к регистрам физики. Проверил на F767 - да, Vendor ID из физики вычитывается. Попробовал на своей плате с H725 - фиг, в регистре взводится флаг BUSY и все, а должен потом упасть и взвестись DONE. Уже дня четыре бьюсь -- схему проверил, дорожки прозвонил, микросхему физики менял местами с рабочей, которая к Nucleo-F767 подпаяна была, вторую такую же плату собрал - она ведет себя точно так же. Наблюдаю только 60 МГц на ULPI_CK, постоянные уровни на D0-D7, низкие на ULPI_DIR, ULPI_NXT и пачки импульсов на ULPI_STP. Проверил правильность включения ключей на PC2_C, PC3_C, настройку ног. Уже не знаю, куда копать дальше.

    От отчаяния скачал/поставил куб, создал а нем проект с одним USB DEVICE CDC_ACM, настроил MCO2 на выдачу необходимых физике 12 МГц, прошил - этот проект валится на USB_CoreReset() - выставляет CSRST и не может дождаться его сброса.

    В errata про USB ни слова.

    Встречал упоминания, что у людей работает внешняя физика на H740, подумал купить его - так у него ноги не совпадают, на каждой стороне все нужные ноги включая питание туда-сюда на одну смещены...

    Собственно вопрос - кто-то запускал H725 с внешней ULPI-физикой? Может я зря трачу время и оно в принципе неработоспособно?

  14. 1 час назад, BALDA сказал:

    Найти не могу, где реализовано в стеке софтварный расчет КС.

    у меня в lwipopts.h стоит такое:

    Спойлер
    
    /*
       --------------------------------------
       ---------- Checksum options ----------
       --------------------------------------
    */
    /*
    The STM32 allows computing and verifying the IP, UDP, TCP and ICMP checksums by hardware:
     - To use this feature let the following define uncommented.
     - To disable it and process by CPU comment the  the checksum.
    */
    #define CHECKSUM_BY_HARDWARE
    
    #ifdef CHECKSUM_BY_HARDWARE
      /* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*/
      #define CHECKSUM_GEN_IP           0
      /* CHECKSUM_GEN_UDP==0: Generate checksums by hardware for outgoing UDP packets.*/
      #define CHECKSUM_GEN_UDP          0
      /* CHECKSUM_GEN_TCP==0: Generate checksums by hardware for outgoing TCP packets.*/
      #define CHECKSUM_GEN_TCP          0
      /* CHECKSUM_GEN_ICMP==0: Generate checksums by hardware for outgoing ICMP packets.*/
      #define CHECKSUM_GEN_ICMP         0
      /* CHECKSUM_CHECK_IP==0: Check checksums by hardware for incoming IP packets.*/
      #define CHECKSUM_CHECK_IP         0
      /* CHECKSUM_CHECK_UDP==0: Check checksums by hardware for incoming UDP packets.*/
      #define CHECKSUM_CHECK_UDP        0
      /* CHECKSUM_CHECK_TCP==0: Check checksums by hardware for incoming TCP packets.*/
      #define CHECKSUM_CHECK_TCP        0
      /* CHECKSUM_CHECK_ICMP==0: Check checksums by hardware for incoming ICMP packets.*/
      #define CHECKSUM_CHECK_ICMP       0
      /* CHECKSUM_CHECK_ICMP6==1: Check checksums in software for incoming ICMPv6 packets*/
      #define CHECKSUM_CHECK_ICMP6      0
    #else
      /* CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.*/
      #define CHECKSUM_GEN_IP           1
      /* CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.*/
      #define CHECKSUM_GEN_UDP          1
      /* CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.*/
      #define CHECKSUM_GEN_TCP          1
      /* CHECKSUM_GEN_ICMP==1: Generate checksums in software for outgoing ICMP packets.*/
      #define CHECKSUM_GEN_ICMP         1
      /* CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.*/
      #define CHECKSUM_CHECK_IP         1
      /* CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.*/
      #define CHECKSUM_CHECK_UDP        1
      /* CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.*/
      #define CHECKSUM_CHECK_TCP        1
      /* CHECKSUM_CHECK_ICMP==1: Check checksums in software for incoming ICMP packets.*/
      #define CHECKSUM_CHECK_ICMP       1
      /* CHECKSUM_CHECK_ICMP6==1: Check checksums in software for incoming ICMPv6 packets*/
      #define CHECKSUM_CHECK_ICMP6      1
    #endif
    

    Дальше ищите в исходниках "CHECKSUM_GEN" и "CHECKSUM_CHECK".

    И не забывайте, что может работать или одно, или другое. То есть если вы включаете программный подсчет, то аппаратный обязаны выключить и наоборот.

  15. То это "случайно, при невыясненных обстоятельствах в недокументированной области Option Bytes сбросился битик-рудимент от STM32WL55".

    В эррате этого (пока?) нет. Вдруг кому-то пригодится...

    https://community.st.com/t5/stm32-mcus/stm32wl55-and-stm32wle5-radio-timeout-issues-a-technical-faq-on/ta-p/615640

    Кого не пускают - это бит SUBGHZSPISD из документации на STM32WL55 (бит 31 по адресу 0x1FFF7870)

    :dash2:

     

    • Upvote 1
  16. 1 час назад, alexvu сказал:

    Сделав 2 светодиода на половинную яркость вместо одного

    Не знаю, как насчет светодиодов, но две лампы накаливания по 50 Вт светят тусклее, чем одна на 100 Вт, потому что у них ниже температура спирали.

×
×
  • Создать...