Stm32f103 usb не работает после загрузки программы

Обновлено: 21.11.2024

В этом руководстве я покажу вам, как загрузить загрузчик USB на плату Blue Pill STM32F103C8T6. Используя USB-загрузчик STM32F103C8T6, вы можете легко запрограммировать Blue Pill Board, просто используя встроенный USB-порт без необходимости использования внешнего оборудования.

Важное примечание. Я настоятельно рекомендую вам ознакомиться с учебным пособием «НАЧАЛО РАБОТЫ С STM32F103C8T6», прежде чем двигаться дальше, так как в нем содержится множество конфигураций, настроек, подключений и объяснений, которые очень важны.< /p>

Введение

Одна вещь, которая делает Arduino UNO (или любую плату Arduino в этом отношении) особенной, — это простота программирования. Просто подключите Arduino к компьютеру и загрузите программу с помощью Arduino IDE. Это так просто (при условии, что у вас есть правильные драйверы и выбран правильный USB-порт).

То же самое нельзя сказать о плате STM32F103C8T6 Blue Pill. Если вы помните, в учебном пособии «Начало работы с STM32F103C8T6» я показал вам, как загрузить программу на плату Generic STM32F103C8T6 с помощью внешнего адаптера USB-Serial.

Загрузка программы с помощью адаптера FTDI не так уж и сложна, но каждый раз, когда вы хотите загрузить программу, вы должны переключаться в режим программирования, а для нормальной работы вам необходимо снова переключиться в рабочий режим ( переключая контакты BOOT0 между HIGH и LOW).

Было бы проще использовать встроенный порт microUSB на плате Blue Pill для загрузки программы. USB-загрузчик STM32F103C8T6 предоставляет такое решение, при котором вы можете просто подключить Blue Pill к компьютеру через USB-порт и загрузить программу. В качестве дополнительного преимущества вам не нужно возиться с контактами BOOT, поскольку вы можете оставить его в рабочем режиме.

Необходимые компоненты

  • Синяя таблеточная плата STM32F103C8T6
  • Конвертер USB в последовательный порт (например, программатор FTDI)
  • Соединение проводов
  • Резистор 1,8 кОм (дополнительно)
  • ПК

Схема

Соединения между STM32 Blue Pill и преобразователем USB в последовательный интерфейс аналогичны тем, которые я описал в Руководстве по началу работы. Ниже приведено эталонное изображение для подключений.

Загрузка USB-загрузчика STM32F103C8T6

Чтобы загрузить программу через порт USB на Blue Pill, на MCU должен быть установлен загрузчик USB. Благодаря вкладу LeafLabs (Maple Bootloader) и rogerclarkmelbourne, репозиторий загрузчиков доступен для ряда плат. Исходный код доступен на GitHub по этой ссылке.

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

Установление связей

Первый шаг — подключить плату STM32 Blue Pill к адаптеру USB-Serial, как показано на рисунке выше. Кроме того, контакты BOOT0 перешли в состояние HIGH, т. е. плата переведена в режим программирования.

После этого вы можете подключить преобразователь USB к последовательному порту к ПК и проверить наличие COM-порта.

Загрузить двоичный файл загрузчика

Как упоминалось ранее, этот репозиторий состоит из разных двоичных файлов для разных типов плат STM32. Все эти двоичные файлы классифицируются на основе подключения светодиода USER. Например, мы знаем, что индикатор пользователя на Blue Pill подключен к контакту 13 порта C, т. е. к ПК13.

Следовательно, двоичный файл называется «generic_boot20_pc13.bin». Для всех общих плат на базе Blue Pill STM32F103C8T6 вы можете использовать этот двоичный файл. Вы можете скачать двоичный файл по этой ссылке на GitHub.

Если у вас другая/нестандартная доска. Затем загрузите соответствующий двоичный файл из списка двоичных файлов, представленных в репозитории GitHub.

Загрузить двоичный файл загрузчика USB в STM32

После того, как оборудование подключено и вы загрузили необходимый двоичный файл, вы готовы загрузить загрузчик USB STM32F103C8T6 в MCU. Для этого вы можете использовать STM32CubeProgrammer.

Если вы помните, в руководстве «Начало работы с STM32F103C8T6» я загрузил программное обеспечение STM32CubeProgrammer с официального сайта STMicroelectronics. Если вы следовали этому руководству, значит, вы уже загрузили это программное обеспечение, которое в моем случае можно найти в папке «C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin». Перейдите в аналогичное место на вашем ПК и откройте файл «STM32CubeProgrammer.exe».

