Для начала подключим заголовочный файл библиотеки Чана:
/* include headers */#include "stm32f4xx.h"#include "work.h"#include "xprintf.h"Затем объявим внешние переменные для секций данных - инициализированных и неинициализированных:
/* external vars */extern unsigned long _estack;extern unsigned long __text_end;extern unsigned long __data_start;extern unsigned long __data_end;extern unsigned long __bss_start;extern unsigned long __bss_end;После в обработчик вектора сброса добавим перенос данных из флеш в ОЗУ:
void reset_handler(void) { unsigned long *src; unsigned long *dest; src = &__text_end; dest = &__data_start; if (src != dest) while(dest < &__data_end) *(dest++) = *(src++); dest = &__bss_start; while(dest < &__bss_end) *(dest++) = 0; /* call working code */ work();}Ну и собственно в обработчик вектора таймера №4 мы добавим статическу переменную которую будем инкрементировать с каждым вызовом и выводить с помощью функции форматированного вывода xprintf:
/* timer4 irq handler */void tim4_irq_hanlder(void) { static unsigned int counter; counter++; if (TIM4->SR & TIM_SR_UIF) { /* switch leds */ LED_PORT->ODR ^= RED_LED; /* send test string */ xprintf("counter: %d : %x : %b\n", counter, counter, counter); /* clear status bit */ TIM4->SR &= ~TIM_SR_UIF; }}