Заливка прошивки в STM32 через USB. Прошивка stm32 через UART Прошивка stm32

Ответы на часто задаваемые вопросы:

  • 1. Для кого предназначен этот FAQ?

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

  • 2. Для чего и от кого делается защита микроконтроллеров?

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

  • 3. Что представляет собой защита от копирования в микроконтроллере, и почему я сам не могу считать защищенную микропрограмму (прошивку)?

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

  • 4. Что дает мне снятие защиты от чтения микропрограммы (прошивки)?

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

  • 5. Какова законность таких действий с точки зрения законодательства?

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

    Наша компания работает на территории РФ, поэтому ниже приведем цитату из закона. Законодательство других стран декларирует аналогичную позицию.

    Статья 1280 ГК РФ. "Свободное воспроизведение программ для ЭВМ и баз данных. Декомпилирование программ для ЭВМ".

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

    3. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения воспроизвести и преобразовать объектный код в исходный текст (декомпилировать программу для ЭВМ) или поручить иным лицам осуществить эти действия, если они необходимы для достижения способности к взаимодействию независимо разработанной этим лицом программы для ЭВМ с другими программами, которые могут взаимодействовать с декомпилируемой программой...

  • 6. Что представляет собой дополнительная защита от чтения и почему она лучше обычной?

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

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

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

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

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

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

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

  • Как вы уже догадались, в этой статье пойдет речь о последнем способе. Я считаю его не самым лучшим вариантом для постоянного использования, однако в некоторых случаях он очень даже хорош. Вот допустим устройство уже готово и работает у пользователя, и вдруг ВНЕЗАПНО возникает потребность в перепрошивке. Конечно, можно разобрать девайс и подпаяться к отладочному интерфейсу, но это относительно сложно + нужен отладчик. А что если устройство уже соединено с компом через UART ? В этом случае гораздо проще использовать этот интерфейс для загрузки прошивки. Вот тут-то загрузчик будет очень кстати. Пользователю достаточно нажать одну кнопку и девайс входит в режим прошивки. Пару нажатий мышки и прошивка обновлена. Теперь попробуем разобраться более детально как все это работает. Для начала нам нужно подключить наш контроллер к компьютеру через интерфейс USART1.

    Для управления загрузкой контроллера существуют два вывода BOOT1 и BOOT0. В зависимости комбинаций логических уровней на них, контроллер при включении питания начнет выполнять код из разных областей памяти. Это видно из таблицы ниже:

    BOOT1 BOOT0 Что запускается
    Х 0 Программа прошитая во FLASH
    0 1 Загрузчик
    1 1 Программа из SRAM

    Как вы помните из , загрузчик сидит в области памяти под названием Sytem Memory. Каким либо образом изменить его нельзя. Это делает контроллер не убиваемым в плане софта, даже если перепрошивку неожиданно прервут — девайсу ничего не грозит. Всегда можно будет начать прошивку заново. С другими пунктами таблицы все просто: первая комбинация означает, что контроллер будет запускать прошивку которую в него прошили, а последняя комбинация — означает, что контроллер будет выполнять код из ОЗУ который еще как-то туда надо поместить. Пока не совсем понимаю для чего это нужно, разве что программа выполняется быстрей (если верить интернетам). Вернемся к загрузчику. Чтоб ввести наш контроллер в режим прошивки, удерживаем кнопку BOOT и жмем RESET. После этого кнопку можно отпустить. Для прошивки используется специальный софт который называется Flash Loader Demonstrator. Вы можете скачать его на сайте ST или у меня . Процедура прошивки проста до безобразия: Достаточно лишь следовать указаниям мастера. На первом шаге нас попросят выбрать номер ком порта к которому подключен контроллер и указать настройки соединения. Что примечательно у загрузчика есть автодетект скорости. Это значит что можно свободно выбрать любую скорость из списка и оно заработает. Лишь бы ваш адаптер RS232 — UART (или USB-UART) её поддерживал. Мой преобразователь на CP2102 о котором я вкратце , отлично работает на всех скоростях. Однако, нужно иметь в виду, что загрузчик настраивает контроллер на тактирование от внутреннего генератора. А его частота сильно плавает в зависимости от напряжения питания и температуры. Следовательно если у вас проблемы со стабильностью этих двух параметров, то лучше выбирать маленькую скорость.

    Если соединение с контроллером установлено, то программа нарисует нам окно в котором покажет сколько памяти у программирования контроллера и включена ли защита памяти от чтения. Если контроллер защищен от считывания прошивки, то вы можете снять защиту, но при этом содержимое флеш памяти будет уничтожено. Это делается кнопкой «Remove protection» которая у меня не доступна т.к. защита памяти не включена.

    Следующий шаг мастера показывает какие страницы flash памяти защищены от записи/чтения. Нужно не забыть выбрать объем памяти которым обладает программируемый контроллер. Кажется там есть автодетект который сам сделает правильный выбор, но я не уверен. У моего контроллера есть 128 кБайт памяти, что я и выбрал:

    Самый интересный шаг мастера. На нем мы можем выбрать то, что хотим сделать с контроллером. Можем очистить память контроллера. Как всю, так и некоторые страницы. Само собой можно прошить контроллер. Программировать и очищать память можно только если это не было запрещено. Есть возможность проверить содержимое памяти после прошивки. Или можно сразу начать выполнение прошитой программы. Чтение памяти возможно опять таки если это не запрещено. Снять или установить защиту от записи/чтения можно в этом же окне. Еще можно редактировать «Option bytes». Что это такое я пока особо не разбирался, поэтому ничего вразумительного сказать не могу.
    . Если остались вопросы касаемо загрузчика — спрашивайте, попробую ответить.

    Опубліковано 09.08.2016

    Микроконтроллеры STM32 приобретают все большую популярность благодаря своей мощности, достаточно разнородной периферии, и своей гибкости. Мы начнем изучать , используя бюджетную тестовую плату, стоимость которой не превышает 2 $ (у китайцев). Еще нам понадобится ST-Link программатор, стоимость которого около 2.5 $ (у китайцев). Такие суммы расходов доступны и студентам и школьникам, поэтому именно с такого бюджетного варианта я и предлагаю начать.


    Этот микроконтроллер не является самым мощным среди STM32 , но и не самый слабый. Существуют различные платы с STM32 , в томе числе Discovery которые по цене стоят около 20 $. На таких платах почти все то же, что и на нашей плате, плюс программатор. В нашем случае мы будем использовать программатор отдельно.

    Микроконтроллер STM32F103C8. Характеристики

    • Ядро ARM 32-bit Cortex-M3
    • Максимальная частота 72МГц
    • 64Кб Флеш память для программ
    • 20Кб SRAM памяти
    • Питание 2.0 … 3.3В
    • 2 x 12-біт АЦП (0 … 3.6В)
    • DMA контролер
    • 37 входов / выходов толерантных к 5В
    • 4 16-розрядних таймера
    • 2 watchdog таймера
    • I2C – 2 шины
    • USART – 3 шины
    • SPI – 2 шины
    • USB 2.0 full-speed interface
    • RTC – встроенные часы

    На плате STM32F103C8 доступны

    • Выводи портов A0-A12 , B0-B1 , B3-B15 , C13-C15
    • Micro-USB через который можно питать плату. На плате присутствует стабилизатор напряжения на 3.3В. Питание 3.3В или 5В можно подавать на соответствующие выводы на плате.
    • Кнопка Reset
    • Две перемычки BOOT0 и BOOT1 . Будем использовать во время прошивки через UART .
    • Два кварца 8Мгц и 32768 Гц. У микроконтроллера есть множитель частоты, поэтому на кварце 8 МГц мы сможем достичь максимальной частоты контроллера 72Мгц.
    • Два светодиода. PWR – сигнализирует о подачи питания. PC13 – подключен к выходу C13 .
    • Коннектор для программатора ST-Link .

    Итак, начнем с того, что попробуем прошить микроконтроллер. Это можно сделать с помощью через USART, или с помощью программатора ST-Link .

    Скачать тестовый файл для прошивки можно . Программа мигает светодиодом на плате.

    Прошивка STM32 с помощью USB-Uart переходника под Windows

    В системной памяти STM32 есть Bootloader . Bootloader записан на этапе производстве и любой микроконтроллер STM32 можно запрограммировать через интерфейс USART с помощью USART-USB переходника. Такие переходники чаще всего изготавливают на базе популярной микросхем FT232RL . Прежде всего подключим переходник к компьютеру и установим драйвера (если требуется). Скачать драйвера можно с сайта производителя FT232RL – ftdichip.com . Надо качать драйвера VCP (virtual com port). После установки драйверов в компьютере должен появиться виртуальный последовательный порт.


    Подключаем RX и TX выходы к соответствующим выводам USART1 микроконтроллера. RX переходника подключаем к TX микроконтроллера (A9). TX переходника подключаем к RX микроконтроллера (A10). Поскольку USART-USB имеет выходы питания 3.3В подадим питания на плату от него.

    Чтобы перевести микроконтроллер в режим программирования, надо установить выводы BOOT0 и BOOT1 в нужное состояние и перезагрузить его кнопкой Reset или выключить и включить питание микроконтроллера. Для этого у нас есть перемычки. Различные комбинации загоняют микроконтроллер в различные режимы. Нас интересует только один режим. Для этого у микроконтроллера на выводе BOOT0 должно быть логическая единица, а на выводе BOOT1 – логический ноль. На плате это следующее положение перемычек:

    После нажатия кнопки Reset или отключения и подключения питания, микроконтроллер должен перейти в режим программирования.

    Программное обеспечение для прошивки

    Если используем USB-UART переходник, имя порта буде примерно такое /dev/ttyUSB0

    Получить информацию о чипе

    Результат:

    Читаем с чипа в файл dump.bin

    sudo stm32flash -r dump.bin /dev/ttyUSB0

    Пишем в чип

    sudo stm32flash -w dump.bin -v -g 0x0 /dev/ttyUSB0

    Результат:

    Stm32flash 0.4 http://stm32flash.googlecode.com/ Using Parser: Raw BINARY Interface serial_posix: 57600 8E1 Version: 0x22 Option 1: 0x00 Option 2: 0x00 Device ID: 0x0410 (Medium-density) - RAM: 20KiB (512b reserved by bootloader) - Flash: 128KiB (sector size: 4x1024) - Option RAM: 16b - System RAM: 2KiB Write to memory Erasing memory Wrote and verified address 0x08012900 (100.00%) Done. Starting execution at address 0x08000000... done.

    Прошивка STM32 с помощью ST-Link программатора под Windows

    При использовании программатора ST-Link выводы BOOT0 и BOOT1 не используются и должны стоять в стандартном положении для нормальной работы контроллера.

    (Книжка на русском языке)

    Маркировка STM32

    Device family Product type Device subfamily Pin count Flash memory size Package Temperature range
    STM32 =
    ARM-based 32-bit microcontroller
    F = General-purpose
    L = Ultra-low-power
    TS = TouchScreen
    W = wireless system-on-chip
    60 = multitouch resistive
    103 = performance line
    F = 20 pins
    G = 28 pins
    K = 32 pins
    T = 36 pins
    H = 40 pins
    C = 48/49 pins
    R = 64 pins
    O = 90 pins
    V = 100 pins
    Z = 144 pins
    I = 176 pins
    B = 208 pins
    N = 216 pins
    4 = 16 Kbytes of Flash memory
    6 = 32 Kbytes of Flash memory
    8 = 64 Kbytes of Flash memory
    B = 128 Kbytes of Flash memory
    Z = 192 Kbytes of Flash memory
    C = 256 Kbytes of Flash memory
    D = 384 Kbytes of Flash memory
    E = 512 Kbytes of Flash memory
    F = 768 Kbytes of Flash memory
    G = 1024 Kbytes of Flash memory
    I = 2048 Kbytes of Flash memory
    H = UFBGA
    N = TFBGA
    P = TSSOP
    T = LQFP
    U = V/UFQFPN
    Y = WLCSP
    6 = Industrial temperature range, –40…+85 °C.
    7 = Industrial temperature range, -40…+ 105 °C.
    STM32 F 103 C 8 T 6

    Как снять защиту от записи / чтения?

    Если вы получили плату с STM32F103, а программатор ее не видит, это означает, что китайцы защитили Флеш память микроконтроллера. Вопрос “зачем?” оставим без внимания. Чтобы снять блокировку, подключим UART переходник, будем программировать через него. Выставляем перемычки для программирования и поехали:

    Я это буду делать из под Ubuntu с помощью утилиты stm32flash.

    1. Проверяем видно ли микроконтроллер:

    Sudo stm32flash /dev/ttyUSB0

    Должны получить что-то такое:

    Stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version: 0x22 Option 1: 0x00 Option 2: 0x00 Device ID: 0x0410 (Medium-density) - RAM: 20KiB (512b reserved by bootloader) - Flash: 128KiB (sector size: 4x1024) - Option RAM: 16b - System RAM: 2KiB

    2. Снимаем защиту от чтения а затем от записи:

    Sudo stm32flash -k /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version: 0x22 Option 1: 0x00 Option 2: 0x00 Device ID: 0x0410 (Medium-density) - RAM: 20KiB (512b reserved by bootloader) - Flash: 128KiB (sector size: 4x1024) - Option RAM: 16b - System RAM: 2KiB Read-UnProtecting flash Done. sudo stm32flash -u /dev/ttyUSB0 stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version: 0x22 Option 1: 0x00 Option 2: 0x00 Device ID: 0x0410 (Medium-density) - RAM: 20KiB (512b reserved by bootloader) - Flash: 128KiB (sector size: 4x1024) - Option RAM: 16b - System RAM: 2KiB Write-unprotecting flash Done.

    Теперь можно нормально работать с микроконтроллером.

    Самый простой и доступный способ прошивки STM32 – с помощью бутлоудера , в этой статье мы рассмотрим как это сделать на примере платы miniSTM32F103V .

    Для начала давайте разберёмся, что такое бутлоадер или как его ещё называют загрузчик . Загрузчик - это просто программа, которая хранится в определённой секции памяти и может перезаписывать флеш микроконтроллера. Она зашивается при производстве чипа и её нельзя изменить каким-либо образом. Для того чтобы микроконтроллер зашёл в эту секцию памяти, надо вывод BOOT0 подтянуть к питанию, а вывод BOOT1 к земле. На плате эти два вывода находятся возле usb разъема, а подтяжка осуществляется с помощью перемычек.
    Ниже приведена таблица, которая определяет с какой области памяти запустится микроконтроллер после сброса, в зависимости от BOOT0 и BOOT1 .


    Предположим мы установили перемычки, теперь надо передать загрузчику hex-файл с прошивкой, передавать будем по uart , для этого нам потребуется преобразователь usb-uart .


    У меня такой преобразователь сделан на основе микросхемы FT232RL , используя тонкое жало для паяльной станции запаять её очень просто. Методика запайки следующая, первым дело надо прихватить по ножке с двух противоположных углов, затем когда микросхема зафиксирована, пропаять остальные ножки паяльником или феном. И последний штрих, ещё раз пропаиваем ножки, которые запаяли первыми, чтобы снять с них механическое напряжение.

    Подключаем переходник usb-uart к компьютеру и в зависимости от того на какой микросхеме он сделан CP2120 или FT232 , устанавливаем соответствующие драйвера. После этого он должен определиться в системе как COM_PORT.


    Теперь подключим наш переходник к плате, вывод RX переходника соединяем с выводом MCU_TхD , а вывод ТХ с выводом MCU_RхD . Топология платы, которую выслал продавец, немного отличается от той, что на верхней картинке, выводы для прошивки выведены отдельно и отмечены красными стрелочками.


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


    После установки программы выбираем com port, под которым определился наш переходник usb-uart и нажимаем кнопку NEXT, скорость определится автоматически. Если контроллер защищён от считывания, то защиту можно снять, нажав кнопку "Remove Protection" при этом флеш память будет стёрта и соответственно все данные, которые в ней записаны потеряны.


    Если контроллер не защищён появится окно изображенное ниже, в нём нажимаем кнопку NEXT.


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

    Готовую программу надо каким-либо образом запихать в контроллер. Для этого существует множество способов.

    JTAG/SWD адаптер
    Так как часто для отладки под ARM используется JTAG, то этот метод получается наверное самым популярным. Для этой цели используется какой-либо адаптер. Например я использую так что показывать буду на его примере. Там все просто — подключаешь адаптер к контроллеру стандартным SWD или JTAG шлейфом. Через линии NRST/TDI/TDO/TCK/TMS для JTAG или через SWO/SWOCLK/SWDIO/NRST для SWD режима. На адаптере моей верси CoLinkEX оба эти разьема выведены на одну колодку, так что получается как бы сразу и JTAG и SWD соединение. А там какое надо такое и выбираешь. Особой разницы в отладке/прошивке между ними нет.

    Либо используя утилитку CoFlash oт CooCox.com

    Чтобы Keil сгенерировал hex файл нужно выставить галочку в опциях проекта.

    Формат там такой:

    fromelf --bin --output .\имя_будущего_файла.bin .\имя_создаваемого_файла.axf

    Ну или, если выходные файлы создаются в какой-либо подпапке, то путь будет включать и эту подпапку

    Первичный Bootloader
    Если нет JTAG/SWD адаптера, то не беда. Достаточно иметь переходник или так как почти все ARM контроллеры содержат в памяти аппаратно встроенный бутлоадер, позволяющий накатить прошивку. Главное следить за тем, чтобы напряжение на выходе с адаптера совпадало с напряжением питания контроллера, а то можно пожечь входы (FTDI можно запитать от 3.3 вольт. А для работы с RS232 использвоать не MAX232, а MAX3232 — то же самое, но на 3.3 вольта). Я в качестве USB-UART использую свою демоплату с джампером питания выставленным на 3.3 вольта. Питание беру с той же платы.

    Вход Boot_0 выставыляю в 1, вход Boot_1 выставляю в 0. Набрасываю на RX1 и TX1 контроллера STM32F103C8 проводочки от RX-TX микрохсемы FTDI

    Настраиваем порт, жмем Next

    Тут можно посмотреть какие страницы флеша нам доступны на запись. Жмем Next

    Для LPC от NXP используется другая утилитка, зовется она Flash Magic — те же яйца, вид сбоку. Разве что может быть для входа в загрузчик надо другие выводы коротить. Это надо в User Manual на LPC уточнять уже.

    Mass Storage USB Bootloader
    Кроме того, у LPC1343 (у других LPC не встречал) есть одна прикольня фича. Там встроенный загрузчик может работать и по USB. Для этого надо собрать следующую схему:

    В противном случае мы, наверное, считаем мусор. А если удалить файл firmware.bin и на ее место записать файл с бинариком новой прошивки, то он вольется во флеш. Усе, не надо больше ничего! Красота! Правда в линухе оно работает не так как надо, дело в том, что линух пишет туда начиная со второго чтоль сектора и в результате Epic Fail. Впрочем, там же есть замечательная утилитка dd которая может скопировать на эту «флешку» файл в точности как надо, с нулевого адреса.

    Вторичный бутлоадер
    Поскольку я решил зарыться в STM32, то мне тоже захотелось такую вкусняшку как USB boot в режиме mass storage. Забросил идею Владимиру aka RtxOnAir и в результате он, за пару дней, выдал аналогичное решение для STM32F103.

    Для загрузки с USB нужна следующая схема:


    Транзистор подтягивает линию D+ к питанию и это означает, что на шине кто то появился, заставляя OС компа произвести определение устройства. Можно сделать и по колхозному. Подтянуть D+ через резистор напрямую. Но в этом случае для входа в бут придется передергивать шнур USB, иначе винда не захочет находить устройство. А так контроллер сам дернет вожжу.

    Штука у Владимира получилась классная — автоматом определяет все типы кристаллов серии F103, позволяет выбрать любую ногу для передергивания USB шиной. Для входа во вторичный бутлоадер надо выводы Boot_0 и Boot_1 посадить на землю и нажать RESET ну или воткнуть девайс в USB если шина у нас не коммутируемая. Также можно выбирать работу от внутреннего генератора или от внешнего.

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

    Конфигурация бутлоадера
    Для конфигурации нашего бута RtxOnAir написал небольшую утилитку:

    Запустив которую можно выбрать нужные опции и нажав «Ок» получить сконфигурированный бутлоадер, который надо залить в МК любым вышеуказанным способом. Переключив джамперы Boot0 и Boot1 в режим нормальной работы Boot0=0 Boot1=1 и нажав сброс мы должны увидеть как в системе появится новый USB Mass Storage диск с емкостью равным размеру флеш памяти нашего кристалла за вычетом размеров бутлоадера.

    Конфигурация проект под вторичный Bootloader
    Поскольку этот бутлоадер распологается в области откуда обычно идет пользовательская прошивка, то в создаваемых под него проектах надо немного сконфигурировать опции линковки и компиляции, чтобы они начинались с области не занятой бутом. Для этого в Keil надо в опции проекта подправить начальный адрес:

    После чего файлы прошивки можно банальным копированием загонять в STM32 и никакой программатор или адаптер больше не нужны совсем. Красота же!