Отладка по SWD STM32.
У STM32 есть очень удобный интерфейс для отладки и прошивки МК — Serial Wire Debug, сокращено SWD. Его удобство заключается в том, что для отладки надо подключить всего два информационных вывода и два вывода питания. Схема подключения выглядит следующим образом.
После того как выводы подключены, надо разрешить отладку по SWD в среде программирования, в KEIL это делается так.
Также у SWD есть вывод SWO, его подключать необязательно, но если его подключить(подтянув к питанию через 10K), то можно будет выводить сообщения в режиме реального времени. То есть в процессе исполнения кода, МК может слать нам отладочную информацию, например, какой участок кода сейчас выполняется, получается что-то типа usart c терминалом.
Разрешить отправлять отладочную информация по выводу SWO можно во вкладке trace: разрешив трассировку, указав частоту на которой работает МК и порт.
Ниже пример, который позволяет выводить сообщения с помощью SWO, в специальное окошко, само окошко можно открыть так: view->Serial windows->debug (printf) viewer.
Вот как это выглядит, картинку можно увеличить кликнув по ней.
Ну и главное, для чего задумывалась эта статья, в качестве отладчика использую китайский jlink, распиновка его коннектора стандартная и её легко можно найти в интернете, но это не мешает мне постоянно забывать какие выводы куда подключать, поэтому оставлю здесь фотку, какие пины на коннекторе jlik предназначены для SWD.
После того как выводы подключены, надо разрешить отладку по SWD в среде программирования, в KEIL это делается так.
Также у SWD есть вывод SWO, его подключать необязательно, но если его подключить(подтянув к питанию через 10K), то можно будет выводить сообщения в режиме реального времени. То есть в процессе исполнения кода, МК может слать нам отладочную информацию, например, какой участок кода сейчас выполняется, получается что-то типа usart c терминалом.
Разрешить отправлять отладочную информация по выводу SWO можно во вкладке trace: разрешив трассировку, указав частоту на которой работает МК и порт.
Ниже пример, который позволяет выводить сообщения с помощью 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");
}
}
Вот как это выглядит, картинку можно увеличить кликнув по ней.
Ну и главное, для чего задумывалась эта статья, в качестве отладчика использую китайский jlink, распиновка его коннектора стандартная и её легко можно найти в интернете, но это не мешает мне постоянно забывать какие выводы куда подключать, поэтому оставлю здесь фотку, какие пины на коннекторе jlik предназначены для SWD.
Похожие статьи