В правой части страницы выберите «UART» в качестве режима связи и выберите соответствующий COM-порт. В моем случае это COM4. Оставьте все остальное с настройками по умолчанию и нажмите «Подключиться».

После успешного подключения программное обеспечение прочитает содержимое флэш-памяти и отобразит его. Затем нажмите на символ со стрелкой загрузки. Откроется опция «Стирание и программирование».

Нажмите «Обзор» и найдите ранее загруженный двоичный файл, например, файл generic_boot20_pc13.bin. Начальный адрес будет автоматически заполнен «0x08000000». Если нет, введите это значение. Наконец, нажмите «Начать программирование». Программное обеспечение начнет загрузку загрузчика USB во флэш-память микроконтроллера, и вы увидите журнал ниже.

После загрузки двоичного файла появится всплывающее сообщение "Загрузка файла завершена". Нажмите «ОК» и, наконец, нажмите «Отключить» в правом верхнем углу. На этом загрузка USB-загрузчика STM32F103C8T6 во флэш-память MCU завершена. На этом этапе вы можете отключить адаптер USB-последовательный порт от платы Blue Pill Board, а также переключить контакт BOOT0 обратно в LOW, т. е. в рабочий режим, поскольку он вам не нужен.

Использование ST Flash Loader Tool для загрузки загрузчика USB

Вместо программного обеспечения STM32CubeProgrammer вы можете использовать альтернативный инструмент под названием ST Flash Loader. Это также официально предоставлено STMicroelectronics, и вы можете скачать его по этой ссылке.

Вы должны войти на веб-сайт ST, чтобы загрузить инструмент, и после завершения загрузки извлеките содержимое zip-файла и дважды щелкните файл «flash_loader_demo_v2.8.0.exe». Это установит Flash Loader Tool.

После установки инструмента откройте его из папки «C:\Program Files (x86)\STMicroelectronics\Software\Flash Loader Demo», дважды щелкнув файл «STMFlashLoader Demo.exe».

Прежде чем продолжить, убедитесь, что плата STM32 Blue Pill Board подключена к USB-последовательному программатору через соединения USART, а на выводе BOOT0 установлен ВЫСОКИЙ уровень.

Если вы уже подключили USB-последовательный адаптер к компьютеру, выберите правильный COM-порт из раскрывающегося списка и нажмите «Далее». Если все пойдет хорошо, вы получите сообщение «Цель доступна для чтения. Пожалуйста, нажмите «Далее», чтобы продолжить». Нажмите «Далее».

На следующей странице отображается информация, связанная с целью. Нажмите «Далее».

На следующей странице выберите параметр «Загрузить на устройство» и выберите загруженный двоичный файл. После этого начальный адрес будет автоматически заполнен как 8000000.

Когда вы нажмете «Далее», инструмент начнет загрузку двоичного файла загрузчика USB в MCU.

Если все пойдет хорошо, вы получите сообщение «Операция загрузки успешно завершена». Вы можете закрыть инструмент.

Убедитесь, что на контакте BOOT0 установлен НИЗКИЙ уровень, и отсоедините преобразователь USB в USART от платы STM32.

Программирование STM32F103C8T6 через USB-порт

Установка необходимых драйверов

Прежде чем продолжить, вам необходимо загрузить некоторые драйверы.Сначала загрузите инструмент, связанный с STM32 для Arduino, по этой ссылке. Нажмите «Клонировать или загрузить» и нажмите «Загрузить ZIP». Извлеките содержимое и переименуйте папку в «Arduino_STM32». Скопируйте эту папку и вставьте ее в каталог «C:\Users\TrailBlazer\Documents\Arduino\hardware».

ПРИМЕЧАНИЕ. В приведенном выше пути «TrailBlazer» — это мое имя пользователя. Замените его своим. Если каталог Arduino\hardware отсутствует, создайте его.

Откройте командную строку с правами администратора и перейдите в каталог «C:\Users\TrailBlazer\Documents\Arduino\hardware\Arduino_STM32\drivers\win». Сначала запустите файл «install_drivers.bat». Это приведет к установке драйвера Maple DFU и последовательного драйвера Maple.

Кроме того, запустите файл install_STM_COM_drivers.bat, чтобы установить последовательный драйвер STM.

Настройка Arduino IDE

