CoIDE串口重定向printf

使用CoIDE重定向printf函数,让其用USART1输出,参考了网上的答案,有的是版本太低,有个用Retarget_printf 组件的(参考连接http://blog.csdn.net/k331922164/article/details/50373762),试了都不行,折腾了一个中午使用了下面的方法暂时先用着,有个缺点是只能用printf,sprintf格式转化不行,将就着先,希望大神看到了此篇博文能支招一下:


添加C_Library

  • 1、修改syscalls.c 里的内容,如下图:
    CoIDE串口重定向printf_第1张图片

UART_PutChar 改成自己的Uart1_PutChar(),我自己修改如下:
这里写图片描述


验证

CoIDE串口重定向printf_第2张图片

使用ST-Link下载到MINI STM32开发板,使用串口助手查看

CoIDE串口重定向printf_第3张图片

注意

CoIDE串口重定向printf_第4张图片
配置选项(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串口重定向printf_第5张图片

CoIDE提供的C库C_Libray里有同样的函数,修改成自己的就可以了
。书上最后的注释应该少了一些,但是下一页也没有,从注释上也能知道重定向的代价是增加代码体积

你可能感兴趣的:(STM32单片机)