VBCores Docs
HomeGitHub
  • VBCores
  • Hardware
    • VBCore VB32G4
    • VB STM32 Programmer
    • BLDC motor driver 30A
    • DC motor driver 15A
    • Stepper motor driver 10A
    • Ethernet - CAN-FD
    • CAN-FD - Raspberry PI
      • Setting up CAN on Raspberry Pi
      • Troubleshooting
      • Работа с CAN FD через Python
    • PowerBoard 30A
    • SBus-HID
    • DC-DC 12V
    • USB 2.0-HUB
    • IMU BNO055
    • IMU BHI360
    • T-encoder
  • Software
    • Arduino IDE
      • Arduino IDE setup
      • Selecting MCU
      • Optional hardware preparation
      • Prepairing a sketch
      • Libraries
      • Examples
        • Все переписать нахрен
        • Работа с I2C
        • I2C detect
        • Датчик BNO055 / I2C
        • Датчик AS5047P / SPI
        • Датчик AS5600 / I2C
        • Работа с бесколлекторными двигателями
          • Simple FOC. Управление скоростью. Нахождение количества пар полюсов.
          • Simple FOC. Управление моментом
          • Чтение данных с датчика тока
        • Работа с коллекторным двигателем
          • Вращение DC мотором
          • Чтение угла по энкодеру. Управление DC мотором по углу
          • Чтение скорости вращения мотора по энкодеру
        • Работа с шаговым двигателем
          • Вращение шагового двигателя.
          • Контроль двигателя по интерфейсу SPI
    • STM32 CUBE IDE
      • Типовые настройки
      • Подсказки начинающим
        • Cube IDE для начинающих
        • Clock configuration
        • Таймеры - прерывания
        • Таймеры - ШИМ
        • Отладка программ
        • Коммуникации - FDCAN
        • Управление DC-мотором
        • Backup программы
  • Cyphal CAN
    • Cyphal CAN
    • PyCyphal
    • Yakut
    • Cyphal Arduino
      • Отправка и получение сообщений по cyphal
  • Работа с ROS
    • Установка Ubuntu, ROS и Arduino
    • ROS_LIB
    • Возможные ошибки
    • Примеры
      • Publisher. Hello World!
      • Publisher with Subscriber
      • Rotation by DC motor
  • Example projects
    • Motor-wheel upgrade
Powered by GitBook
On this page
  • Дебагер CubeIDE
  • Точки остановки (breakpoints)
  • Пошаговый дебаггинг
  • Глобальные переменные
  • STM32CubeMonitor
  1. Software
  2. STM32 CUBE IDE
  3. Подсказки начинающим

Отладка программ

Введение в использование дебаггера и STM32CubeMonitor

Разберем (поверхностно) способы отладки программ на примере проекта из пердыдущего раздела (светодиод с ШИМ).

Дебагер CubeIDE

Дебагер, в первом приближении, умеет делать три полезные вещи:

  1. Ставить программу на паузу в точках остановки и показывать состояние локальных переменных

  2. Идти по программе по шагам (также с информацией о всех локальных переменных)

  3. Следить за значениями глобальных переменных

Точки остановки (breakpoints)

Добавим точку остановки на строке HAL_Delay(0.05); Для этого, можно нажать на свободное место справа от номера строки или нажать правой кнопкой на строку -> Toggle Breakpoint.

Далее, надо нажать на кнопку . Это пересоберет программу, зальет ее, и подключитя дебаггером. После этого, программа встанет на паузу. Нажмем - это скажет программе выполняться до точки остановки, после чего опять встать на паузу.

Программа должна была остановиться тут - . Теперь, справа есть меню дебагера. Первая вкладка в нем (variables) показывает локальные переменные в данной точке программы. На данный момент, это только x.

Пошаговый дебаггинг

Теперь попробуем из этого же места посмотреть, что делает наша программа по шагам. Для этого у нас есть три кнопки.

Тут нам понадобится только Step Over. Несколько раз нажав на нее, мы можем дойти до конца цикла while, и увидеть, что значение x стало 0.002.

В такой простой программе как это большой пользы такой метод не принесет, но при отладке сложных алгоритмов он крайне полезен.

Глобальные переменные

Уберем точку остановки (также, как и ставили), и будем следить за изменением x без остановки программы. Для этого, рассмотрим второй по популярности раздел панели дебагера - Live Ex. Откроем его, нажмем "Add new expression", впишем просто x, и тут же увидим "Failed to evaluate expression". Дело в том, что следить мы можем только за глобальными переменными. Ось X можно также для синусоиды назвать осью времени, поэтому заведем глобальную переменную double time; и в цикле сразу перед if(...) добавим time = x;. Конечно, тут это пример крайне натянутый, но поможет понять как пользоваться этим инструментом.

STM32CubeMonitor

Открым программу, нас встретит вот такое окно:

Это диаграмма процесса сбора данных с контроллера, и в большинстве случаев, такого простого варианта вполне достаточно. Рассмотрим, как настроить его для нашего проекта.

Probe_Out / Probe_In

myVariables

Тут нам надо выбрать проект и переменные в нем, за которыми будем следить.

Допустим, нам хотелось бы увидеть синусоиду, по которой меняется яркость светодиода. Но следить мы можем только за значениями глобальных перменных. Поэтому заведем еще одну глобальную переменную double y;, в которую будем в нашем цикле записывать текущее значение регистра CCR: y = __HAL_TIM_GET_COMPARE(&htim2, TIM_CHANNEL_1);

Откроем опять myVariables и нажмем на "карандаш" рядом с названием нашего файла. В открывшемся окне есть списко всех глобальных переменных - ставим галочки рядом с time и y. Жмем "Обновить".

Еще раз нажмем - так как точка остановки находится в бесконечном цикле, мы попадем на эту же строку на следующей итерации. Теперь, значение переменной x должно быть 0.001.

Step Into () - если на строке, на которой находится в данный момент дебаггер, вызывается какая либо функция, эта кнопка позволит нам "провалиться" внутрь, и посмотреть что конкретно происходит при вызове

Step Over () - самая часть используемая. Переход к следующей инструкции.

Step Return () - если до этого вы делали "Step Into", нажатие на эту кнопку выполнит текущую функию до конца и "вытолкнет" вас наверх, к следующей после нажатия "Step Into" инструкции

Теперь, вместо х впишем time. Тут мы сразу видим правильно значение. Теперь, так как мы убрали точку остановки, если нажать , то программа просто будет работать, а изменение time мы будем видеть в реальном времени.

Предполагается, что программу CubeMonitor вы уже установили ()

Нажмем на

В открывшемся менем выберем Probe Config -> Добавить новый probe -> . Тут: Probe name ->select a probe -> ST-Link ... -> Добавить. Таким образом, мы добавили настройки для программатора.

Открыв , в Probe Config надо просто выбрать настроенный только что ST-Link.

Нажмем . Executable -> добавить новый exe-config -> . Folder - папка вашего проекта и в ней папка с названием билда (обычно Debug). File -> Select a File -> *.elf. Далее назначаем ему любое имя и нажимаем "Добавить".

Все что осталось - нажать (в случае каких либо проблем на этом ээтапе помогает вынуть-вставить программатор). Теперь - .

Думаю, название кнопок в открывшемся окне говорит само за себя. Жмем Start Acquisition и если программа на микроконтроллере работает и все прошло успешно, наблюдаем за красивой синусоидой. Если поставить галочку у , то наведясь мышкой на график можно видеть значения всех переменных в выбранный момент времени:

ссылка
Обзор переменных
Графики переменных