Если ваша Arduino IDE уже открыта, закройте ее, подключите STM32 Blue Pill к ПК через кабель microUSB и перезапустите IDE. В среде разработки Arduino перейдите в раздел «Инструменты» и внесите необходимые изменения в селектор платы, как указано в руководстве «Начало работы с STM32F103C8T6».

Но вам нужно изменить параметр «Метод загрузки» на «Maple DFU Bootloader 2.0». Остальные настройки останутся прежними.

Загрузка программы

В качестве примера программы напишите простой Blinky Sketch для STM32F103C8T6 Blue Pill Board. Убедитесь, что светодиод выбран как PC13, и нажмите «Загрузить». Программа будет загружена через USB-порт платы STM32.

Заключение

Здесь показано пошаговое руководство по загрузке USB-загрузчика для STM32F103C8T6 Blue Pill Board и его программированию с использованием встроенного порта microUSB.

Отладочная плата STM32 с микроконтроллером STM32F103C8 становится все более популярной благодаря архитектуре ARM Cortex M3, высокой скорости работы и большему количеству периферийных устройств. Кроме того, поскольку эту плату можно легко запрограммировать с помощью Arduino IDE, она стала предпочтительным выбором для многих любителей и инженеров для быстрого прототипирования.

В предыдущем уроке мы изучили основы макетной платы STM32, а также запрограммировали ее на мигание светодиодом. Но был у него один огромный недостаток. Чтобы запрограммировать плату, мы использовали модуль программатора FTDI, а также должны были переключать перемычку загрузки 0 между положениями 1 и 0 при загрузке и тестировании кода, что, безусловно, является сложной задачей. Также порт mini-USB на макетной плате остался совершенно неиспользованным. Причина этого в том, что при покупке отладочной платы STM32 она не поставляется с готовым загрузчиком Arduino, и, следовательно, плата не будет обнаружена вашим компьютером при подключении через USB.

Однако мы надеемся, что существует экспериментальный загрузчик, разработанный LeafLabs для миниплат Maple. Этот загрузчик можно прошить в STM32 один раз, после чего мы можем напрямую использовать USB-порт платы STM32 для загрузки программ, как и любые другие платы Arduino. Однако на момент написания этого руководства этот загрузчик все еще находился в стадии разработки и не рекомендуется для критически важных приложений. Прежде чем приступить к этому руководству, убедитесь, что вы прочитали предыдущее руководство, чтобы понять основы этой платы, включая подробности о спецификациях и выводах.

Необходимые материалы

  • STM32 — макетная плата (BluePill) (STM32F103C8)
  • Программист FTDI
  • Макет
  • Подключение проводов
  • Ноутбук с доступом в Интернет

Схема

Чтобы запрограммировать плату STM32 Blue Pill непосредственно через USB-порт, нам нужно сначала установить загрузчик Maple в MCU. Для этого нам нужно использовать плату Serial FTDI. Эта плата подключена к контактам Rx и Tx STM32, как показано ниже.

Вывод Vcc платы FTDI подключен к выводу STM32 5V питания платы. Земля подключена к земле STM32. Контакты Rx и Tx платы FTDI подключены к контактам A9 и A10 STM32 соответственно.Где A9 — это вывод Tx микроконтроллера STM32, а A10 — вывод Rx.

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

Загрузка загрузчика Maple Boot на плату разработки STM32

После того, как мы установили указанное выше подключение, подключите плату FTDI к компьютеру и следуйте инструкциям, чтобы запустить загрузчик в STM32.

Шаг 1. Мы должны загрузить двоичные файлы программы загрузчика (bin-файл) со страницы github. Существует множество версий bin-файла, для платы Blue Pill используйте эту ссылку на github и нажмите кнопку загрузки, чтобы загрузить bin-файл.

Шаг 2: Затем нам нужно загрузить и установить программное обеспечение загрузчика STM Flash, чтобы прошить загруженный файл bin в STM32. Нажмите на эту ссылку, чтобы перейти на веб-сайт ST, прокрутите вниз и нажмите «Получить программное обеспечение»

Шаг 3: Чтобы загрузить программное обеспечение, вам необходимо ввести свой адрес электронной почты, и ссылка для скачивания будет отправлена ​​на ваш адрес электронной почты. Затем перейдите по ссылке обратно на веб-сайт и снова нажмите «Получить программное обеспечение», и загрузка начнется. Да, это немного расстраивает, но так и должно быть. Не забудьте проверить папку со спамом на наличие электронного письма, иногда письмо приходит через пару минут.

