Artery AT32F407 и scanf()
Речь пойдет об отладке AT-START-F407 V1.3. В составе платы находится программатор/отладчик AT-Link-EZ V1.2, который подключается по USB к ПК, где он виден как COM порт.
Его же можно использовать для целей отладки, а именно выводить информацию на ПК с помощью printf(). На эту тему а Artery есть AN0015_Printf_Debug_Demo, описанные там переопределения уже содержатся в файле at32f403a_407_board.c:
FILE __stdout;
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
PUTCHAR_PROTOTYPE
{
while(usart_flag_get(PRINT_UART, USART_TDBE_FLAG) == RESET);
usart_data_transmit(PRINT_UART, (uint16_t)ch);
while(usart_flag_get(PRINT_UART, USART_TDC_FLAG) == RESET);
return ch;
}
Все что нужно сделать, это добавить в код функцию инициализации uart_print_init(115200), где 115200 скорость COM порта.
Аналогичным образом можно с консоли передавать данные в МК с помощью функции scanf(). (На эту тему я не нашел AN). Добавим в файл at32f403a_407_board.c:
FILE __stdin;
#define GETCHAR_PROTOTYPE int fgetc(FILE * f)
GETCHAR_PROTOTYPE
{
uint8_t cha = 0;
usart_flag_clear(PRINT_UART, USART_ROERR_FLAG); // Clear Overrun flag
while(usart_flag_get(PRINT_UART, USART_RDBF_FLAG) == RESET);
cha = usart_data_receive(PRINT_UART);
usart_data_transmit(PRINT_UART, (uint16_t)cha); // Echo
return cha;
}
Все работает? Нет. Надо еще вызвать функцию
usart_receiver_enable(PRINT_UART, TRUE);
scanf("%d", &k);
k = 2*k;
printf(" \n\r You entered = %d", k);
И, теперь все работает.