Jump to content

    

DpInRock

Участник
  • Content Count

    2291
  • Joined

  • Last visited

Community Reputation

0 Обычный

About DpInRock

  • Rank
    Гуру

Информация

  • Город
    Array

Recent Profile Visitors

4029 profile views
  1. ЕСть нонэйм контроллер BDLC с интеллектуальным модулем (Мицубиши на 35 ампер) и IR..341 (процессор) в качестве управления. Питается от трехфаз без заземления. 6 диодов в выпрямителе. У него есть модбас. Мне нужно поработать с модбасом, а сети, кроме обычной у меня нет. Чисто теоретически, подав 220 вольт на пару фаз не вижу причин ему умирать. Но поскольку у меня задача не спалить нафик этот девайс, хотел бы перестраховаться советом поевшим пыль на этой дороге.
  2. STM32F030C8. У иных STM32 такое не наблюдается. Я был бы рад и прыгал до потолка, если бы нашелся мой глюк. Но у меня потолки около 3 метров. Не допрыгнешь.
  3. Код бы кинул, без всяких проблем, но я уже его восстановил для нормальной работы. Условия таковы. USART1 (именно 1), 19200, четность EVEN, 1 stop. Прерывания по приему. Внутри прерывания - считывание символа в волатильную переменную. Есть еще таймер3, который прерывается раз в 1ms для всяких задержек и прочего. Главный цикл - раз, например в секунду стираем страницу. Я стираю последнюю (0х0800FC00). Смотрим, что стирание выполняется, и цикл не виснет (я светодиодом моргаю по входу выходу из функции). И начинаем гнать в порт какой-нибудь поток. Вот тут цикл виснет. Все виснет. Ничто не живет. Состояния портов ввода-вывода сохраняются. = Если сделать стирание пореже и гнать-останавливать поток на последовательный порт в промежутках - все работает нормально. Чисто возможно, что в момент стирания действительно происходит оверран (ну, логично, память занята). Но по завершении стирания должно вроде как все поехать снова. А оно не едет. Причем - ПРЕРЫВАНИЯ от таймера - идут еще чаще. И несмотря на занятость флэша - ничего плохого не происходит. Только USART1.
  4. USART1->CR2 12 бит. OVR Disable. Но даже если и возникает - то что это дает.(Ну, я проверяю первый 8 бит ISR, при том что передатчик совсем отключен. Но включена, правда четность). Несброшенное прерывание ничем плохим не грозит. Обработчик просто вызывается со всей силой очень часто. Ничего плохого при этом не происходит. (Ну совсем плохого). У меня стоит переключающий светодиод в прерывании. Каждое прерывание - переключается. Так что видно. (И частый вызов хорошо видно по снижению яркости). И да - я сильно не хочу чтобы ауколось. Точно такой же девайс делал на STM32L011- но там есть епром и на STM32F405 - там использую флэш по полной программе и три последовательных порта. Ноль проблем. И вот сделал типа бюджетной-миниатюрной версии - и вот получил такой результат. Я перепроверю это дело на другой плате. На текущей просто очень трудно подпаиваться, она маленкая и она у меня одна. Но выясню, конечно. === И граждане, речь не идет о том, что я не читаю даташиты. Речь идет о том, что это силиконовый баг (предположительно). И даташиты тут не помогут. ==== ARR Ну или так тогда проблему обозначить - даже если OVR - типа OVR во время операций с флэшем - гробит всё. Т.е. железобетонно, что после старта стирания (запись в соотв. регистр) все останавливается и код не выполняется. И даже делал смещение во времени для старта записи. Типа сигнал пришел стереть, а я делаю разные задержки. И вот после старта стирания - конец фильма точно. При этом запись сама завершается удачно (как становится известно потом).
  5. У меня особо специально запрещаются все прерывания, кроме нужного. Провел эксперимент. Могу посылать один символ, а могу - два подряд. Оба вижу, все норм. Никаких иных битов в состоянии уарта нет. Делаю так, что по приходу первого символа (конкретного, 0х55) запускается запись во флэш. И пока даю один символ за раз (с частотой - мышкой кликаю) - все нормально. Запись происходит, ничего не висит. А даю два подряд (другая кнопка) - привет. В общем-то опубликовал исключительно для истории. Может у кого будет что-то похожее - ну не с нуля начинать. А я лично пока решил, что это просто баг в проце. Что-то типа такого, что прерывание во время именно уарта1 лезет во флэш для выборки адреса обработчика, но память занята. И вот эта занятость остается навсегда. И никак не связана с разрешением прерывания ядра, но связан с какой-то прямой связью уарт1 с доступом к памяти. Как будто разрешение прерывания самого уарта - единственное препятствие на пути к запросу к флэшу. И глобальное прерывание и NVIC не препятствуют этому... Т.е. разрешение прерываний ядра и NVIC просто запрещают прерывания. А уарт все равно делает попытки доступа к памяти.... Темна вода в облацех.. Пока забил. Чисто в догонку. Для справки следующим. Операция стирания страницы выполняется. Т.е все виснет, но потом, уже программатором смотрю - страница таки стерта. До записи данных, соответственно не доходит.
  6. И даже если каки-то образом умирает стек, то по крайней мере светодиод должен зажечься. RED(1) - показано условно. Там просто прямая установка бита порта. Байты по через порт идут слитно практически - промежуток между байтами - 2 бита. Скорость очень маленькая 19200. И вот попытка записи во флэш во время такого потока, всегда, без всяких исключений ведет к концу фильма. Эту хрень побеждал сутки. Это единственное, что может говорить, что я где-то упал на совсем уж ровном месте. (Если долго мучаешься, почти всегда - это что-то очевидное и ровное). Но вот непохоже.
  7. Может останавливаться, если флэш блокируется стирателем. FLASH->CR |= FLASH_CR_PER; FLASH->AR = 0x0800FC00; FLASH->CR |= FLASH_CR_STRT; RED(1); Вот после команды FLASH->CR |= FLASH_CR_STRT - все остальные команды не выполняются. (Даже при нахождении этого кода в RAM). Т.е. проц мгновенно (плюс минус) останавливается. Т.е. исполнение кода останавливается. Где-бы этот код не находился. Прерывание USART одно - по приему. Сам по себе USART все возложенные функции выполняет. Принимает и прочая (не самый простой протокол декодирует). И работа с флэшем - сама по себе работает. И что интересно - глобальный запрет прерываний не помогает. Только выключение USART. А вот выключение NVIC - помогает. Запись во флэш проходит до конца, все хорошо, но при разрешении прерываний тем же NVIC - никакой код нигде не выполняется. Никаких hard_fault не генерируется. Просто тихо как в морге. == И тот же самый код в USART2 - идентичный - никакого вляиния не оказывает. (Переделать USART1 в USART2 довольно просто. Циферки поменять практически).
  8. Может я велосипед изобрел, но вдруг кому надо. Запись во флэш организована классически. Стираем страницу и пишем в нее. Вот все работает нормально до тех пор пока по USART1 (именно USART1) не пойдет символ во время стирания страницы. В этом случае сабж просто останавливается. Запреты прерываний не помогают. Даже после выполнения записи во флэш, если разрешить прерывания - проц тоже останавливается. При этом никакие другие активные прерывания (таймер 1 мс и USART2) на процесс не влияют никак. Процедура обработчика USART1 ничего не делает. Просто принимает символ и никуда не отдает. Т.е. совсем просто. В реальности помогает только после запрета прерывания от USART1 - выключить USART младшим битом, а перед разрешением прерываний - включить и сделать flush через RQR. Проц работает от внутреннего HSI на частоте 8 Мгц. == Вот такое прямо наблюдение.
  9. Ага. Намотать. И по какому признаку начинать не верить своим глазам. Вот нисколько не смоиневаюсь, что этот импульс могут увидеть все. С северкорейскими осциллографами или американскими. Главное условие подключать внешнее питание - резко.
  10. Вот реально, у меня была проблема переключить на резервный источник без перерывов. И случайно заметил пичок при переключении. И довольно большой. Заинтересовался. И погряз. Сейчас точно знаю, если поставить трансформатор на вход (против помех) и облагородить его конденсаторами, я перестану видеть этот импульс. Просто железно. Я таки заканчивал факультет ЭВМ (электр. выч. машин) Ряязнского радиотеха, а не радиотехнический факультет. Не приучен к тонкому анализу аналога. Но тут вот вижу, что эту хрень я вижу, но ее на самом деле нет. Она не способна ничего сжечь. И ладненько. А потом просыпаюсь - а вдруг может сжечь. Случаи то бывали... Не у меня. Но у людей... И 1% вылетов по питанию у людей - довольно суровоя величина. Люди огорчаются. == И по поводу нашлепки на кабель. На нашлепку надейся, а вот артефакты перепроверяй. Нет веры никому. Особенно себе. Я все-таки будет время, добью этот вопрос. Как можно доверять осциллографу. Это важно для меня. Это единственный источник информации. А образование у меня так себе. Ну курс электроники был. Ну зачет сдал и 5 на экзамене получил. Но это было 30 лет назад. Короче, Dinam, надо начинать с парадигмы бытия.
  11. А во что тогда верить, Dinam! Analog и Ti. Меня еще и толщина волнует. Отлаживал режимы работы аккума через БП. Фик. На расстоянии 50 см при токе 2.5 ампера падает аж 0.3 вольта. А столстыми проводами ну неудобно совсем. Буду думать про медную фольгу. Заодно и шапочку сделаю.
  12. Уже делал. И когда начал утолщать провода - понял, что ничего не даст. Потребление платы - сотни микроампер. Правда, проводов толще, чем выдранных из сетевых комповых проводов - нету. А ближе 50 см возможности придвинуть БП к нет === Это понятно. Я запитываю девайсы от китайского, но хорошего бп 30 вольт 5 ампер. Запитываю хаб от источника 2 ампера. И все земли соединены. И у БП китайского земля соединена физически с третьим проводом в розетке. Мне сначала это не понравилось, а потом понравилось. == Но итог - да. Это демон принял обличье такое. Иже еси, едрена корень. == Я по ходу дела провожу кучу АЦП измерений. И ставил заглушку, что если придет что-то близкое к FFF - дать знать. Вот ничего не приходит. Хотя импульс виден. (У меня второе питание от аккума есть, поэтому я контролирую весь процесс).
  13. Diman, как это не смешно - у меня тоже самое. Тоже с USB. Правда вместо оплетки - тот самый здоровенный провод. --- Вот у меня другая теория. Если плату запитать просто через резистор 2.2 ома (здоровенный цементный резистор) - все артефакты пропадают вообще. Это значит, что природа импульса в броске тока через конденсатор. Железно. Но дальше что. Можно вместо конденсатора - просто закоротить нафик вход. Еще круче будет бросок. (Зависит от БП). Но есть ли это импульс "на самом деле" на элементах схемы? Вполне возможно, что я вижу этот импульс, потому что у меня земля хорошая и не зависит от платы. А если земляной контур убрать, а сделать точкой нуля точку входа минусового провода от блока питания, то я его и не увижу. Скачок на плюсе компенсируется возвратом по минусу. -- Грубо говоря, а содержится ли в этом импульсе величиной до 10 вольт энергия? Типа, подать 220 вольт через 10 пикофарад - тоже что-то увидим... == Вот подключу сейчас диод в прямом направлении на выходные конденсаторы. При запрещенной работе преобразователя. Откроется ли он? Судя по всему - нет. А значит импульс - фальшивый. Но при этом - он существует.
  14. Короткое замыкание выходного конденсатора не влияет на величину и форму импульса. Разумеется, при запрещенном dcdc. Если закоротить конец щупа осциллографа на его собственную землю и прислонить это все к любой точке платы - то вижу этот импульс. === Но лучше всего виден этот импульс если землю щупа подключить, а сам щуп просто положить рядом. Амплитуда импульса зависит насколько близко само тело щупа находится к земляному полигону или проводу. Чем ближе щуп к земле, тем амплитуда меньше. === А если куда угодно припаять вертикальный штырь 10 см - сигнал становится большим и красивым. На закороченном осциллографе.
  15. Специально посмотрел. Если встать землей щупа в самой дальней точке платы и проверить ее куда можно дотянуться щупом или провод притянуть к щупу, там все норм. Да у меня по 5 вольтам 3 ампера кушает. Там любая плохая земля вылезет сразу. -- Заменил подвод питания на толстенные жесткие провода. Без эффекта.