Шаг 4. После загрузки установите программное обеспечение, убедитесь, что плата STM32 подключена к компьютеру через плату FTDI, а затем запустите программное обеспечение. Программное обеспечение автоматически обнаружит COM-порт, если не использовать диспетчер устройств, и убедитесь, что вы выбрали правильный номер COM-порта. В моем случае это COM4. Остальные настройки оставьте такими, как показано ниже.

Шаг 5. Дважды нажмите кнопку «Далее», и программа снова автоматически обнаружит сведения о плате и отобразит их, как показано ниже. Мы используем плату STM32F1 с флэш-памятью 128 КБ.

Шаг 6. На следующем шаге выберите «Загрузить на устройство», перейдите в папку, в которую мы загрузили наш bin-файл на шаге 1, и выберите его. Нажмите «Далее».

Шаг 7. Программное обеспечение загрузит необходимые файлы, как показано ниже, а затем начнет процесс прошивки.

Шаг 8. После успешного завершения прошивки вы увидите показанный ниже экран. Нажмите «Закрыть» и выйдите из приложения. Мы успешно прошили плату STM32 загрузчиком Arduino. Теперь нам нужно подготовить Arduino IDE и установить драйверы, прежде чем мы сможем запрограммировать плату STM32.

Подготовка Arduino IDE и установка драйверов

Выполните следующие шаги, чтобы загрузить и подготовить среду разработки Arduino для использования с платой разработки STM 32.

Шаг 1. Если вы еще не установили среду разработки Arduino IDE, загрузите и установите ее по этой ссылке. Убедитесь, что вы выбрали правильную операционную систему.

Шаг 2. После установки Arduino IDE откройте и загрузите необходимые пакеты для платы STM32. Это можно сделать, выбрав Файл -> Настройки.

Шаг 3. При нажатии на «Настройки» откроется показанное ниже диалоговое окно. В текстовом поле «Дополнительный URL-адрес менеджера досок» вставьте ссылку ниже

Шаг 4. Теперь перейдите в Инструменты -> Доски -> Диспетчер досок. Откроется диалоговое окно диспетчера плат, выполните поиск «STM32F1» и установите появившийся пакет.

Шаг 5. После установки пакета перейдите в папку C:\Program Files (x86)\Arduino\hardware\Arduino_STM32-master\drivers\win, где вы найдете install_drivers.bat и < em>install_STM_COM_drivers.bat.

Шаг 6. Нажмите на оба bat-файла и установите драйверы. Вы получите экран DOS, как показано ниже.

Теперь Arduino IDE подготовлена ​​для программирования макетной платы STM32 (Blue Pill), а также установлены драйвера.

Программирование STM32 (Blue Pill) напрямую через USB-порт

Удалите плату FTDI и все существующие соединения с вашего STM32. Просто используйте порт micro-USB на плате STM32, чтобы подключить ее к компьютеру, как показано ниже. Убедитесь, что контакт перемычки 0 снова установлен на 0 (рабочий режим). В дальнейшем нам больше не нужно переключать перемычку для загрузки и запуска программ.

Теперь ваш компьютер должен быть в состоянии обнаружить Доску. Подождите некоторое время, если вы видите, что какие-либо дополнительные драйверы устанавливаются. Затем войдите в Диспетчер устройств и проверьте, обнаружена ли ваша плата STM32 в разделе COM и портов, как показано ниже. Мой подключен к COM8 с именем Maple Mini.

Перейдите в раздел Инструменты и прокрутите вниз, чтобы найти серию Generic STM32F103C, как показано ниже. Затем убедитесь, что выбран вариант Тип флэш-памяти 64k, скорость процессора 72 МГц, и измените способ загрузки на STM32duino Bootloader. Также выберите правильный COM-порт в соответствии с портом в диспетчере устройств.

После внесения всех изменений проверьте нижний правый угол Arduino IDE, и вы увидите, что установлен следующий параметр. Моя плата STM32 подключена к COM8, но ваша может отличаться

Теперь Arduino IDE готова для программирования отладочных плат STM 32 Blue Pill. Давайте загрузим пример программы Blink из Arduino IDE на плату STM32 Blue Pill, чтобы убедиться, что все работает правильно. Пример программы можно найти по адресу

