Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Blue pill (STM32F103C8T6) development board

2493  1 2 все
  moose коренной житель21.04.20 15:07
21.04.20 15:07 
Последний раз изменено 21.04.20 15:09 (moose)

имеем вот такой "классический" 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 – та же история.
я могу жить и со второй платой (заказал еще третью, попробую), но успокоиться не смогу, пока не буду знать, в чем причина, и не смогу сделать осознанно, "чтоб работало правильно", и "чтоб работало неправильно". прошу помочь мне в этом. спасибо!

#1 
Wanderer_ завсегдатай22.04.20 23:19
NEW 22.04.20 23:19 
в ответ moose 21.04.20 15:07

Так Keil Вам и говорит , что у это китайская подделка, что не гарантирует нормальную работу контроллера.

Стоит наверное 2 евро пучок?

#2 
  moose коренной житель23.04.20 12:53
NEW 23.04.20 12:53 
в ответ Wanderer_ 22.04.20 23:19

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


http://www.keil.com/support/docs/4082.htm


http://www.keil.com/support/docs/4139.htm


тем более, что родная утилита от ST не ругается, а работает с этой платой без никаких сообщений.

что касается того, где и кем изготовлена плата, то все электронное, что есть у вас в квартире, изготовлено там же (или у вас через дорогу фабрика чипов? : )


#3 
Wanderer_ завсегдатай24.04.20 12:03
NEW 24.04.20 12:03 
в ответ moose 23.04.20 12:53
к сожалению прочесть и перевести строчку текста - недостаточно, чтобы понять, что говорит кайл


Да действительно, так прямо сказать нельзя.


Я хотел сказать что по всем симптомам, которые вы описываеете, ошибка находится в желелезе.

МК могут быть из отбракованной партии, которые китайцы охотно продают на E-Bay, или просто подделка.

#4 
  moose коренной житель24.04.20 21:24
NEW 24.04.20 21:24 
в ответ Wanderer_ 24.04.20 12:03, Последний раз изменено 24.04.20 22:50 (moose)

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

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

попробую на днях спросить в stackoverflow, там в тысячи раз больше читающих, может кто попадется.

но в любом случае - вам спасибо!

#5 
Wanderer_ завсегдатай30.04.20 20:49
NEW 30.04.20 20:49 
в ответ moose 24.04.20 21:24
попробую на днях спросить в stackoverflow, там в тысячи раз больше читающих, может кто попадется.

Если проблему решите, напишите , интересно было бы узнать причину.


#6 
  moose коренной житель30.04.20 20:56
NEW 30.04.20 20:56 
в ответ Wanderer_ 30.04.20 20:49, Последний раз изменено 30.04.20 21:01 (moose)

это уж я всенепременно : ). хотя сейчас на этом не зацикливаюсь, но оно когда-нибудь непременно всплывет.


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


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

1. ... не знаю что еще


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

#7 
  moose коренной житель10.05.20 17:27
NEW 10.05.20 17:27 
в ответ Wanderer_ 30.04.20 20:49

заказал еще одну "классическую blue pill", как на первой картинке, и одну такую


.

. сегодня получил обе. "классическая" - тот же облом, "новая", что на последней картинке - без проблем. по крайней мере этот мой тест проходит очень красиво. дозаказал еще несколько штук (на да, на 50 копеек дороже : ), а классических у меня тоже теперь четыре штуки получается. может на что другое сгодятся, что не от батареи, или с выключателем. в моей актуальной запорочке желательно акку без подзаряда сколько-то лет держал. т.е. саморазряд практически. бывают аккумуляторы практически без саморазряда? батареи, знаю, есть, а аккумуляторы вроде все хоть сколько, но саморазряжаются.


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


#8 
  moose коренной житель22.06.20 10:50
NEW 22.06.20 10:50 
в ответ moose 10.05.20 17:27, Последний раз изменено 22.06.20 10:56 (moose)

оказывается, последняя называется уже не blue pill, а black pill.

новая непонятка. пытаюсь управлять двигателем (бесшумным бесщеточным, как заявлено) от отдельного источника питания (6В) по такой схеме:



автономно все работает красиво: двигатель когда надо включается/останавливается. но в дибагере в момент включения система теряет подключение к st-link v2, подключенному через usb. и тут же снова его находит, как только двигатель останавливается. если питание от двигателя отключить, этого не происходит. т.е. в принципе можно в дибаггере заменить двигатель чем-нибудь другим (светодиодом например), но хочется это как-то резонно объяснить и по возможности устранить. осциллографа нет, т.е. посмотреть, что на пине происходит, не могу.


