[应用相关] GCC编译stm32程序,如何重定向printf

[复制链接]
1454|15
 楼主| sadicy 发表于 2022-5-1 17:29 | 显示全部楼层 |阅读模式
把keil的直接复制过去,没成功啊
应该怎么做
kiwis66 发表于 2022-5-2 14:57 | 显示全部楼层
是不是底层原理不一样?
aspoke 发表于 2022-6-6 13:25 | 显示全部楼层
使用MicroLib  
mnynt121 发表于 2022-6-20 21:33 | 显示全部楼层
重定向printf输出到串口输出的多种方法  
ufbycd 发表于 2022-6-21 09:04 | 显示全部楼层
keil的C库是MicroLib, GCC的C库是NewLib,重定向函数不一样。
GCC的重定向函数是_write, 不过如果是用STM32CubeIDE新建工程的话,工程模板里实现了跟MicroLib一样的putchar里调用了_write函数。
sonicll 发表于 2022-6-21 09:28 | 显示全部楼层
楼主可以搜一下用eclipse开发STM32的相关内容,用GCC的话,需要重定向的是_write()函数
hilahope 发表于 2022-6-22 22:05 | 显示全部楼层
调用MDK微库(MicroLib)的方法  
xiaoyaodz 发表于 2022-6-24 10:32 | 显示全部楼层
intfputc(int ch, FILE* stream)此函数
ulystronglll 发表于 2022-6-24 21:25 | 显示全部楼层
printf函数阻碍了程序的运行  
deliahouse887 发表于 2022-6-25 14:23 | 显示全部楼层
#pragma import(__use_no_semihosting) struct __FILE {int handle; }; FILE __stdout; void _sys_exit(int x) { x = x; }intfputc(int ch, FILE *f){ while((USART1->SR&0X40)==0); USART1->DR = (u8) ch; return ch;}
lzmm 发表于 2022-7-10 15:12 | 显示全部楼层
gcc不知道怎么冲映射   
febgxu 发表于 2022-7-10 16:44 | 显示全部楼层
使用的是microlib吗?   
ghuca 发表于 2022-7-10 18:56 | 显示全部楼层
这个使用keil可以重定向的。   
ingramward 发表于 2022-7-10 19:43 | 显示全部楼层
你看看studio的代码是怎么重定义的  
香水城 发表于 2022-7-12 15:05 | 显示全部楼层
假设你使用STM32CbueIDE, 它也是基于GCC的。

main()前面加上下面代码:

/* USER CODE BEGIN PM */
#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__ */
/* USER CODE END PM */


在用户代码里加上下面代码:

PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the LPUART1 and Loop until the end of transmission */
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);

  return ch;
}

另外,加上“stdio.h"头文件就可以使用了。

 楼主| sadicy 发表于 2022-7-16 15:29 | 显示全部楼层
感谢!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

166

主题

1036

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部