В открывшемся примере программы нам нужно внести небольшое изменение. По умолчанию программа будет написана для PB1, но на нашей плате встроенный светодиод подключен к PC13, поэтому замените все PB1 на PC13, и мы готовы продолжить. Полный пример измененной программы также можно найти внизу этой страницы.

Код только внутри функции loop показан ниже, где мы можем заметить, что контакт PC13 остается в ВЫСОКОМ (включенном) состоянии в течение 1000 миллисекунд, а затем становится НИЗКИМ (выключается) еще на 1000 миллисекунд и это делается бесконечное количество раз, так как это находится в функции loop. Таким образом, светодиод мигает с интервалом в 1000 миллисекунд.

Нажмите кнопку загрузки в Arduino IDE, и ваша программа должна быть скомпилирована и загружена. Если все работает так, как ожидалось, вы должны увидеть следующее на консоли Arduino IDE.

Если Программа была успешно загружена, вы должны увидеть зеленый светодиод, мигающий с интервалом в 1 секунду, как показано на видео ниже. Вы также можете повозиться с программой, чтобы увеличить или уменьшить задержку. Теперь вы можете начать использовать плату разработки STM32 (Blue Pill), как и любые другие платы Arduino, то есть вам больше не нужно менять положение перемычек или использовать внешнее оборудование для загрузки и тестирования программ.

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

Надеюсь, это не совсем по теме и никого не расстроит, но, пожалуйста, извините, если это так.
У меня есть несколько плат с системным минимумом STM32F103C8T6, купленных на ebay и Amazon в количестве 1 и 2. Все они программируемые и выглядят нормально (все светодиоды PC13), за исключением того, что у меня нет USB на большинстве из них, либо с помощью вашего загрузчика, либо с помощью скомпилированного кода Arduino. У меня есть CKS32F103, работает нормально. Все остальные 6 имеют процессоры с маркировкой STM32F103, но качество маркировки чипов и различные варианты упаковки наводят меня на мысль, что они могут быть не подлинными STM32. Как бы то ни было, я купил STM32 у Farnell в Великобритании и заменил один из процессоров на неработающей (USB) плате — и USB заработал, как и ожидалось. Должен отметить, что на некоторых платах я изменил R10 на 1.5K без видимой разницы.
Windows 10 сообщает об отсутствии дескриптора USB. Все платы, которые не работают, были куплены в прошлом месяце и имеют 4-контактный низкопрофильный переключатель сброса, а не 2-контактный прямоугольный на плате CKS.
Единственная возможность, которая, как я вижу, может быть хорошей новостью, заключается в том, что ST выпустила обновление для чипа STM32, которое сломало ваш код, а также код Arduino. Я признаюсь, что не пробовал маршрут STCUbe, так как после загрузки мне показалось ужасно тяжелой работой получить скомпилированный двоичный файл, и, поскольку все чипы помечены как STM32, а код явно работает на подлинном STM32, я бы не пошел туда на данный момент. .
Кто-нибудь может проверить, есть ли у них похожие проблемы, не делаю ли я где-то глупую ошибку, может быть, в обращении находится партия сломанных STM32 или есть вполне веская причина, по которой новые чипы STM32 не работает с загрузчиком и кодом Arduino и будет ли это исправлено в будущем? Потому что будет очень сложно использовать платы для любого приложения, которому нужен USB, если многие придется отбрасывать как не имеющие работающего USB. Различить доски на Ebay/Amazon непросто. Я заказал один с квадратным сбросом на картинке, но это не то, что я получил, и отправка досок за 2 фунта стерлингов обратно слишком похожа на тяжелую работу.
Прилагаются изображения 2 рабочих плат (CKS и перепайка) и 3 нерабочих плат.

Изображение 1 — рабочий оригинальный чип CKS
Изображение 2 – замена STM32 от Farnell - теперь работает
Изображение 3-5 Нерабочие платы в комплекте.

Текст был успешно обновлен, но возникли следующие ошибки:

adamfxtion прокомментировал 8 октября 2019 г.

