Доработка китайского ST-Link v2: добавляем интерфейс вывода отладочной информации SWO и ногу Reset

  • Tutorial
image Привет, Geektimes!

Сегодня хочу рассказать про доработку паяльником китайского 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 отключится и связь с контроллером пропадет.

Спасибо за внимание, надеюсь кому-то это пригодится.

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 26

    +1
    Спасибо! Именно этого и не хватало для отладки.
      0
      Не за что :)
      +1
      Как раз на днях собирался заказать себе этот отладчик, теперь ясно сразу как дорабатывать.
      Спасибо!
        0
        На здоровье!)
          0
          в 90% ресет не нужен. в 80% не нужен и отладочный вывод. так что не рекомендую сразу лезть и дорабатывать. хотя да, ручки они такие, чешутся.
            0

            А почему не рекомендуете?

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

          Кстати, а в чем делался демо-пример. У меня Keil при любом использовании printf генерирует дико глючную и виснущую прошивку, которую невозможно отлаживать.
            0
            Оригинал дороже, да и на всех отладочных платах, которые мне известны питание проца всегда 3.3В. В итоге данный программатор хорошо снижает порог вхождения в STM32.

            Использую STM32CubeMX + IAR
              +1
              В 99% случаях питание 3.3 вольта. Остальное — настолько редкая экзотика, что в расчет можно не брать.
                0
                оригинал кстати легко умирает. у меня лежит пачка китайцев и оригинал. применяю оригинал как раз таки только там, где нужно нестандартное питание
                +1
                Кстати, делал такую доработку после того, как китайский ST-Link отказался работать с SystemWorkbench. На форуме http://www.openstm32.org/ мной описано подключение вывода Reset. Мой коллега даже отказался от работы с SystemWorkbench, потому что не смог запустить отладку.
                  0
                  Подскажите, а как определяется скорость на SWO? На скрине у вас 72 МГц — она совпадает с частотой HSE/HSI таргета, или на такой частоте работает отладчик?
                    0
                    А я даже не задумывался. Выставляется частота работы микроконтроллера 72MHz, а частота SWO (в частности в среде IAR) у меня стоит на Auto
                      0
                      Ну то есть таргет (отлаживаемый МК) у вас работает на 72 МГц, и на этой частоте идут данные из SWO, я верно понял?
                        0
                        Таргет да, а вот на какой частоте идут данные из SWO я сказать не могу
                    0
                    А как можно выводить таким образом данные в Linux? Если используется openOCD или GDB+texane_st-link?
                      0
                      С Linux'ом не работал, наверняка можно.
                        0
                        К сожалению, в openOCD не допилили поддержку SWO через STlink.
                        Попробуйте прошить STlink в JLink (есть официальная прошивка от segger.com).
                        У меня JLink (копия), консолька через openOCD работает.
                        +1
                        Одна проблема с этими ST-Mini — дохнут они быстро. У меня уже коробочка сдохших накопилась
                          0
                          а не проводили исследования на тему причин смертей?
                            0
                            Оригинал тоже не сильно долговечный. Выше писал уже что пучек китайцев лежит. Изол вроде живет уже долго. Но им пользуюсь крайне редко.
                            0
                            Для ленивых любителей отладочных printf-ов: в EmBitz есть такая неблагозвучная (для русского уха) штука как EBmonitor. Работает без SWO. Есть нюансы, но в общем случае — очень удобно.
                              0
                              Так и в IAR можно выводить отладочную информацию через библиотеку semihosting, в таком случае физически нога SWO не нужна, но есть свои минусы в скорости работы
                                0
                                Вот-вот, semihosting тормозит ядро на время вывод. Ebmonitor же практически не влияет на скорость, но зато может терять сообщения. Вдобавок это фишка только EmBitz.
                                Но очень удобно. Вспоминаю сколько времени я убил на semohosting в Keil — аж трясет :)
                                  0
                                  Поэтому лучше купить дешевый китайский программатор, доработать и пользоваться аппаратной функцией уже в любой среде.

                            Only users with full accounts can post comments. Log in, please.