Данная статья написана не для бывалых и бородатых, а для маленьких и зеленых, которые не могут попасть в рот ложкой с первого раза, в целом как и автор :-)
что имеем для работы:
оригинальный STlink-v3minie
отладочная плата от WeAct с камнем stm32g474
жмень проводов
Что хотим получить: вывод осмысленных сообщений себе в консоль на устройство, где пишется код
Начнем по порядку: сначала подключим STlink к отладочной плате. Есть две необходимые схемы подключения.
Первой схемой будет схема ''эхо'' — она используется для проверки работоспособности самого STlink и верности конфига терминала.

Второй схемой будет "боевая" схема - схема которой мы уже будем отлаживать плату.

windows
Cтавим драйвера на свою печку. Получить драйвера можно с офф сайта ST, но только с таблэткой в виде VPN и правильного региона ST аккаунта.

После чего, как ни странно устанавливаем драйвера. Не вижу смысла подробно описывать, куда жать, но скриншотики пусть будут.



Отлично, с драйверами мы разделались, теперь установим то, чем будем слушать тот бред, что будет нам выдавать контроллер. Как самый распространенный, пожалуй, вариант, будем юзать PuTTY. Соответственно скачиваем, устанавливаем:




Установили, отлично. Теперь можно слушать COM Port нашего STLink. Что для этого нужно? Для начала удостоверимся в работоспособности самого STLink. Подключим все по схеме "эхо" и запустим PUTTY

После откроется терминал, в котором будет печататься то, что вы набираете на клавиатуре, это «эхо», ваш STlink живой, ура. Если символы не печатаются — проверьте качество контакта между RX и TX пинами отладчика.

linux
Я сижу на Arch linux, поэтому установку показываю именно для этого дистрибутива.
Устанавливаем драйвера и утилиты:
pacman -S stsw-link007
pacman -S screen
Выводить данные будем через утилиту screen. Почему? Потому-что.
Подключаем все по схеме "эхо".
Чтобы узнать какой порт занимает наш STlink используем утилиту ls:
ls /dev/tty*
serial device в linux имеют названия вида ttyACMх, нам выпало ttyACM0.

теперь воспользуемся утилитой screen, установленной ранее:
sudo screen /dev/ttyACM0 9600 # 9600 - это скорость в бодах, выставляется
# в соответсвии с выбранной вами скоростью в настройках uart, для проверки работы
# ставим любое значение.
После ввода команды в терминале можно будет печатать символы в терминале. Это наше "эхо". Если символы не печатаются, то проверьте качество контакта между пинами RX и TX на вашем STlink

Пример конфига для stm32
PS
PS. конфиг не эталонный, так делать возможно даже нельзя, но у нас задача какая? Правильно чтобы работало, поэтому делаем так что-бы работало! Поэтому приступим.
открываем CubeMX и начинаем конфигурировать:
тут спрятаны скрины конфига, чтобы не засорять





Пин LED - это не обязательная штука, автору просто нравится мигающие диодики).
Теперь наш камень сконфигурирован, ура! Осталось написать код, чтобы g474 начал отдавать байтики:
int main(void)
{
uint8_t message[] = "message from MCU\r\n"; // сообщение которое мы хотим вывести
uint8_t messageSize = sizeof(message) - 1; //размер сообщения которое мы хотим вывести
//этот блок кода нам генерирует CubeMX, так что не обращаем на него внимание
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();
// тут уже пишем наши магические буковы
while (1)
{
HAL_UART_Transmit(&huart2, message, messageSize, 1000); //отправка сообщений в
HAL_Delay(2000);
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
}
}

собираем, заливаем, проверяем иии...
Неожиданно, но и такое тоже может быть, что произошло? Я подключал свою g474 c помощью китайского ЛБП в хруще, а тут, так получилось, нет нормальной земли и бывают соседи, что любят заземляться на батареи, отсюда и шумная земля. Что делать? Я решил эту проблему через запитку отладочной платы от ноута... Всё, проблема решена))
Подключаем правильно, перезапускаем утилиту ииииии... вжух:

Наш контролер умеет писать сообщение вам в терминал, вот теперь ура!
На этом всё. Пока.

Под редакцией @midlifecriz
Fox_Alex
Странное дело - у тебя есть полноценный отладчик, но привычка отлаживать через printf еще не отпала)
Есть способ проще - использовать асинхронный трассировочный вывод (пин SWO отладчика). Переопределяешь _write туда и printf из стандартной библиотеки будет спамить в консоль.
https://www.youtube.com/watch?v=ST_fUu6ACzE
HardWrMan
А ещё, этот самый printf тянет за собой столько гадости, что в некоторые МК может и не влезть. Уж лучше взять LA и дрыгать ногами в режиме реального времени на время отладки.
Fox_Alex
Кстати да, принтф тяжелый и можно его не везде из-за использования динамической памяти. Но всегда можно свой putstring цельно-статический какой-нить родить и им пользоваться. Я последнее время обленился и лог вывожу просто в память, а потом отладчиком смотрю что там происходило. Ну и брякпоинты по коду и по изменению памяти - наше все.
d_nine
Ещё, если printf используется для вывода значений с плавающей запятой, не забываем выравнивать стек (вероятно и кучу) в памяти, иначе вместо адекватных значений будем получать непонятную кашу. При этом вывод обычного текста и целочисленных данных может работать корректно.