Запчасти были заказаны как минимум тремя разными партиями (и было еще несколько, которые я не удосужился сфотографировать и опубликовать), поэтому мне кажется очень маловероятным, что это проблема одного поставщика.
Учитывая, что у меня было 6 (у меня 5) ни одного работающего USB, странные сухие соединения и плохая пайка выглядят одинаково маловероятными. В любом случае, на плате, на которой я заменил ЦП, я проверил USB-соединения, переключив контакты USB IO непосредственно из кода, который работал нормально. Я также перепаял разъем USB и проверил, все ли в порядке. (У меня есть переходная плата USB, которая позволила мне проверить подключение).
Я полностью убежден, что это проблема чипа. В чем я не уверен, так это в том, что проблема связана с тем, что законные STM32 имеют другую спецификацию, новую или старую, или, что более вероятно, учитывая качество печати на упаковке, они не являются подлинными деталями ST. Если это так, было бы очень сложно купить платы с уверенностью в том, что они могут работать правильно, когда требуется USB.
О чем я также не упомянул, но должен был упомянуть, что при программировании их с помощью STlink мне нужно нажать кнопку сброса, чтобы перевести чип(ы) в программный режим. В противном случае STM не будет обнаружен. На 2-х платах с работающим USB нажатие сброса не требуется для входа в режим программирования.

прокомментировал stevstrong 9 октября 2019 г.

То, что STLink не распознает цель, не означает, что чип неисправен, это может зависеть от настройки порта отладки. Если он отключен, STLink может подключиться к цели только вскоре после сброса, что является «нормальным».
STLink сообщает о правильном чипе?
Вы пробовали прошивать с помощью STLink простой блинк-скетч? Это работает?

прокомментировал rogerclarkmelbourne 9 октября 2019 г.

Еще одна возможность — один из тех поддельных чипов STM32, у которых может быть другой идентификатор

adamfxtion прокомментировал 9 октября 2019 г.

Большое спасибо за то, что нашли время ответить, и за терпение. Я сделаю все возможное, чтобы предоставить точную информацию.
Во-первых, хотя я новичок в чипе STM32, я более 25 лет разрабатывал микроконтроллеры многих марок, как дизайн печатных плат, так и программное обеспечение.
Я также уже несколько лет использую Arduino/Platformio-VSC с ядрами Atmel, PIC32, ESP8266 и ESP32. Тем не менее, у меня нет большого опыта работы со стеками USB в этих микроконтроллерах (или где-либо еще), поэтому я нахожусь на очень новой территории с STM32 в целом и с периферийными устройствами USB в частности, но должен быть на более прочной основе со всем остальным.
Достаточно об этом.

Роджер,
Если я начну с вашей точки зрения, вы имеете в виду идентификатор устройства 0x410, показанный программистами (о котором сообщают все чипы), или какой-то другой идентификатор, связанный с портом USB?

Stev,
Дальнейшее расследование показало, что сброс был отвлекающим маневром с моей стороны. Все платы не могут обнаружить STM32 после выключения питания STlink/STM32. После этого все они обнаруживают достаточно надежно. Мои извинения за это.
STlink может сообщать о чипе правильно, а может и нет, поскольку он только указывает (снято с использованием выходных данных программатора STM32 Cube)

Устройство STM32F101/F102/F103 средней плотности
Тип MCU
Идентификатор устройства 0x410
Размер флэш-памяти 64 КБ

Выходные файлы журналов (подробно) для рабочей и нерабочей доски (прикреплены ниже) выглядят одинаково.

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

У меня нет проблем с программированием любого из чипов с помощью программаторов Serial (FT232) или STlink. Я не знаю, что такое «отладочный» порт, о котором вы упоминаете - если это USB-порт последовательной отладки, встроенный в пакет Arduino кода STM32, который я загружаю, то я загружаю один и тот же код на все устройства. Все они утверждают, что являются STM32 по маркировке. Платы (почти) идентичны и имеют светодиод на PC13, который мигает, как и ожидалось. Я также дважды пытался заставить загрузчик работать и просто скомпилировал и загрузил простой скетч с миганием, как с отпечатками последовательного порта USB, так и без них. Я могу успешно запрограммировать все платы, используя Serial или STlink, но только плата с поставляемым Farnell STM32 работает с последовательным портом USB - все они мигают светодиодом, как и ожидалось. Плата с CKS32 также программируется, а USB работает как с загрузчиком, так и с кодом пользователя, как и ожидалось.
Программатор STlink сообщает STM32 во всех случаях чипов STM32. Чип CKS не знаю.

Всякий раз, когда продукт становится популярным, это только вопрос времени, когда у других компаний возникнет желание воспользоваться этой популярностью. Это явление является основной причиной того, почему за эти годы было произведено так много ужасных игрушек и видеоигр. Тем не менее, он также движет миром электроники. Поэтому неудивительно, что очень успешная серия микроконтроллеров (MCU) на базе ARM от ST получила свою долю имитаций, клонов и откровенных подделок.

