STM32CubeIDE 的应用: 重定向scanf,printf 到stm32串口
我的昵称有人用过了啊
2021年07月18日 17:33

一。导入stdio.h库文件

/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */

#include <stdio.h>

/* USER CODE END Includes */

二。重写函数

/* USER CODE BEGIN 4 */

#ifdef __GNUC__

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

#define GETCHAR_PROTOTYPE int __io_getchar(FILE *f)

#else

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

#define GETCHAR_PROTOTYPE int fgetc(FILE *f)

#endif /* __GNUC__ */

PUTCHAR_PROTOTYPE

{

HAL_UART_Transmit(&huart4, (uint8_t *)&ch, 1, 0xFFFF);

return ch;

}

GETCHAR_PROTOTYPE

{

  uint8_t ch = 0;

  HAL_UART_Receive(&huart4,(uint8_t *)&ch, 1, 0xFFFF);

  if (ch == '\r&#​39;)

  {

      __io_putchar('\r&#​39;);

      ch = '\n&#​39;;

  }

  return __io_putchar(ch);

}

/* USER CODE END 4 */

三。测试

然后就可以在程序中使用printf调试串口了。可以在main.c的主循环中加入下面一段代码验证printf是否已正确的重定向:

uint8_t rd[10];

scanf("%s&#​34;,rd);

printf("hello %s\r\n&#​34;,rd);