ST-LINK/V2 позволяет программировать и отлаживать контроллеры STM32 и STM8, и поддерживается такими популярными средами разработки как Keil uVision, IAR EWARM, CoIDE, IAR EWSTM8 и другими. Оригинальный программатор стоит около 50$ (в чайне видел такой же за 35$). Также у этого программатора куча китайских клонов, различающихся степенью урезаности (отсутствием компонентов), вплоть до свистков за 7$. Кроме того, программатор распаян на платах STM*Discovery, опять же в урезанной версии и умеющий работать только с STM32 или только с STM8 в зависимости от того, какая дискавери. 

Но иногда проще и интереснее сделать программатор самому, особенно если для этого не  нужно много усилий. Все детали мне обошлись меньше чем в 5$ в местном магазине радиодеталей. Прошить сам программатор можно по интерфейсу UART (например с помощью любого преобразователя USB- UART).

Что умеет программатор/отладчик ST-LINK-V2:

  • Прошивка и отладка STM32 по интерфейсу SWD (пины SWCLK и SWDIO) + RST (не обязательно)
  • Необязательный пин SWO для последовательного терминала с внешним STM32 без дополнительных UART-ов и т.д. (Можно выполнять printf/scanf на STM32 с помощью программатора)
  • Прошивка и отладка STM8 по интерфейсу SWIM 
  • Выдача внешнего питания 3.3В от программатора
  • Подключение по mini-usb

stlink2cloneview(1).jpg

Для контроллеров STM32 и STM8 у меня уже есть программатор Versaloon, но его недостаток в том, что он не умеет отлаживать STM8 (только прошивает) и не поддерживается популярными средами разработки. Вообще по конструкции ST-LINK/V2 очень похож на versaloon. В программаторе используется тот же микроконтроллер STM32F103C8, ну и плюс минимальная обвязка. Основу схемы я взял из статьи Highlander-а в сообществе easyelectronics. Highlander поделился всей информацией, которая нужна для сборки программатора, за что ему огромное спасибо.

Поддерживаемые чипы

Программатор может использоваться для прошивки микросхем STM32:

  • STM32F100xx, STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx, STM32F107xx, STM32F2xxx, STM32F4xxx,
  • STM32L15xx6, STM32L15xx8,STM32L15xxB, STM32L151xC, STM32L151xD, STM32L152xC, STM32L152xD, STM32L162xD,
  • STM32TS60,
  • STM32W108C8, STM32W108xB, STM32W108xC, STM32W108xZ

И STM8:

  • STM8AF51x, STM8AF52x, STM8AF61x, STM8AF62x,STM8AH51x, STM8AH61x, 
  • STM8S003K3, STM8S003F3, STM8S005C6, STM8S005K6, STM8S007C8, STM8S103xx, STM8S105xx, STM8S207xx, STM8S208xx, STM8S903F3, STM8S903K3, 
  • STM8L101xx, STM8L15x, STM8L16x,
  • STM8TL52x4,STM8TL53x4

Проект

Скачать: Архив со схемой и платой в eagle, pdf-ом для печати ЛУТ, прошивкой и драйвером.

Схему я перерисовал в eagle, резисторы и конденсаторы у меня в корпусе 0805 (которые лежали в магазине). Также я заменил сборки стабилитронов на одиночные стабилитроны, которые удалось купить. Кроме того по причине ненадобности я убрал возможность переключения выходного напряжения между 5В и 3.3В, оставил только 3.3В. Из интерфейсов программирования STM32 я оставил только SWD, убрав громоздкий JTAG(ни разу его не использовал для Cortex-M3 и не думаю что когда- нибудь буду).

В результате схема выглядит так:

scheme.jpg

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