Подделки, вероятно, являются наиболее проблематичными, так как эти чипы выдают себя за подлинные детали STM32 вплоть до маркировки на корпусе микросхемы, в то время как совместимость с частью, за которую они выдают себя, может сильно отличаться. Для имитаций и клонов, которые несут свои собственные маркировки, все немного более неясно, поскольку можно было бы разумно предположить, что эти компании просто так случайно разработали микроконтроллеры, которые чисто по совпадению оказались полностью совместимыми по выводам и регистру с этими очень популярными. конкурирующие конструкции MCU. Это было бы самой искренней формой лести.

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

Анатомия подделки

Хорошая микросхема STM32 слева, клон справа, с дополнительными ямочками.

Ранее в этом году Кейр Фрейзер опубликовал информативную сводку некоторых поддельных микросхем STM32F103, найденных на так называемой «Blue Pill» и подобных платах на своем Github. Подделки имеют те же маркировки на упаковке, что и оригинальные детали STM32, но их часто можно отличить по рисунку ямочек на упаковке или по качеству трафаретной печати.

Эти подделки не всегда полностью функциональны. Как отмечает Фрейзер, многие из этих частей нельзя даже правильно запрограммировать или даже запустить такой простой код, как универсальный пример «мигания». Вполне возможно, что эти подделки на самом деле являются дефектными кристаллами STM32F103 или аналогичными, которые продаются по нелегальным каналам.

STM32FEB. STM32 это не так.

Возможно, более коварными являются почти подделки, которые на первый взгляд могут выглядеть как настоящие детали, но их выдает идентификация на них: «STM32FEBKC6». Это незаконный код деталей ST, и это должно быть первым советом. Это еще один клон, который, скорее всего, не принесет вам ничего, кроме горя, поскольку даже когда он работает, это урезанная версия дизайна STM32F103 с отсутствующими функциями. Найти подробную информацию о нем также сложно.

Хорошие художники копируют

CS32F103. Более честный клон.

Остается самый хитрый из клонов в виде вышеупомянутого CS32F103. Этот клон, по сути, работает как настоящий и может прекрасно запускать Blinky, скомпилированный для STM32F103. Некоторые из этих MCU могут быть даже помечены как часть ST, что затрудняет их окончательную идентификацию.

Некоторые из них произведены китайской компанией CKS (中科芯微), которая, по-видимому, создала полнофункциональную версию STM32F103, в которой были исправлены некоторые ошибки, перечисленные в техническом описании ST. В статье на CNXSoft содержится более подробная информация об этом MCU.

Существенное отличие этого чипа, с которым можно быстро столкнуться, заключается в том, что при программировании он получает сообщение «НЕОЖИДАННЫЙ idcode: 0x2ba01477». Причина этого в том, что MCU STM32F103 сообщает ID 0x1ba01477, сбивая с толку программиста. Это можно исправить, например, в OpenOCD с помощью сценария конфигурации, который либо не указывает CPUTAPID (0), либо этот идентификатор сообщается MCU CS32.

Клоны Giga

Вероятно, одним из самых известных производителей клонов STM32 является компания GigaDevice со своими микроконтроллерами GD32. Как отмечается в серии статей SMD Prutser, GD32F103 представляется более быстрой и функциональной версией STM32F103. У него более высокая максимальная тактовая частота и более быстрая флэш-память, а устройство без колпачка показывает, что внутри упаковки использовались два кристалла. Один для MCU, а другой для флэш-памяти, что позволяет довольно гибко изменять размеры флэш-памяти в ассортименте продукции.

Декапированный микроконтроллер GD32F103. Отдельный кубик Flash виден сверху.

На первый взгляд микроконтроллеры GD32 выглядят более привлекательными, чем серия STM32F1, со значительным увеличением тактовой частоты (72 МГц против 108 МГц) и флэш-памяти. В то время как флэш-память на GD32 должна быть очень медленной, поскольку она представляет собой последовательное ПЗУ SPI, использование SRAM на кристалле микроконтроллера для «кэширования» флэш-памяти означает, что она оказывается намного быстрее, чем флэш-память на кристалле, с нулевым состояния ожидания требуются даже при полной тактовой частоте MCU.

