SWO (Serial Wire Output) — это односторонний вывод, который позволяет микроконтроллеру в реальном времени отправлять данные отладчику без остановки выполнения программы. Это идеально для:
- Вывода отладочных сообщений (альтернатива UART, но без задержек)
- Профилирования кода (измерение времени выполнения функций)
- Сбора статистики (счетчики, события)
- Системного мониторинга (загрузка CPU, использование памяти)
Основное преимущество перед UART: не нужно занимать USART и настраивать прерывания, данные передаются по отдельному каналу отладки.
- Подклюните пин SWO (PB3) на вашем STM32F411CEUX к выводу SWO (пин 6) на отладчике ST-Link/V2.1.
Обязательно: Подключите GND, SWDIO, SWCLK как обычно.

Откройте файл .ioc вашего проекта. Системный ядро -> SYS. Debug: Выберите Serial Wire

- Убедитесь, что ядро (HCLK) тактируется на стандартной частоте (например, 96 МГц для F411). SWO требует правильной настройки тактирования!
- Зайдите в Run -> Debug Configurations:

- Добавьте в ваш код (например, в main.c):
(ITM_SendChar может отсутствовать!)
/* Подключаем модуль для ITM (Instrumentation Trace Macrocell) */
#include "stdio.h" // Если хотите использовать printf
// Функция для отправки одного символа через SWO
void ITM_SendChar(uint8_t ch) {
if (ITM->TCR & ITM_TCR_ITMENA_Msk) { // Проверяем, включен ли ITM
while (ITM->PORT[0].u32 == 0); // Ждем, пока порт не освободится
ITM->PORT[0].u8 = ch; // Отправляем байт
}
}
// Опционально: перенаправляем printf на SWO (удобно для отладки)
int _write(int file, char *ptr, int len) {
for (int i = 0; i < len; i++) {
ITM_SendChar(ptr[i]);
}
return len;
}Пример использования в main():
int main(void) {
HAL_Init();
SystemClock_Config();
// ... остальная инициализация
// Простой вывод символа
ITM_SendChar('A');
// Использование printf (если подключили _write)
printf("Hello from SWO! System clock: %lu Hz\r\n", SystemCoreClock);
while (1) {
HAL_Delay(1000);
printf("Tick: %lu\r\n", HAL_GetTick()); // Вывод каждую секунду
}
}— Перейдите в меню Window -> Show View -> Other… Введите «SWV» и выберите SWV ITM Data Console:

— Начните отладку (Debug) ВАЖНО!!!!
— На вкладке «ITM Stimulus Ports» при помощи «+» выберите порт, например, 0:

Возле выбранных портов поставьте галочку:

Теперь данные будут появляться только при отладке. Чтобы отправить данные на SWO можно использовать функцию printf в коде.

Добавить комментарий