Blue pill (STM32F103C8T6) development board
имеем вот такой "классический" blue pill
выполняем на нем простейший пример: переход в standby mode и выход оттуде через wake up pin, но не работает как надо:
после wake up бит SBF (SBF: Standby flag) в Power control/status register (PWR_CSR) не установлен, что говорит о том, что чип не был в standby.
тот же код абсолютно правильно выполняется на этой плате
тот же самый чип процессора (STM32F103C8T6).
один интересный момент. когда в первый раз попытался загрузить программу (Keil μVision) на первую плату через ST Link V2, кайл сообщил, что в ST Link – устаревшая версия firmware, и предложил залить новую. я согласился, после
чего постоянно стал получать сообщение об ошибке при попытке соединиться с платой. вернул предыдущую версию (для ST-Link Upgrade она и есть новейшая, на номер меньше). после этого код записался, хотя постоянно выныривало сообщение
но после нажатия на ок все срабатывало.
далее. запрограммировал wake up от RTC alarm через каждые несколько секунд. после reset плата сигнализирует светодиодом для контроля, но по-разному в зависимости от прочитанного SBF: Standby flag. запустил прогу на обеих платах. первая постоянно мигает так, как и первый раз после подачи питания, т.е. она не выходит по wake up из standby mode. вторая плата мигает так только один раз после включения, затем – иначе, как при установленном SBF: Standby flag. кроме того, вторая
плата промигала сутки без проблем, в то время как первая через какое-то случайное время останавливается. думаю, это имеет ту же причину, по которой процессор не идет в standby, хотя могу и ошибаться, т.к. причину не знаю.
у меня этих "первых" плат – три штуки. все ведут себя одинаково (плохо).
еще одно недоразумение. вчера решил таки попробовать связаться с платой из кайла, согласиться на апгрэйд ST Link V2 firmware, затем путем подбора конфигурации в кайле удалось таки связаться с платой (blue pill, "первая") и записать туда программу. и "произошло чудо": она заработала правильно! я так обрадовался, что пошел выпить кофе. возвращаюсь, что-то незначительное меняю в коде, перезаписываю ... и снова не работает как надо. возвращаю код на место (действительно мелочь
какая-то была! никакого отношения к переходу в standby) – ничего не помогает. после этого случайно (с моей точки зрения, конечно, ибо все имеет реальные причины, даже если мы их не знаем) один раз плата "замигала правильно", будто она вышла из стэндбая, но при новой записи кода все ушло снова в воспоминания.
пробовал баловаться с версиями ST Link V2: снова вернул старую, согласился на апгрэйд в кайле, ..., чего я только не перепробовал, больше не получается добиться правильной работы этой платы. вторая работает постоянно без проблем.
гоголя спрашиваю постоянно, с разными формулировками. похоже, ни у кого больше таких проблем не было.
интуитивно подозреваю, что это может быть как-то связано с процессом записи кода, но пробовал в кайле получать hex, и
потом записывать его с помощью STM32 ST-LINK Utility.exe – та же история.
я могу жить и со второй платой (заказал еще третью, попробую), но успокоиться не смогу, пока не буду знать, в чем причина, и не смогу сделать осознанно, "чтоб работало правильно", и "чтоб работало неправильно". прошу помочь мне в этом. спасибо!
спасибо за помощь. к сожалению прочесть и перевести строчку текста - недостаточно, чтобы понять, что говорит кайл. например
http://www.keil.com/support/docs/4082.htm
http://www.keil.com/support/docs/4139.htm
тем более, что родная утилита от ST не ругается, а работает с этой платой без никаких сообщений.
что касается того, где и кем изготовлена плата, то все электронное, что есть у вас в квартире, изготовлено там же (или у вас через дорогу фабрика чипов? : )
к сожалению прочесть и перевести строчку текста - недостаточно, чтобы понять, что говорит кайл
Да действительно, так прямо сказать нельзя.
Я хотел сказать что по всем симптомам, которые вы описываеете, ошибка находится в желелезе.
МК могут быть из отбракованной партии, которые китайцы охотно продают на E-Bay, или просто подделка.
ваш пункт понял. но что за "ошибка" находится одновременно в трех экземплярах, купленных в разное время у трех разных продавцов (не исключаю, что от одного производителя), причем ошибка, которой нет ни у кого нигде (судя по отсутствию инфы и нтернете), ошибка, которая каким-то чудесным образом несколько раз исчезла, я просто не был достаточно внимателен, и не понял, в результате каких моих действий.
склонен полагать, что у явления имеется очень простое объяснение, и есть таки люди с опытом с именно этой платой, которые могут иметь догадки, в чем причина. просто этот форум - узковат.
попробую на днях спросить в stackoverflow, там в тысячи раз больше читающих, может кто попадется.
но в любом случае - вам спасибо!
это уж я всенепременно : ). хотя сейчас на этом не зацикливаюсь, но оно когда-нибудь непременно всплывет.
пока что могу только записать некоторые моменты, чтобы не забыть, и чтобы было понятнее
0. компилятор во всех случаях - тот же. т.е. "неправильный код" можно исключить. к тому же все писано на ассемблере, пошагово проверено в дибаггере, все ок. в дибаггере же прошагован в окне дизассемблера "код из интернета на си, котоый работает у всех".
1. ... не знаю что еще
самое единственное, что приходит в голову - попытаться снова получить "работающую прошивку", сбросить дамп памяти и сравнить с таким же из неработающей. но неизвестно, сколько на это может уйти времени, которого на такие занятия нет.
заказал еще одну "классическую blue pill", как на первой картинке, и одну такую
.
. сегодня получил обе. "классическая" - тот же облом, "новая", что на последней картинке - без проблем. по крайней мере этот мой тест проходит очень красиво. дозаказал еще несколько штук (на да, на 50 копеек дороже : ), а классических у меня тоже теперь четыре штуки получается. может на что другое сгодятся, что не от батареи, или с выключателем. в моей актуальной запорочке желательно акку без подзаряда сколько-то лет держал. т.е. саморазряд практически. бывают аккумуляторы практически без саморазряда? батареи, знаю, есть, а аккумуляторы вроде все хоть сколько, но саморазряжаются.
почему работает классическая как положено, я, получается, так и не знаю. пошел в
стэкоуэрфлоу, а там, оказывается, не каждый имеет права вопрос задать, нужно сперва как-то "дослужиться"... в общем, отложу на потом, если руки дойдут.
оказывается, последняя называется уже не blue pill, а black pill.
новая непонятка. пытаюсь управлять двигателем (бесшумным бесщеточным, как заявлено) от отдельного источника питания (6В) по такой схеме:
автономно все работает красиво: двигатель когда надо включается/останавливается. но в дибагере в момент включения система теряет подключение к st-link v2, подключенному через usb. и тут же снова его находит, как только двигатель останавливается. если питание от двигателя отключить, этого не происходит. т.е. в принципе можно в дибаггере заменить двигатель чем-нибудь другим (светодиодом например), но хочется это как-то резонно объяснить и по возможности устранить. осциллографа нет, т.е. посмотреть, что на пине происходит, не могу.
зы. странно... когда я пишу/редактирую пост, я вижу картинку (всего одну, правда). а когда сохраняю, там ничего.
картинка - с этого сайта (N-channel MOSFET Relay Switch Circuit)
Не надо картинку как линк вставлять с другого сайта (через копи-пейст), он будет показываться только при составление поста.
Надо скопировать локально (как файл) и вставить.
А с двигателем проблема с индуктивностью (или стартовым током). Просаживается шина питания. Простейшее решение - запитывать от (псевдо) отдельного питания. Например, пустить питание через два диода (желательно шоттки)- один на схему, другой на двигатель. Можно просто конденсатор добавить.
Виноват, читал невнимательно.
И 150 ма это конечно мелочь.
Не видя всей картины, я бы обратил внимание на разводку земли (где и как соединены земли двух питаний и ключа). И поэкспериментировал с фильтром на питание. Просто поставить конденсатор на питание. Возможно токоограничивающий резистор на пару ом последовательно с мотором. Фильтр конденсатор на несколько десятков (да в принципе и сотен) нанофарад с базы транзистора на землю.
Но без осциллографа что и почему тут звенит сказать невозможно, так что методом тыка только. Не исключено что звенит сам usb кабель (он по земле соединен), натыкался на такое.
Кстати - проблема только в момент включения двигателя или все время пока он включен? Вы пишете что это вроде второе и это звучит очень странно. Попробуйте конденсатор на сотни нано параллельно двигателю.
выснил, что двигатель там коллекторный, а не безщеточный, как указано.
новая проблема. конфигурируем таймер, запускаем, отлично работает.
но если хотим изменить prescaler в interrupt handler при очередном срабатывании, то очередной интервал - как при старом prescaler, и лишь следующий - с новым значением. я могу это обойти "хитрожопым кодом", но я этого не люблю. хочется, чтобы не только работало как надо, но и код был читабельным и понятным. хотя и ассемблер (самый понятный код в мире!).
на этот раз SPI.
сконфигурировал как по букварю, но что-то не идет. странно все выглядит.
stm32 у меня master, slave не реагирует как ожидаю. те же данные посылаю другим mcu (nRF51) - без проблем, все красиво, selear показывает, что master выдает SCL пульс с частотой 8 mHz. с stm32 - почему-то всего ... 32 kHz
но это вроде как не может быть причиной неправильной работы устройства: "чем медленнее, тем надежнее". специфика приложения такова, что скорость роли не играет, и данные передаются только в одну сторону: от мастера к слэйву.
я не нашел никаких причин, почему такая частота часов получается. думаю, там на входе 72 mHz, даже если бы выбрал поделить на 256, было бы где-то 280 kHz, но никак не 32. да, вариирование
этим параметром (BR[2:0] in SPI_CR1) ничего не меняет: пульс стабильно 32 kHz
подозреваю, причина, как всегда при таких мистических случаях, примитивна и очевидна, только не мне в данный момент.
может кто подскажет?
отложил было, сегодня вернулся. обнаружил интересную деталь. все происходит красиво, если передавать байты до где-то (нестабильно) 0х1F. как только попытка передать что-то большее - selear идет в ступор. программа-пример (на си) передает без проблем все что угодно, и selear это красиво распознает и отображает.
перед непосредственно записью в DR смотрю в дибаггере, что в регистрах и у меня, и в примере. вижу то же самое. но там - передает, у меня - нет.
пробовал и воду спускать, и спать ногами на восток, ничего не помогает.
единственное достижение - удалось обранужить, что пример на сях тоже нестабильный. наверное, завяжу с этим недоделанным чипом. а может быть и со всеми чипами этой фирмы. уверен, потанцевав вокруг еще пару вечеров, оно бы заработало. но я что - танцор?