:::: MENU ::::

keil, debug prinf viewer, swd, swo

При использовании keil и программатор на swd — можно без остановки программы следить за изменениями переменных и выводить отладочные сообщения в debug printf viewer — это все делается через pin SWO, поэтому не забываем его при разводке платы. Для этого нужно иметь последнюю версию драйверов st-link и правильно настроить keil.

Настраиваем keil:

  • Открываем проект
  • Открываем target options для проекта
  • Щелкаем на вкладку Debug
  • Выбираем ST-Link Debugger и щелкаем Settings

stlink_deb

  • Во вкладке Debug, в меню Debug Adapter выбираем порт SW (если у вас swd, а не jtag)

stlink_deb2

  • На вкладке Trace, выбираем частоту core clock — на которой у вас работает контроллер (в программе), выбираем trace enable, и выбираем порт

stlink_deb3

  • На вкладке Flash Download, если у вас раньше уже не было настроено, выбираем микроконтроллер и прошиваемые адреса

stlink_deb4

  • В программе, в том месте где вы хотите получить отладочное сообщение пишем код, не забыв перед этим включить <stdio.h>
#include <stdio.h>
ITM_SendChar('a');
  • Теперь, после запуска отладчика keil, открываем view->Serial windows->debug (prinf) viewer и запускаем программу. Сообщения будут выводиться в окно debug (prinf) viewer. Кроме того, если добавить какие-либо переменные в Watch или Memory, то они тоже будут изменяться во время работы программы, а если настройки(выше) не выполнены или SWO нету, то они изменяются только при остановке программы в точке останова.

  • kyb

    > то они изменяются только при остановке программы в точке останова.
    Но это не так. Есть опция View->Periodic Windows Update. Еще можно открыть View->Toolbox Window. И клацнуть там Windows Update.

    • badembed

      Да, действительно вы правы — специально запустил проверил. Получается SWO нужен только для трассировки и отладочной печати.

  • andreagle

    В описанном Вами случае сообщения будут выводиться и без подключения #include .

    Посмотрите где находится функция ITM_SendChar и spintf() к этому ни какого отношения не имеет.