stm32 printf 重定义

在之前,一直搜了很多篇博客,在使用cubemx之后,stm32的printf重定义大概有几种方式。
先说说什么叫重定义,我认为是将printf的输出通过不同的usart串口,而这个串口是可以自己定义的
网上方法很多,但是不知道为什么试了很多种之后,发现只有一种可以使用,如果读者知道为什么的话可以告诉一下我。
方法大概有几种:

1、在usart.c文件上添加一下代码块

(这种是我试过可行的)

/* USER CODE BEGIN 1 */
#ifdef __GNUC__
  /* With GCC/RAISONANCE, 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
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);  
  return ch;
}

/* USER CODE END 1 */

2、在main里面添加fputc()函数

int fputc(int ch, FILE *f)
{

USART_SendData(USARTx, (uint8_t) ch);

while (USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET)return ch;
}

更改完之后在keil 平台上改下设置:
Use MicroLIB ->Target -> Code Generation -> 选中Use MicroLIB
在main.c里面添加<stdio.h>头文件,不然的话会显示FILES未定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值