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

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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版