зы. странно... когда я пишу/редактирую пост, я вижу картинку (всего одну, правда). а когда сохраняю, там ничего.

картинка - с этого сайта (N-channel MOSFET Relay Switch Circuit)


#9 
samowar знакомое лицо22.06.20 18:25
NEW 22.06.20 18:25 
в ответ moose 22.06.20 10:50, Последний раз изменено 22.06.20 18:28 (samowar)

Не надо картинку как линк вставлять с другого сайта (через копи-пейст), он будет показываться только при составление поста.

Надо скопировать локально (как файл) и вставить.


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


#10 
  moose коренной житель22.06.20 20:02
NEW 22.06.20 20:02 
в ответ samowar 22.06.20 18:25

я указал, что двигатель запитан от своего источника.

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

ясно, что нужно как-то отфильтровать помеху, которую он создает. вопрос - как?

#11 
samowar знакомое лицо22.06.20 21:37
NEW 22.06.20 21:37 
в ответ moose 22.06.20 20:02, Последний раз изменено 22.06.20 21:42 (samowar)

Виноват, читал невнимательно.

И 150 ма это конечно мелочь.


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


Но без осциллографа что и почему тут звенит сказать невозможно, так что методом тыка только. Не исключено что звенит сам usb кабель (он по земле соединен), натыкался на такое.


Кстати - проблема только в момент включения двигателя или все время пока он включен? Вы пишете что это вроде второе и это звучит очень странно. Попробуйте конденсатор на сотни нано параллельно двигателю.

#12 
  moose коренной житель25.06.20 22:11
NEW 25.06.20 22:11 
в ответ samowar 22.06.20 21:37

выснил, что двигатель там коллекторный, а не безщеточный, как указано.


новая проблема. конфигурируем таймер, запускаем, отлично работает.


но если хотим изменить prescaler в interrupt handler при очередном срабатывании, то очередной интервал - как при старом prescaler, и лишь следующий - с новым значением. я могу это обойти "хитрожопым кодом", но я этого не люблю. хочется, чтобы не только работало как надо, но и код был читабельным и понятным. хотя и ассемблер (самый понятный код в мире!).

#13 
  moose коренной житель26.07.20 21:27
NEW 26.07.20 21:27 
в ответ moose 25.06.20 22:11, Последний раз изменено 26.07.20 21:30 (moose)

на этот раз 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

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

может кто подскажет?

#14 
  moose коренной житель28.07.20 21:22
NEW 28.07.20 21:22 
в ответ moose 26.07.20 21:27

неужели никто никогда не пользовал stm32? spi? ведь каждая домохозяйка чистит унитазы с помощью spi!

#15 
  moose коренной житель31.07.20 21:34
NEW 31.07.20 21:34 
в ответ moose 28.07.20 21:22

кажись понял откуда ноги растут. но еще не до конца разобрался (и не желаю!). но решить проблему, думаю, удастся.

есть еще какие-нибудь дешевые чипы подобные, только не STM32? желательно из тех, что можно платку за пару евро у китайцев купить.

#16 
  moose коренной житель22.08.20 21:25
NEW 22.08.20 21:25 
в ответ moose 26.07.20 21:27

отложил было, сегодня вернулся. обнаружил интересную деталь. все происходит красиво, если передавать байты до где-то (нестабильно) 0х1F. как только попытка передать что-то большее - selear идет в ступор. программа-пример (на си) передает без проблем все что угодно, и selear это красиво распознает и отображает.

перед непосредственно записью в DR смотрю в дибаггере, что в регистрах и у меня, и в примере. вижу то же самое. но там - передает, у меня - нет.

#17 
AlexNek патриот22.08.20 22:15
AlexNek
NEW 22.08.20 22:15 
в ответ moose 22.08.20 21:25

Может тут будет решение? спок

https://habr.com/ru/company/nix/blog/515518/

#18 
  moose коренной житель24.08.20 22:54
NEW 24.08.20 22:54 
в ответ AlexNek 22.08.20 22:15

пробовал и воду спускать, и спать ногами на восток, ничего не помогает.

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

#19 
AlexNek патриот24.08.20 23:16
AlexNek
NEW 24.08.20 23:16 
в ответ moose 24.08.20 22:54

Это с чипом надо было делать, а не с собой.

Уверен, что ванильное мороженное на него не клали спок

Просто в этих маленьких железках может быть всё что угодно, что в голову и близко не придёт.

#20 
1 2 все