Ничего не найдено :(
    В гостях у Самоделкина! » Темы » Советы » Отладка 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

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

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

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

    6 комментариев
    apn #92979

    Вместо

    ${stm32cubeide_openocd_path}\openocd

    надо

    ${stm32cubeide_openocd_path}\openocd.exe

    для 

    STM32CubeIDE Version: 1.15.0


    VasilijK #91684

    Здравствуйте, не подскажите как исправить ?

    Open On-Chip Debugger 0.12.0-00024-gc3ff39f8b (2023-06-26-16:51) [https://github.com/STMicroelectronics/OpenOCD]

    Licensed under GNU GPL v2

    For bug reports, read

        http://openocd.org/doc/doxygen/bugs.html

    Info : auto-selecting first available session transport "swd". To override use 'transport select <transport>'.

    stm32h7x_cti_prepare_restart_one

    Info : Listening on port 6666 for tcl connections

    Info : Listening on port 4444 for telnet connections

    Info : CMSIS-DAP: SWD supported

    Info : CMSIS-DAP: SWO-UART supported

    Info : CMSIS-DAP: Atomic commands supported

    Info : CMSIS-DAP: Test domain timer supported

    Info : CMSIS-DAP: FW Version = 2.1.0

    Info : CMSIS-DAP: Serial# = 0700000100300062430000194e543936a5a5a5a597969908

    Info : CMSIS-DAP: Interface Initialised (SWD)

    Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1

    Info : CMSIS-DAP: Interface ready

    Info : clock speed 4000 kHz

    Info : SWD DPIDR 0x6ba02477

    Info : [stm32h7x.cm7] Cortex-M7 r1p2 processor detected

    Info : [stm32h7x.cm7] target has 8 breakpoints, 4 watchpoints

    Info : gdb port disabled

    Info : starting gdb server for stm32h7x.cm7 on 3333

    Info : Listening on port 3333 for gdb connections

    Info : accepting 'gdb' connection on tcp/3333

    Info : Device: STM32H72x/73x

    Info : flash size probed value 1024k

    Info : STM32H7 flash has a single bank

    Info : Bank (0) size is 1024 kb, base address is 0x08000000

    Info : New GDB Connection: 1, Target stm32h7x.cm7, state: running

    Warn : GDB connection 1 on target stm32h7x.cm7 not halted

    undefined debug reason 8 - target needs reset

    Warn : [stm32h7x.cm7] Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.

    Error: timed out while waiting for target halted

    Error executing event gdb-flash-erase-start on target stm32h7x.cm7:

    TARGET: stm32h7x.cm7 - Not halted

    Error: failed erasing sectors 0 to 0

    Error: flash_erase returned -304

    Info : dropped 'gdb' connection

    Info : Halt timed out, wake up GDB.

    Info : accepting 'gdb' connection on tcp/3333

    Info : New GDB Connection: 1, Target stm32h7x.cm7, state: running

    Warn : GDB connection 1 on target stm32h7x.cm7 not halted

    Warn : [stm32h7x.cm7] Only resetting the Cortex-M core, use a reset-init event handler to reset any peripherals or configure hardware srst support.

    Error: timed out while waiting for target halted

    Error executing event gdb-flash-erase-start on target stm32h7x.cm7:

    TARGET: stm32h7x.cm7 - Not halted

    Error: failed erasing sectors 0 to 0

    Error: flash_erase returned -304

    Info : dropped 'gdb' connection


    Eig #77795 Автор
    Sobs,

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

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

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

    Sobs #77743

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

    Eig #77737 Автор
    ino53,

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

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

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

    ino53 #77735

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

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


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

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

    Войти

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

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

    Онлайн чат

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

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