2015-12-03 10 views
1

Я установил цепочку инструментов для 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 
    } 
} 

Я ожидал, что светодиод мигает, но только команда переключения в основной функции сам показал эффект.

Почему моя функция записи не называется? Я что-то пропустил?

ответ

0

Вы должны либо явно промыть буфер на выходе (fflush(stdout)), либо отправить строку ('\n').

+0

Это была недостающая часть! Благодарю. – Dino

 Смежные вопросы

  • Нет связанных вопросов^_^