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);
И, теперь все работает.