Вывод информации через SWO в KEIL(STM32)

Posted by Reason89 | Posted in , , ,

    Обычно я для подобных нужд использовал один из UART'ов. А здесь наткнулся на подобное в одном из вебинаров, и решил записать в качестве заметки.
    Выводить информацию в STM32 можно через специальный вывод SWO программного интерфейса SWD.
 В первую очередь необходимо настроить отладчик в самом Keil, согласно скриншотам:
  
    Стоит обратить внимание на использование SW, вместо JTAG. И на последнем скриншоте необходимо выставить частоту на которой работает процессор, а не  какой кварц используется. И соответственно выставить какой порт будет использоваться . Обычно ставят P0, но здесь особой разницы в принципе нет.
     Добавляем в проект, между /* USER CODE BEGIN Includes */ и /* USER CODE END Includes */:
#include 
#define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))
#define ITM_Port16(n)   (*((volatile unsigned short*)(0xE0000000+4*n)))
#define ITM_Port32(n)   (*((volatile unsigned long *)(0xE0000000+4*n)))
#define DEMCR           (*((volatile unsigned long *)(0xE000EDFC)))
#define TRCENA          0x01000000

struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
FILE __stdin;
int fputc(int ch, FILE *f) 
   {
       if (DEMCR & TRCENA) 
        {
            while (ITM_Port32(0) == 0);
            ITM_Port8(0) = ch;
        }
    return(ch);
    }

    Затем в проекте в необходимых местах выводим необходимую нам информацию. Главное использовать после функции SystemClock_Config();, В противном случае будем получать иерголифы:
printf("Start Init\n"); // Для вывода текста
printf("%d\n",a);       // Для вывода значений переменных

    Для самой отладки необходимо  перейти View -> Serial Windows -> Debug printf() Viewer, затем нажимаем Run(F5). И наблюдаем в появившемся окне все то, что прописали на вывод.
     Почему то во всех источниках предлагают использовать STM32 ST-LINK Utility. Чтоб им воспользоваться необходимо точно так же запустить процесс отладки в Keil, потом закрыть его, открыть ST-LINK Utility, настроить его на тот же Port и частоту, что настраивали Keil и нажать Connect.



Comments (0)

Отправить комментарий