使用CoIDE重定向printf
函数,让其用USART1输出,参考了网上的答案,有的是版本太低,有个用Retarget_printf
组件的(参考连接http://blog.youkuaiyun.com/k331922164/article/details/50373762),试了都不行,折腾了一个中午使用了下面的方法暂时先用着,有个缺点是只能用printf
,sprintf
格式转化不行,将就着先,希望大神看到了此篇博文能支招一下:
添加C_Library
- 1、修改
syscalls.c
里的内容,如下图:
将UART_PutChar
改成自己的Uart1_PutChar()
,我自己修改如下:
验证
使用ST-Link下载到MINI STM32开发板,使用串口助手查看
注意
配置选项(Configuration)基础设置(Basic Setting)那里我选择的是Not use C library
,但是我们之前添加了组件呀,应该是这个组件和配置的那个C library不同吧,我也试了Use Base C Library
也是可以的。
另外关于syscalls.c
文件里面有些函数是用户函数,我就是改了其中一个函数实现了printf
的功能,那么sprintf
理论上也是可以的,但是没有深究下去了,希望了解的同学可以互相交流一下。
2017/5/27更新
晚上重新测试了一下,使用Retarget_printf
组件可以输出整数格式和字符串格式,但是无法输出浮点型,而且这个组件的介绍也说了,使用这个组件可以使代码生成的文件体积减小,而用C_Library
这个组件再通过修改函数后实现的重定向,最后生成的程序是前面的4倍左右,有91k(HEX文件)体积太大了,所以用Retarget_printf
组件实现重定向前还是尽量不用printf
函数了
2017/6/2号更新
查看了相关的书籍《The Definitive Guide to Arm Cortex-M3 and Cortex-M4 Processors,Third Edition》,里面有重定向(Re-targeting)的说明,介绍了KEIL,IAR和GCC的,因为CoIDE使用的是GNU ARM工具链,下面是在GCC下的重定向说明:
CoIDE提供的C库C_Libray里
有同样的函数,修改成自己的就可以了
。书上最后的注释应该少了一些,但是下一页也没有,从注释上也能知道重定向的代价是增加代码体积