Не все знают, что ST-Link на плате поддерживает трассировку (хотя бы по минимуму) и это можно использовать, чтобы выводить текстовую отладочную информацию с помощью printf прямо в кейл. Причём, это даже совсем не сложно.
Для начала требуется модуль трассировки в свойствах отладчика включить (см. на рисунке 1). И указать актуальную частоту ядра контроллера (см. на рисунке 2). Если system_stm32f4xx.c не используется, пишем 16, если же используется, то пишем 168. Если своя настройка производится — пишем своё число.
Для текстового отладочного вывода используется нулевой порт, только его и разрешим (см. на рисунке 3), нечего захламлять линию. То есть надо снять все галочки, каких на картинке нет (или в соответствующее поле записать 1).
читать дальше
В Кейле все функции printf и иже с ними уже реализованы в стандартной библиотеке (MicroLIB которая что ли), единственное, что мешает их непосредственному использованию, так это то, что библиотека не знает, куда девать получившийся текст. Может, вы его в какой-нибудь уарт хотите отправить, или в USB-CDC. Может, по Ethernet, а в данном случае в ITM (это какой-то модуль трассировки в контроллере). Да и библиотека не знает, как их настраивать перед использованием. Потому она всё это оставляет на пользователя.
Для данной задачи необходимо реализовать всего одну функцию:
По идее, в ней надо смотреть, куда же (аргумент stream) библиотека хочет отправить очередной символ (аргумент c) и отправлять его туда. Но пока файлов нет, будем отправлять всё в отладочный порт. Для этого где-то в CMSIS есть объявление и реализация функции ITM_SendChar, которая записывает символ в нулевой порт трассировщика, чтоб передать его на комп. Т.е.
Если функция не реализована, то при вызове printf и иже с ним контроллер застрянет в fputc-заглушке.
Конечно, можно реализовать отправку символа вообще куда угодно, было бы желание. Для работы с файлами надо ещё дополнительно реализовать ряд функций, но это уже смотрите сами. Или я потом посмотрю.
Пример использования:
UPD от 15.10.2013: если Кейл после правильной настройки пишет Trace: No Synchronization вместо Trace: Running... Можно попробовать обновить прошивку отладчика, для чего скачайте STM Studio посвежее, (или ST Toolset, или ST Link Utility), там есть программа-обновлятор, например, у меня она содержится в папке C:\Program Files\STMicroelectronics\STMStudio\dll и называется ST-LinkUpgrade.exe. Или тут: C:\Program Files\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility. Или тут: C:\Program Files\STMicroelectronics\st_toolset\stlink. Что будет, то можно и обновить. У меня в данный момент версия отладчика V2.J17.S0 JTAG Debugger.
Можно использовать для отладки. Любители printf-отладки могут порадоваться.
Само окошко вывода смотрим в меню View->Serial Windows->Debug (printf) Viewer.
Файл: retarget.c
Сам проект.<< Предыдущее Следующее >>