VSCode开发STM32--printf轮询(二)

VSCode开发STM32--printf轮询

  • 文件准备
    • STM32CubeMX生成代码
    • syscalls.c
    • 代码重定位
    • Makefile修改

文件准备

printf轮询其实非常简单,这里我只将特殊的情况写下。

STM32CubeMX生成代码

配置UART,不设置终端,不设置DMA。不多逼逼,不会自行百度。

syscalls.c

搜索自己电脑里面STM32Cube_FW_F1_V1.8.3\Projects\STM32F103RB-Nucleo\Examples\UART\UART_Printf
找到syscalls.c复制它,放到自己的工程文件中
VSCode开发STM32--printf轮询(二)_第1张图片

代码重定位

分别代码到stm32cubemx生成的usart.c文件中。

#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#define GETCHAR_PROTOTYPE int __io_getchar(void)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#define GETCHAR_PROTOTYPE int fgetc(FILE *f)
#endif /* __GNUC__ */

VSCode开发STM32--printf轮询(二)_第2张图片

/**
  * 函数功能: 重定向c库函数printf到DEBUG_USARTx
***/
PUTCHAR_PROTOTYPE
{
  HAL_UART_Transmit(&huart2, (uint8_t *)&ch,1,0XFFFF);
  return ch;
}
/**
  * 函数功能: 重定向c库函数scanf到DEBUG_USARTx
***/
GETCHAR_PROTOTYPE
{
  int ch;
  HAL_UART_Receive(&huart2, (uint8_t *)&ch,1,0XFFFF);
  return ch;
}

VSCode开发STM32--printf轮询(二)_第3张图片

Makefile修改

添加syscalls.c文件到makefile中,并在Makefile 文件中找到 LDFLAGS 选项然后在里面添加 -u _printf_float 参数就可以了,添加以后printf() 和 sprintf() 对浮点数的正常使用。-u _scanf_float同理

你可能感兴趣的:(stm32,stm32,vscode)