Шаблон проекта STM32CubeIDE для SDK-1.1M для загрузки в ITMO.cLAB
- STM32CubeIDE
Конфигурация портов ввода/вывода, а также различной перифирии производится в STM32CubeIDE (рекомендуется) или STM32CubeMX.
Для избежания проблем, связанных с выполнением Вашего кода на SDK-1.1M в системе ITMO.cLAB, рекомендуется не изменять уже настроенную в этом проекте периферию.
Перед сборкой Вашего проекта рекомендуется убедиться в правильной настройке компоновщика и векторов прерываний STM32F4:
- В файле system_stm32f4xx.c:
Убедиться, что раскомментирована эта строка:Убедиться, что установлено правильное значение смещения:#define VECT_TAB_SRAM
#define VECT_TAB_OFFSET 0xD000
- В файле STM32F407VGTX_RAM.ld:
MEMORY { CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K RAM (xrw) : ORIGIN = 0x2000D000, LENGTH = 76K FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K }
- В настройках компоновщика (File -> Properties -> C/C++ Build -> Settings -> Tool Settings -> MCU GCC Linker -> General) выбран правильный Linker Script (STM32F407VGTX_RAM.ld).
Для того, чтобы после сборки проекта получить .bin файл, необходимо в настройках (File -> Properties -> C/C++ Build -> Settings -> Tool Settings -> MCU Post build outputs) установить галочку "Convert to binary file (-O binary)"
Для использования трассировочного буфера в файле main.c подключен заголовочный файл trace.h, содержащий следующие функции:
-
MX_TRACE_Init();
Функция для инициализации трассировки. -
SDK_TRACE_Start();
Функция для начала трассировки. -
SDK_TRACE_Timestamp(event, value);
Функция для сохранения временной метки одного события. Для сохранения доступны следующие события:- LED1-LED3 (Светодиоды)
- PRINT (Вызов функции SDK_TRACE_Print)
- P0-P9 (Пользовательские события)
Эти события определены в заголовочном файле trace.h.
Аргумент event принимает код события, например LED3.
Аргумент value принимает значения 1 (начало события) или 0 (конец). -
SDK_TRACE_Print("%s","FooBar");
Функция для сохранения форматной строки с временной меткой в трассировочный буфер. Работает аналогично функции printf(). -
SDK_TRACE_Stop();
Функция для завершения записи трассировки и сброса микроконтроллера.
На выполнение пользовательского кода отведено около 8 секунд, поэтому необходимо грамотно использовать циклы и задержки в своей программе.