stm32cubemx中生成工程的usart1使用printf的两种方法

stm32cubemx中生成工程的usart1使用printf的两种方法

最近在从标准库转型为stm32cubemx开发记录一下遇到的小问题
网上已经有很多相同的printf解决方法了,这里整理两种简单的方法

方法一
1、在生成的usart.c中的/* Includes ------------------------------------------------------------------*/下添加

#include "stdio.h"

不添加会报FILE错误
修正内容:测试以后MX重新生成代码在usart.c的Inlcudes的#include "stdio.h"会被删除,还是把#include "stdio.h"放在下面/* USER CODE BEGIN 0 */的代码保护区吧

然后在代码保护区/* USER CODE BEGIN 0 */添加,不在保护区添加MX生成代码时会被删除,也不能自己手动添加保护区

/* USER CODE BEGIN 0 */
#include "stdio.h"
#ifdef __GNUC__
/* With GCC, small printf (option LD Linker->Libraries->Small printf
   set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
 
 
PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the USART2 and Loop until the end of transmission */
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
 
  return ch;
}
/* USER CODE END 0 */

2、然后在main.c中的
/* USER CODE BEGIN Includes /
/
USER CODE END Includes */
保护区中添加

#include "stdio.h"

不能添加在/* Includes ------------------------------------------------------------------*/中,重新生成时会被删除

如果不在main.c下添加的话会报printf错误

3、在主函数中循环写段代码测试一下

  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_Delay(1000);
		printf("123!\r\n");
  }
  /* USER CODE END 3 */

这里就不截图了,实际已经在串口助手成功打印了

还有第二种printf的方法比较方便简单
方法二
这里提供了一种和网上不一样的printf使用方法,咱也是学习来的这里记录一下
生成工程以后不用处理usart.c,直接在main.c中的保护区添加代码
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* USER CODE BEGIN PD */

  #define printf1(...) HAL_UART_Transmit(&huart1,\

 										(uint8_t *)u_buf,\

										sprintf((char*)u_buf,__VA_ARGS__),\

										0xffff)

/* USER CODE END PD */

然后还是在main.c的保护区要定义一下u_buf的数组

 /* USER CODE BEGIN PV */
 uint8_t u_buf[256];
 /* USER CODE END PV */

之后我们就可以在主函数中使用了,来测试一下
这里主要调用的时候用的是printf1,而不是printf

/* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
        HAL_Delay(2000);
        printf1("123456789");
  }
  /* USER CODE END 3 */

结果串口助手成功打印,完结。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值