Отладка по SWD STM32.

Отладка по SWD STM32.

У STM32 есть очень удобный интерфейс для отладки и прошивки МК — Serial Wire Debug, сокращено SWD. Его удобство заключается в том, что для отладки надо подключить всего два информационных вывода и два вывода питания. Схема подключения выглядит следующим образом.
Отладка по SWD STM32.

После того как выводы подключены, надо разрешить отладку по SWD в среде программирования, в KEIL это делается так.
Отладка по SWD STM32.

Также у SWD есть вывод SWO, его подключать необязательно, но если его подключить(подтянув к питанию через 10K), то можно будет выводить сообщения в режиме реального времени. То есть в процессе исполнения кода, МК может слать нам отладочную информацию, например, какой участок кода сейчас выполняется, получается что-то типа usart c терминалом.
Разрешить отправлять отладочную информация по выводу SWO можно во вкладке trace: разрешив трассировку, указав частоту на которой работает МК и порт.
Отладка по SWD STM32.

Ниже пример, который позволяет выводить сообщения с помощью SWO, в специальное окошко, само окошко можно открыть так: view->Serial windows->debug (printf) viewer.

#include "stm32f10x.h"
#include <stdio.h>

#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);
}


int main(void)
{
	while(1)
	{
		printf("Hello from stm32 printf!\r\n"); 
	}
}

Вот как это выглядит, картинку можно увеличить кликнув по ней.
Отладка по SWD STM32.


Ну и главное, для чего задумывалась эта статья, в качестве отладчика использую китайский jlink, распиновка его коннектора стандартная и её легко можно найти в интернете, но это не мешает мне постоянно забывать какие выводы куда подключать, поэтому оставлю здесь фотку, какие пины на коннекторе jlik предназначены для SWD.
Отладка по SWD STM32.
комментарии
6