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

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

Комментарии (25)


  1. persei
    06.04.2017 11:08
    +1

    Спасибо! Именно этого и не хватало для отладки.


    1. oWart
      06.04.2017 11:14

      Не за что :)


  1. VBKesha
    06.04.2017 12:11
    +1

    Как раз на днях собирался заказать себе этот отладчик, теперь ясно сразу как дорабатывать.
    Спасибо!


    1. oWart
      06.04.2017 12:12

      На здоровье!)


    1. nafikovr
      06.04.2017 15:43

      в 90% ресет не нужен. в 80% не нужен и отладочный вывод. так что не рекомендую сразу лезть и дорабатывать. хотя да, ручки они такие, чешутся.


      1. avost
        06.04.2017 23:19

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


        1. nafikovr
          07.04.2017 08:10

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


  1. PKav
    06.04.2017 12:27

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

    Кстати, а в чем делался демо-пример. У меня Keil при любом использовании printf генерирует дико глючную и виснущую прошивку, которую невозможно отлаживать.


    1. oWart
      06.04.2017 12:58

      Оригинал дороже, да и на всех отладочных платах, которые мне известны питание проца всегда 3.3В. В итоге данный программатор хорошо снижает порог вхождения в STM32.

      Использую STM32CubeMX + IAR


    1. DanilinS
      06.04.2017 13:32
      +1

      В 99% случаях питание 3.3 вольта. Остальное — настолько редкая экзотика, что в расчет можно не брать.


    1. nafikovr
      06.04.2017 15:52

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


  1. pesp
    06.04.2017 12:59
    +1

    Кстати, делал такую доработку после того, как китайский ST-Link отказался работать с SystemWorkbench. На форуме http://www.openstm32.org/ мной описано подключение вывода Reset. Мой коллега даже отказался от работы с SystemWorkbench, потому что не смог запустить отладку.


  1. diewindowsdie
    06.04.2017 14:53

    Подскажите, а как определяется скорость на SWO? На скрине у вас 72 МГц — она совпадает с частотой HSE/HSI таргета, или на такой частоте работает отладчик?


    1. oWart
      06.04.2017 16:18

      А я даже не задумывался. Выставляется частота работы микроконтроллера 72MHz, а частота SWO (в частности в среде IAR) у меня стоит на Auto


      1. diewindowsdie
        06.04.2017 16:37

        Ну то есть таргет (отлаживаемый МК) у вас работает на 72 МГц, и на этой частоте идут данные из SWO, я верно понял?


        1. oWart
          06.04.2017 16:39

          Таргет да, а вот на какой частоте идут данные из SWO я сказать не могу


  1. xztau
    06.04.2017 17:43

    А как можно выводить таким образом данные в Linux? Если используется openOCD или GDB+texane_st-link?


    1. oWart
      07.04.2017 08:11

      С Linux'ом не работал, наверняка можно.


  1. vvromanov
    07.04.2017 09:03
    +1

    Одна проблема с этими ST-Mini — дохнут они быстро. У меня уже коробочка сдохших накопилась


    1. stifff
      07.04.2017 23:33

      а не проводили исследования на тему причин смертей?


    1. nafikovr
      08.04.2017 14:46

      Оригинал тоже не сильно долговечный. Выше писал уже что пучек китайцев лежит. Изол вроде живет уже долго. Но им пользуюсь крайне редко.


  1. out0f0rder
    12.04.2017 13:02

    Для ленивых любителей отладочных printf-ов: в EmBitz есть такая неблагозвучная (для русского уха) штука как EBmonitor. Работает без SWO. Есть нюансы, но в общем случае — очень удобно.


    1. oWart
      12.04.2017 15:25

      Так и в IAR можно выводить отладочную информацию через библиотеку semihosting, в таком случае физически нога SWO не нужна, но есть свои минусы в скорости работы


      1. out0f0rder
        14.04.2017 07:24

        Вот-вот, semihosting тормозит ядро на время вывод. Ebmonitor же практически не влияет на скорость, но зато может терять сообщения. Вдобавок это фишка только EmBitz.
        Но очень удобно. Вспоминаю сколько времени я убил на semohosting в Keil — аж трясет :)


        1. oWart
          14.04.2017 11:30

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