Pull to refresh

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);

И, теперь все работает.

Tags:
+2
Comments0

Articles