Отладка по SWD STM32.
У STM32 есть очень удобный интерфейс для отладки и прошивки МК — Serial Wire Debug, сокращено SWD. Его удобство заключается в том, что для отладки надо подключить всего два информационных вывода и два вывода питания. Схема подключения выглядит следующим образом.
![Отладка по SWD STM32. Отладка по SWD STM32.](https://hubstub.ru/uploads/posts/2016-01/1452595282_screenshot_5.png)
После того как выводы подключены, надо разрешить отладку по SWD в среде программирования, в KEIL это делается так.
![Отладка по SWD STM32. Отладка по SWD STM32.](https://hubstub.ru/uploads/posts/2016-01/1452594532_screenshot_3.png)
Также у SWD есть вывод SWO, его подключать необязательно, но если его подключить(подтянув к питанию через 10K), то можно будет выводить сообщения в режиме реального времени. То есть в процессе исполнения кода, МК может слать нам отладочную информацию, например, какой участок кода сейчас выполняется, получается что-то типа usart c терминалом.
Разрешить отправлять отладочную информация по выводу SWO можно во вкладке trace: разрешив трассировку, указав частоту на которой работает МК и порт.
![Отладка по SWD STM32. Отладка по SWD STM32.](https://hubstub.ru/uploads/posts/2016-01/1452594731_screenshot_4.png)
Ниже пример, который позволяет выводить сообщения с помощью SWO, в специальное окошко, само окошко можно открыть так: view->Serial windows->debug (printf) viewer.
Вот как это выглядит, картинку можно увеличить кликнув по ней.
Ну и главное, для чего задумывалась эта статья, в качестве отладчика использую китайский jlink, распиновка его коннектора стандартная и её легко можно найти в интернете, но это не мешает мне постоянно забывать какие выводы куда подключать, поэтому оставлю здесь фотку, какие пины на коннекторе jlik предназначены для SWD.
![Отладка по SWD STM32. Отладка по SWD STM32.](https://hubstub.ru/uploads/posts/2016-01/1452598201_screenshot_6.png)
![Отладка по SWD STM32. Отладка по SWD STM32.](https://hubstub.ru/uploads/posts/2016-01/1452595282_screenshot_5.png)
После того как выводы подключены, надо разрешить отладку по SWD в среде программирования, в KEIL это делается так.
![Отладка по SWD STM32. Отладка по SWD STM32.](https://hubstub.ru/uploads/posts/2016-01/1452594532_screenshot_3.png)
Также у SWD есть вывод SWO, его подключать необязательно, но если его подключить(подтянув к питанию через 10K), то можно будет выводить сообщения в режиме реального времени. То есть в процессе исполнения кода, МК может слать нам отладочную информацию, например, какой участок кода сейчас выполняется, получается что-то типа usart c терминалом.
Разрешить отправлять отладочную информация по выводу SWO можно во вкладке trace: разрешив трассировку, указав частоту на которой работает МК и порт.
![Отладка по SWD STM32. Отладка по SWD STM32.](https://hubstub.ru/uploads/posts/2016-01/1452594731_screenshot_4.png)
Ниже пример, который позволяет выводить сообщения с помощью 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.
![Отладка по SWD STM32. Отладка по SWD STM32.](https://hubstub.ru/uploads/posts/2016-01/1452598201_screenshot_6.png)
Похожие статьи