Количество Описание Номинал Корпус Комопненты
9 Конденсатор 0.1u 0805 C1-C3, C5, C8-C10, C12,C13
1 Резистор 1.5k 0805 R3
1 Резистор 10 0805 R12
2 Резистор 100k 0805 R6, R11
2 Конденсатор электролит, тантал 10u EIA3528, CASE B C4, C11
2 2-х пиновые штырьки 0.1" 1x2 1X02 JP1, JP2
2 Конденсатор 20p 0805 C6, C7
8 Резистор 22 0805 R4, R5, R13-R18
3 Резистор 220 0805 R7-R9
1 Регулятор напряжения LM1117 3V3 Fixed SOT223 IC2
2 Резистор 4.7k 0805 R1, R2
2 Резистор 510 0805 R19, R20
7 SMD-Стабилитрон 5V1 SOD80C VD1-VD7
1 Резистор 680 0805 R10
1 Стандартный кварц HC49UV 8 MHz HC49U-V Y1
1 Разъем BH-10 или штырьки 5x2 BH-10 2X5 JP3
1 Индуктивность BLM18AG121SN1D 0805 L1
1 Светодиод Green 3 мм LED1
1 Светодиод Red 3 мм LED2
1 ST STM32F101/103 48pin LQFP-48 STM32F103C8T6 LQFP-48 IC1
1 Mini-USB "B" коннектор 5 пинов USB-MINIB-5PIN USB-MINIB JP4

Вместо индуктивности можно на крайний случай просто запаять перемычку, или резистор в 0 Ом. Регулятор напряжения должен быть любой в корпусе SOT223 на 3.3 В фиксированный, например у меня LD1117-3.3. Вместо STM32F103C8T6(64K flash) можно также взять более дорогой  STM32F103CBT6 (128K flash). Электролиты конденсаторы можно брать в диапазон 4.7-47мкФ.

В принципе из схемы можно также убрать стабилитроны и поменять корпус компонентов на 0603 и в результате уменьшить форм-фактор до маленького свистка на подобии Versaloon Nano. Ну а я ограничился платой, вставляемой в дешевый пластиковый корпус 57х38х19:

  board_view.jpg

Карта запайки компонентов:

top_component_map.jpg

bottom_component_map.jpg

Распиновка разъема:

header.jpg

Разъем может быть обжат под цветной шлейф, так, чтобы цвета совпадали с теми что на картинке. Тогда концы шлейфа можно зацепить на контакты BLS и подключать их по картинке. Однако удобнее сделать шлейф- переходник на 4-х пиновое SWIM-гнездо HU-4 (под штекер WH-4 на плату с целевым контроллером STM8) и HU-5 для SWD.

Конструирование

Плата хоть и двухсторонняя, но достаточно простая в изготовлении. Две, лазерно распечатанные стороны платы на листе фотобумаги (я использую фотобумагу плотностью 120г/м2) сопоставляются на свету и скрепляются степлером . Затем обезжиренный кусочек двухстороннего текстолита аккуратно вставляется в этот конверт, и утюжится при достаточной температуре (чтобы тонер не поплыл и пленка фотобумаги не запекалась важно не перегреть):

IMG_20131211_210520_cmprsd.jpgIMG_20131211_211043_cmprsd.jpg

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

IMG_20131211_213354_cmprsd.jpgIMG_20131211_213412_cmprsd.jpg

После травления платы можно начинать сверлить:

 

  • Для переходных я использовал сверла 0.5мм;
  • для 4х отверстий под светодиоды - 0.7мм;
  • отверстия под разъем BH-10, двух штырьков джампера, двух крепежных отверстий под USB - 1мм; 
  • для двух боковых крепежных отверстий - 3 мм

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

После сверления, при помощи обычной наждачной шкурки были сформированы контуры платы:

IMG_20131214_162654_cmprsd.jpgIMG_20131214_162705_cmprsd.jpg

Лужение платы я выполнил паяльником, смазав плату обычным глицерином. Для запайки переходных хорошо подошла медная жила, изъятая из телефонного провода, обзываемого в народе "лапшой". После запайки можно слегка пройтись шкуркой по заостренным отроскам.