Недостаток большего объема SRAM вместо чистой флэш-памяти заключается в том, что это увеличивает энергопотребление, особенно в спящем режиме. Это также вызывает (небольшую) задержку загрузки, когда содержимое ПЗУ SPI копируется в SRAM до того, как прошивка может быть запущена. В зависимости от приложения это может быть преимуществом или недостатком. Это, конечно, тот же подход, что и в микроконтроллере ESP8266, который также использует внешнее SPI ROM для прошивки.

Однако, когда дело доходит до других устройств GD32, они, похоже, менее заинтересованы в создании прямых клонов. Их микроконтроллер GDF303 сохранил те же периферийные устройства, что и GDF103, хотя периферийные устройства STM32F3, возможно, лучше. Это также запрещает их использование в качестве встроенного решения для плат STM32F3xx. В зависимости от вашего мнения о периферийных устройствах STM32F1 это также может повлиять на решение об использовании этих микроконтроллеров GD32.

Они везде

Подлинный микроконтроллер CH32F103 на плате Blue Pill.

Хоть я и был в курсе вышеупомянутых фейков и клонов, тем не менее недавно наткнулся на новый. Это включало покупку нескольких плат Blue Pill STM32F103 у крупного немецкого импортера и торгового посредника всех видов татуировок Maker.Я не гордился этим, но мне нужны были дешевые платы для датчиков BlackMagic, и у них была хорошая сделка. В комментариях к списку Amazon некоторые люди упомянули, что получили настоящие доски, а другие упомянули, что это «подделка».

В духе нездорового любопытства я получил пару таких плат и был одновременно в ужасе и рад видеть, что на самом деле я получил платы Blue Pill, на которых не было обещанного микроконтроллера STM32F103C8T6, а вместо этого была маркировка CH32F103C8T6. С другой стороны, он не претендовал на роль части ST.

Подлинный микроконтроллер STM32F103 на плате Blue Pill.

Этот микроконтроллер CH32F103 производится китайской компанией WCH. Технические описания и справочное руководство (только на китайском языке) доступны для загрузки. При беглом взгляде и в техпаспорте, и в руководстве показана микросхема, практически идентичная STM32F103, с идентичным отображением памяти и периферийными регистрами.

Подключение его к ключу ST-Link/V2 и подключение к нему с помощью OpenOCD приводит к той же ошибке CPUTAPID, что и для MCU CS32F103 при использовании файла профиля STM32F1xx. После внесения такого же изменения в файл stm32f1xx.cfg, как было предложено другими, я смог без проблем прошить пример «Blinky» из моего проекта Nodate STM32 на плату.

Это говорит о том, что, по крайней мере, основные функции RCC (сброс и управление часами), GPIO и SysTick достаточно схожи, чтобы такой базовый тест работал. Далее мне нужно выяснить, поддерживает ли он функции USART, DMA, SPI, I2C и I2S так же, как микроконтроллер STM32F103, который у меня есть на нескольких других платах. Если этот MCU похож на часть CS32F103, ответ, вероятно, «да».

Что касается ответа продавца, когда я связался с ним по поводу этих плат Blue Pill без рекламируемой детали STM32, они признали, что знали об этом, и заявили, что «через два месяца» у них снова будут платы с подлинными деталями STM32. . По общему признанию, это вызывает гораздо больше вопросов, чем дает ответов, и менее всего, почему они сознательно продают платы, на которых нет рекламируемого MCU.

Пора паниковать?

Острый взгляд среди нас мог заметить, что практически все эти клоны используют микроконтроллеры Cortex-M первого поколения ST (серия STM32F1). Если вам не нужно покупать платы Blue Pill для коммерческих проектов, это вряд ли вызовет больше, чем серьезное раздражение у любителей и других, которым нравится иметь стопку плат Cortex-M3 за 3 доллара для случайных проектов. Если кто-то заказывает микроконтроллеры и платы для разработки у известных продавцов, таких как Digikey и Mouser, это также вряд ли будет проблемой.

Платы Blue Pill и Black Pill недавно подверглись капитальному ремонту: обновлены версии с микроконтроллерами на базе STM32F4. Хотя они немного дороже аналогов на базе STM32F103, они приносят значительно больше ресурсов и гораздо более приятную (на мой взгляд) периферию линейки STM32F4. Они могут просто создать рынок для STM32F103, а вместе с ним иссякнут эти бесчисленные клоны, подделки и копии.

До тех пор, пока на рынке не появятся первые партии поддельных, клонированных и скопированных микроконтроллеров STM32F401 и STM32F411. Потому что это, по-видимому, название игры.

Читайте также: