Стандартная библиотека stdio.h содержит процедуры и функции, помогающие организовать общение с юзером в консольном стиле. То есть, описывает стандартный ввод-вывод. Особенно полезна printf() как способ форматированного вывода.
Для доступа к эти возможностям нам всего-то нужно рассказать компилятору как нужно вывести в консоль один символ и как получить из консоли символ. Для этого уже есть "слабые" заглушки, которые мы перекроем своей реализацией.
К примеру, хотим консоль на USART1. Настраиваем порт на работу в асинхронном режиме и добавляем нужный ввод-вывод символа.
int __io_putchar(int ch) {
// ждем пока буфер передатчика будет готов принять символ
while ( !(LL_USART_IsActiveFlag_TXE(USART1)) );
// отсылаем символ в передатчик
LL_USART_TransmitData8(USART1, ch);
return 0;
}
int __io_getchar(void) {
// ждем прихода байта
while ( !(LL_USART_IsActiveFlag_RXNE(USART1)) );
return LL_USART_ReceiveData8(USART1);
}
Если же хотим дебажить через SWO (не забыть разрешить Trace Asynchronous SW), то вывод байта такой
int __io_putchar(int ch) {
ITM_SendChar(ch);
return ch;
}
Вот и вся премудрость. Остальное уже все сделано до нас ;)
Комментариев нет:
Отправить комментарий