Сегодня хочу рассказать про доработку паяльником китайского ST-Link v2. В него можно допаять вывод SWO для получения отладочной информации и ногу управления Reset’ом для микроконтроллеров STM32 (та нога Reset, что уже есть — для STM8). Возможно для многих это не открытие, но пусть будет информация для начинающих. Кому интересно, прошу под кат.
Зачем оно надо?
Используемый для отладки микроконтроллеров STM32 интерфейс SWD поддерживает передачу отладочной информации через вывод SWO в режиме реального времени, это весьма удобно. Ну а нога Reset нужна для того, чтобы можно было комфортней прошивать контроллер в случае, если интерфейс SWD отключен. Причина конечно притянута за уши, ведь для прошивки всегда можно нажать кнопку Reset ручками, но пусть будет. Например, на заре моего знакомства с STM32, мне пришла отладочная плата с Китая с залитой демо программой моргания светодиодом и отключенным SWD, я не сразу понял, как к ней подключиться.
Сама доработка
Нам понадобится скальпель, паяльник и несколько сантиметров очень тонкого провода, у меня это МГТФ *какой-то там*. На этих программаторах разъем поделен на две части: левую — для STM8 и правую — для STM32, так что существующий там Reset не подходит для STM32, будем делать свой.
Первым делом отрезаем дорожки, идущие к ненужным штырькам. На первом своем доработанном программаторе я отрезал ножки Reset и SWIM, т.к не планировал работать с STM8, но сейчас я буду использовать лишние выводы 3.3 и 5 В (они задублированы на разъеме), чтобы не портить функционал программатора, вдруг пригодится.
Провода необходимо припаять к 18 (Reset) и 31 (SWO) ногам микроконтроллера. То еще занятие, но при определенной сноровке сделать это можно. У меня провода хорошо вошли в отверстия на плате, что дало дополнительную фиксацию. Вообще, по-хорошему, надо сразу закрепить их клеем на микроконтроллере. Свободные концы припаиваем через небольшие резисторы (пусть будут 22 Ома) к только что отрезанным штырькам.
Можно закрыть корпус и подписать новые выводы, чтобы потом не забыть где какой.
Проверка SWO
Для использования SWO необходимо:
— активировать SWD;
— включить соответствующий вывод (для микроконтроллеров STM32F103C это PB3) на TRACESWO;
— убедиться, что в среде программирования включен именно SWO, а не semihosting;
— в шапке программы подключить библиотеку #include «stdio.h»;
— в коде программы использовать printf(«Hello STM32 world!\r\n»);
Просматривать эти сообщения можно через терминал в программе STM32 ST-LINK Utility, либо прямо во время отладки в своей среде (я использую IAR).
Проверка Reset
Допустим по какой-то причине на микроконтроллере отключен SWD: либо вы забыли его включить при инициализации, либо пришла новая плата с зашитой демо-программой. Прошиться конечно можно через притягивание ножки Reset к земле (на отладочных платах обычно стоит кнопка), но это не всегда удобно. Можно ведь просто подключить контакт от программатора и шиться в автоматическом режиме.
В той же программе STM32 ST-LINK Utility выбираем «Connect under reset» и подключаемся для прошивки или очистки памяти микроконтроллера.
Либо в вашей IDE выбираем соответствующий пункт:
Это позволит прошиться и войти в отладочный режим, но как только вы дойдете до инициализации периферии, SWD отключится и связь с контроллером пропадет.
Спасибо за внимание, надеюсь кому-то это пригодится.
Комментарии (25)
PKav
06.04.2017 12:27По мне так лучше оригинал взять. У этого ведь не только SWO нет, но и VPP, которым он, по сути, подгоняет свои логические уровни под уровни отлаживаемой платы.
Кстати, а в чем делался демо-пример. У меня Keil при любом использовании printf генерирует дико глючную и виснущую прошивку, которую невозможно отлаживать.oWart
06.04.2017 12:58Оригинал дороже, да и на всех отладочных платах, которые мне известны питание проца всегда 3.3В. В итоге данный программатор хорошо снижает порог вхождения в STM32.
Использую STM32CubeMX + IAR
DanilinS
06.04.2017 13:32+1В 99% случаях питание 3.3 вольта. Остальное — настолько редкая экзотика, что в расчет можно не брать.
nafikovr
06.04.2017 15:52оригинал кстати легко умирает. у меня лежит пачка китайцев и оригинал. применяю оригинал как раз таки только там, где нужно нестандартное питание
pesp
06.04.2017 12:59+1Кстати, делал такую доработку после того, как китайский ST-Link отказался работать с SystemWorkbench. На форуме http://www.openstm32.org/ мной описано подключение вывода Reset. Мой коллега даже отказался от работы с SystemWorkbench, потому что не смог запустить отладку.
diewindowsdie
06.04.2017 14:53Подскажите, а как определяется скорость на SWO? На скрине у вас 72 МГц — она совпадает с частотой HSE/HSI таргета, или на такой частоте работает отладчик?
oWart
06.04.2017 16:18А я даже не задумывался. Выставляется частота работы микроконтроллера 72MHz, а частота SWO (в частности в среде IAR) у меня стоит на Auto
diewindowsdie
06.04.2017 16:37Ну то есть таргет (отлаживаемый МК) у вас работает на 72 МГц, и на этой частоте идут данные из SWO, я верно понял?
out0f0rder
12.04.2017 13:02Для ленивых любителей отладочных printf-ов: в EmBitz есть такая неблагозвучная (для русского уха) штука как EBmonitor. Работает без SWO. Есть нюансы, но в общем случае — очень удобно.
oWart
12.04.2017 15:25Так и в IAR можно выводить отладочную информацию через библиотеку semihosting, в таком случае физически нога SWO не нужна, но есть свои минусы в скорости работы
out0f0rder
14.04.2017 07:24Вот-вот, semihosting тормозит ядро на время вывод. Ebmonitor же практически не влияет на скорость, но зато может терять сообщения. Вдобавок это фишка только EmBitz.
Но очень удобно. Вспоминаю сколько времени я убил на semohosting в Keil — аж трясет :)oWart
14.04.2017 11:30Поэтому лучше купить дешевый китайский программатор, доработать и пользоваться аппаратной функцией уже в любой среде.
persei
Спасибо! Именно этого и не хватало для отладки.
oWart
Не за что :)