完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32中printf重定向到串口
学习STM32过程中,经常打交道的莫过于串口,你可以将任何信息,当然重要的是调试信息打印到串口中输出,总是用一个字节发送函数或者字符串发送函数,总是有些不放便,之前编程中熟悉的莫过于printf了,下面就给出了用printf打印到串口的方案,当然方案不止一个,仅供参考。 1、 添加printf的头文件 #include 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
最佳答案
|
|
|
|
guanrui1202 发表于 2018-8-20 08:20 你这个是错的,因为环境是gcc而不是MDK。 楼主在问问题钱不会搜论坛就直接发帖子,资源太浪费了。 参考下面的帖子吧 http://www.stmcu.org/module/forum/thread-612930-1-1.html http://www.stmcu.org/module/foru ... mp;highlight=printf |
|
|
|
其实 GCC 环境下 newlib 已经有 printf 了,反倒是缺 _write。
我这里有参考代码(我因为有不止一个设备会用 write 所以加了一层抽象,但是概念是类似的):https://github.com/SushiBits/LCD ... /system/src/usart.c |
|
|
|
试过了 还是不行 |
|
|
|
Eclipse对C库支持的不好,默认的是newlib库,你得添加对C库的函数支持,这里有点文章你参考下,应该能帮到你。
http://blog.csdn.net/qiuzhiqian1 ... ionNum=10&fps=1 |
|
|
|
一下代码可用,请参考!!
#include #include #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; } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
112 浏览 0 评论
971 浏览 1 评论
使用stm32l451片子,对ad7606进行3通道100k采样值跳动问题?
1429 浏览 1 评论
STM32进行DMA数据转运,为什么只有A组最后一位数据被转运到B组去?
1879 浏览 2 评论
2175 浏览 3 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-4 20:24 , Processed in 0.682315 second(s), Total 83, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191