Ничего не найдено :(
    В гостях у Самоделкина! » Темы » Советы » Отладка STM32 с помощью DapLink в STM32CubeIDE

    Отладка STM32 с помощью DapLink в STM32CubeIDE

    Внимание! Суть этой статьи - научить использовать ультрабюджетный универсальный программатор DAPLink в паре с дебаггером openOCD для программирования микроконтроллеров STM32. Обучение сводится к подробному описанию подключения, настроек STM32CubeIDE и процесса запуска отладки. Подобные инструкции у китайцев есть для среды Keil на английском, а для STM32CubeIDE вообще нет ничего, тем более на русском. Связка DAPLink + openOCD может вообще со временем стать для вас основной при программировании ARM, STM8, STM32, RISC-V и многого другого. Корпорациям бой, короче.

    Введение

    В прошлой статье по STM32 я рассказал, как дебажить платы прототипирования STM32F103C8T6 и STM32F401CCU6 с помощью программатора-отладчика CJMCU-JLink (mini JLink). Основным недостатком этого отладчика является то, что через него не производится питание самой платы, которую приходится запитывать от независимого блока питания 5В. Стоит сейчас такой программатор не менее 700 рублей, что, тем не менее, все равно существенно дешевле официальных программаторов фирмы ST.
    В этот раз я хочу вам рассказать, как производить отладку STM32 с помощью китайского программатора-отладчика nanoDAP, основанного на опенсорсном проекте DAPLink. nanoDAP не имеет проблем CJMCU-JLink, и через него спокойно можно питать плату.

    Отладка STM32 с помощью DapLink в STM32CubeIDE


    nanoDAP также имеет две инкарнации: DAPLink (700 руб + доставка) и CMSIS-DAP (300 руб + доставка). Единственное их функциональное отличие заключается в том, что первый определяется как флешка, а второй - нет. При подключении к USB DAPLink определяется как внешний девайс, на который можно с помощью Drag&Drop кинуть прошивку, которая затем автоматически запишется в микроконтроллер. Формат прошивки зависит от микроконтроллера (.hex или .bin). Вообще говоря, такой способ записи становится весьма популярным. Подобным функционалом также обладают многие новые микроконтроллеры, например ESP32-S2, ESP32-S3 и RP2040. А если установить на эти платы circuitpython, то редактирование кода можно осуществлять непосредственно на флеш-накопителе в своей IDE, а при каждой перезаписи кода микроконтроллер автоматически перезагружается, и код начинает выполняться. Возможно, про одну из таких плат Raspberry Pi Pico на основе чипа RP2040 я расскажу в одной из следующих статей.

    Обладая такими достоинствами как универсальность и невысокая цена DAPLink и CMSIS-DAP имеют и недостатки: по их использованию очень мало инструкций на английском и русском. Чтобы хоть что-то понять мне пришлось переводить статьи с китайского с помощью яндекс-браузера. Также DAPLink и CMSIS-DAP для отладки используют опенсорсную службу-дебаггер openOCD, которая запускается в виде сервера и во время отладки все время висит фоновым процессом. Само собой, чаще всего предполагается standalone-установка из бинарника или через терминал. Но мы в данном случае программируем STM32 в STM32CubeIDE. В последней уже есть openOCD, поэтому его устанавливать не нужно.

    Подключение DAPLink

    Итак, поскольку мне посчастливилось приобрести DAPLink, объяснять буду на его примере. Тем более, что Drag&Drop "из коробки" у меня не заработал. Подключается DAPLink к плате STM32 по SWD-интерфейсу (4 pin), являющемуся частью интерфейса JTAG (10 pin). Обратите внимание, что порядок выводов опять не совпадает, и в кабеле dupont 4x4 снова приходится менять провода местами.



    По цвету проводов можно догадаться, что TCK/CK = SWSCK, а TMS/IO = SWDIO. STM32F103C8T6 и STM32F401CCU6 подключаются совершенно идентично.



    Настройка DAPLink и openOCD в STM32CubeIDE

    Далее я поясню суть происходящего. Нам необходимо настроить для обеих плат:

    1. External Tool Config (Server), то есть openOCD;
    2. Debug Configurations, то есть выбрать дебаггер для конкретного проекта (в STM32CubeIDE он у нас будет называться ST-LINK (openOCD)) и настроить порт для связи с сервером (3333);
    3. Launch Group, то есть попросту скрипты для обеих плат, которые запускают сначала сервер, а затем дебаггер.


    Настройка External Tool Config - добавляем openOCD-сервер

    Заходим в меню:
    Run / External Tools / External Tools Configurations...



    Далее правый клик по Program - New Configuration



    Создаем две конфигурации запуска сервера openOCD: для STM32F103C8T6 и STM32F401CCU6.




    Выбираем переменные как показано на следующих скриншотах:




    К ${stm32cubeide_openocd_path} дописываем если у нас винда:
    \openocd
    


    Если у нас линукс, то дописываем
    /openocd
    


    У нас получилось:
    
    // Location
    ${stm32cubeide_openocd_path}/openocd
    // Working Directory
    ${stm32_openocd_script_root_path}
    


    Дописываем Arguments:
    
    // Для STM32F103C8T6
    -f ./interface/cmsis-dap.cfg -f ./target/stm32f1x.cfg
    // Для STM32F401CCU6
    -f ./interface/cmsis-dap.cfg -f ./target/stm32f4x.cfg
    


    На винде слэши замените на бэкслэши.

    Далее, если нажать на "Show Command Line", мы увидим как выглядит скрипт, запускающий сервер openOCD. Ну, что сказать? Красивое.



    Выбираем программатор и порт (Debug Configurations)

    Заходим в Run / Debug Configurations...



    Создаем для каждой из плат правой кнопкой новую конфигурацию на "STM32 Cortex-M C/C++ Application"



    На вкладке "Debugger":
    • Выбираем "Connect to remote GDB server Port number"
    • Выбираем Debug Probe ST-LINK (OpenOCD)
    • снимаем галку с "Misc - Enable live expressions






    Создаем группу запуска (Launch Group)

    Там же в Run / Debug Configurations...

    Правой кнопкой выбираем кликаем на Launch Group и выбираем New Configuration



    Сначала мы будем запускать сервер openOCD, поэтому выбираем одну из подготовленных конфигураций его запуска для соответствующей платы. Launch mode: Run, Post launch action: None, Adopt launch if already running: Yes (перезапускаем, если уже запущено).



    Далее мы будем запускать сам процесс отладки, поэтому прописываем соответствующую подготовленную конфигурацию отладчика. Launch mode: Debug.



    В итоге у нас созданы две группы запуска, которые должны выглядеть следующим образом:




    Запуск процесса отладки

    После проделанных операций, если мы нажмем на треугольник справа от зеленого значка "Play", то появятся прописанные нами группы запуска: DapLink_project103C8T6 и DapLink_project401.



    При нажатии запускается сервер openOCD, а за ним процесс отладки, который можно увидеть на последнем скриншоте



    Заключение

    Таким образом я всем рекомендую использовать замечательные и очень дешевые программаторы-отладчики вместе со свободным ПО. Их возможности мало уступают фирменным программаторам, а во многом и превосходят их. Достаточно просто один раз внимательно сделать настройку STM32CubeIDE.

    Использованные источники:

    通过External Tools在STM32CubeIDE下使用DAP-LINK_lone5moon的博客-程序员宝宝

    基于OpenOCD 的 STM32CubeIDE 开发烧录调试环境搭建 DAPLINK/STLINK

    DAPLink-HS User Manual

    CMSIS-DAP/DAPLink User Manual

    Raspberry Pi Pico на МК RP2040: начало и первые шаги. Что есть поесть за $4
    Подборки: STM32 DapLink CMSIS-DAP nanoDAP openOCD

    Как я заготавливаю древесину

    Сублимирование ягод, фруктов, и овощей для приправ, зелени, и так по мелочи

    Добавить комментарий

    4 комментария
    Eig Автор
    Sobs,

    Ну оно как бы да, и для меня в новинку. Проблема в том, что в Кубунте сие не заработало. То есть флешка-то определяется, но записывать на нее сие чудо ничего не хочет - генерит файл fail.txt.

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

    А для RP2040 вообще микрософт драйверы писал, и бинарник там со своим собственным расширением. Это новая интересная тема, толковых статей я пока не нашел, поэтому буду это исследовать. Но то, что это удобно - однозначно.

    Sobs

    Довольно интересный программатор. Не видел таких, чтобы бинарник как на флешку скидывать для прошивки. Пользуюсь в основном st-link v2 и j-linkOb.

    Eig Автор
    ino53,

    да нормально всё стало, цены вернулись к ценам начала года. На днях сделал кучу заказов из дешевой мелочевки, которые объединили в три посылки с полным отслеживанием. Приятным сюрпризом стало то, что трек UB (неотслеживаемый) объединили с saver shipping. Это вообще какой-то нонсенс, раньше объединяли только Saver и Standard.

    По скорости неделя-две в мое Подмосковье. Раньше доставляли самолетами из аэропорта Гонконга, теперь из материкового Китая, только и всего.

    По сути одна только проблема: с американскими чипами. Это всё подорожало в 2 раза необратимо. Теперь Arduino стало использовать невыгодно. 500 рублей за Nano - это что-то невероятное. Скоро STM32 и ESP32 полностью заменят AVR/Arduino у самодельщиков.

    ino53

    Интересно, как сейчас с Китаем, с заказами проблем нет? Я-то давно ничего не заказывал...

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Последние комментарии

    Все комментарии