你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Eclipse 构建 STM32 工程中 如何实现printf函数

[复制链接]
mouse_ 提问时间:2018-1-19 16:44 /
自己搭建了 stm32 Eclipse 的工程 但是无法实现prinf函数 想请教一下各路神仙怎么实现啊
收藏 评论7 发布时间:2018-1-19 16:44

举报

7个回答
pythonworld 回答时间:2018-1-19 19:27:10
                                                                             STM32中printf重定向到串口
        学习STM32过程中,经常打交道的莫过于串口,你可以将任何信息,当然重要的是调试信息打印到串口中输出,总是用一个字节发送函数或者字符串发送函数,总是有些不放便,之前编程中熟悉的莫过于printf了,下面就给出了用printf打印到串口的方案,当然方案不止一个,仅供参考。

1、 添加printf的头文件   #include <stdio.h>
2、重写int fputc(int ch, FILE *f)函数
int fputc(int ch, FILE *f);
函数

int fputc(int ch, FILE *f)
{

USART_SendData(USART1, (uint8_t) ch);

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

return ch;
}

3、修改一下选中Use MicroLIB   Target——Code Generation——选中Use MicroLIB



这样就可以像以前那样使用printf了。http://blog.csdn.net/wdscq1234/article/details/7944036

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

Inc_brza 回答时间:2018-1-19 20:11:00
pythonworld 发表于 2018-1-19 19:27
STM32中printf重定向到串 ...

你这个是错的,因为环境是gcc而不是MDK。
楼主在问问题钱不会搜论坛就直接发帖子,资源太浪费了。
参考下面的帖子吧
https://www.stmcu.org.cn/module/forum/thread-612930-1-1.html
https://www.stmcu.org.cn/module/ ... mp;highlight=printf

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

maxtch 回答时间:2018-1-19 20:27:19
其实 GCC 环境下 newlib 已经有 printf 了,反倒是缺 _write。

我这里有参考代码(我因为有不止一个设备会用 write 所以加了一层抽象,但是概念是类似的):http://github.com/SushiBits/LCDC ... /system/src/usart.c

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

mouse_ 回答时间:2018-1-23 09:30:58
Inc_brza 发表于 2018-1-19 20:11
你这个是错的,因为环境是gcc而不是MDK。
楼主在问问题钱不会搜论坛就直接发帖子,资源太浪费了。
参考下 ...

试过了  还是不行
chrome777 回答时间:2018-1-24 16:11:03
Eclipse对C库支持的不好,默认的是newlib库,你得添加对C库的函数支持,这里有点文章你参考下,应该能帮到你。
http://blog.csdn.net/qiuzhiqian1 ... ionNum=10&fps=1

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

pythonworld 回答时间:2018-2-26 19:06:56
一下代码可用,请参考!!
#include <stdio.h>
#include <unistd.h>
#include "stm32l4xx_hal.h"

extern UART_HandleTypeDef hlpuart1;
int _write(int32_t fd, char* ptr, int32_t len);

int _write(int32_t fd, char* ptr, int32_t len) {
        if (fd == STDOUT_FILENO || fd == STDERR_FILENO) {
                int32_t i = 0;
                while (i < len)
                        HAL_UART_Transmit(&hlpuart1, (uint8_t *) &ptr[i++], 1, 0xFFFF);

        }
        return len;
}
Han0097 回答时间:2020-8-17 11:12:05
pythonworld 发表于 2018-1-19 19:27
STM32中printf重定向到串 ...

人家说的是Eclipse不是KEIL

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版