Я установил цепочку инструментов для Windows для платы обнаружения STM32F401C, используя Eclipse CDT 4.5.1 (Mars), ARM GCC 4.9 2015q3, GnuArmEclipse-Plugin от Liviu Ionescu, OpenOCD 0.9.0 и STM32CubeMX 4.11.0.STM32 Перехват коммутатора CubeMX/GNU/Eclipse-Toolchain (newlib и libgloss)
В основном, я сгенерировал проект SW4STM32 с использованием STM32CubeMX, импортировал все в новый проект Cross ARM GCC Eclipse C и адаптировал некоторые параметры, то есть символы, тип CPU, FPU и файл ссылок. Пример простого светодиодного мигания построен успешно и может быть выполнен с помощью OpenOCD, также работают точки останова.
Для того, чтобы обеспечить системные вызовы, требуемые newlib или newlib нано, например, _sbrk
и _write
, я начал с --specs=nosys.specs
опцией линкера. Таким образом, динамическое распределение памяти работает нормально. Однако я хотел бы сам реализовать функцию _write
, чтобы печатать на дисплее или отправлять данные через UART.
В libgloss функция _write
имеет слабый символ, поэтому ее должно быть достаточно, чтобы повторно реализовать ее. Я сделал это в моем main.c:
int _write (int fd, char *ptr, int len)
{
HAL_GPIO_TogglePin(LD5_GPIO_Port, LD5_Pin);
HAL_Delay(300);
return len;
}
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
HAL_GPIO_TogglePin(LD5_GPIO_Port, LD5_Pin);
printf("Blink");
while(1)
{
// do nothing
}
}
Я ожидал, что светодиод мигает, но только команда переключения в основной функции сам показал эффект.
Почему моя функция записи не называется? Я что-то пропустил?
Это была недостающая часть! Благодарю. – Dino