IMG_20131214_220830_cmprsd.jpgIMG_20131214_220851_cmprsd.jpg

Дальше я запаял микроконтроллер:

IMG_20131215_121230_cmprsd.jpg

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

drilss_to_box_selected(1).jpg IMG_20131219_210906_cmprsd.jpg

Вставленные разъемы нужно обвести канцелярским ножом или чем-то подобным. После обведения можно убрать разъемы и прорезать отверстия. Для светодиодов можно просто просверлить 3-х миллиметровые отверстия. Также для крепежных болтов М3 нужно подобрать или изготовить стойки(я отрезал по кусочку толстой изоляции)

IMG_20131219_211022_cmprsd(1).jpgIMG_20131219_211022_cmprsd.jpgIMG_20131219_215414_cmprsd.jpg

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

IMG_20131220_131033_cmprsd.jpgIMG_20131220_132455_cmprsd.jpg

Если все подходит, можно запаивать верхний слой и помещать все окончательно в корпус:

IMG_20131220_132348_cmprsd.jpg

Также можно скотчем приклеить небольшую наклейку с подписью пинов разъёма (лучше цветную):

topface.jpg

Прошивка программатора

Скачать: Архив со схемой и платой в eagle, pdf-ом для печати ЛУТ, прошивкой и драйвером.

Для прошивки нужен UART интерфейс с компьютером с уровнями TTL. Я использовал вот такой самодельный преобразователь USB-UART. Если же у вас в компьютере есть RS232, то можно обойтись несложным переходником в TTL на каком-нибудь MAX232. А вообще всяких USB-UARTO-в сейчас в продаже очень много и цена на уже готовые преобразователи не превышает 2$.

Прошивка может быть выполнена из Windows с помощью утилиты Flash Loader Demonstrator (она есть в архиве). Пользователям Linux придется запустить виртуальную систему в Virtualbox (в виртуальную систему можно пробросить как  преобразователи USB-UART, так и RS232 порт).

!!! Перед началом прошивки прогрмматора возможно понадобится выпаять резистор R20 (который соединяет красный светодиод и линию U1_BL_TX). Мне выполнить прошивку без этого действия не удалось. Хотя подозреваю что это зависит от UART-а.

Итак последовательность действий по прошивке:

1. Установить на джампер Boot

2. Подключить землю, RX, TX UART-a. RX преобразователя нужно подключить к TX на разъеме программатора, а TX преобразователя соответственно к RX программатора. Если есть откуда, подключите питание к пину 3.3В на разъеме программатора (тогда при прошивке программатора можно будет не подключать его к USB). Подключить UART к компьютеру. Если питание к пину 3.3В не подключено, то нужно также подключить программатор к компьютеру, что бы запитать его. Посмотреть какой COMх порт занял ваш UART преобразователь. 

3. Запустить Flash Loader Demonstrator. Выбрать COMx порт, остальные настройки оставить как есть:

4. Нажать Next. Если UART подключен правильно, питание подано, то должно появится такое окно:

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

5. Нажимаем Next два раза. В следующем окне указываем путь к прошивке firmwareSTLinkV2.J16.S4.bin:

6. Опять нажимаем Next и ожидаем завершения прошивки. После успешного завершения программирования окно должно приобрести такой вид:

7. Отключаем преобразователь и питание с программатора. 

8. Теперь самое главное: нужно обновить прошивку, иначе программатор не заработает. Для начала установим драйвер windriverst- link_v2_usbdriver.exe. 

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

10. Запускаем upgradeST-LinkUpgrade.exe(папка upgrade обязательно должна быть распакована). В открывшемся окне прожимаем Device Connect, Yes. Должно появится окно Upgrade is successful. 

Готово.

Скачать: Архив со схемой и платой в eagle, pdf-ом для печати ЛУТ, прошивкой и драйвером.