转载自http://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=616754&page=1&extra=#pid2380833
也可以到https://stmcu.com.cn/share下载本教程的PDF版本。
有时候想收藏一些相关的文章,又不想重新百度,因此直接转载到这里来了,方便自己回想、复习,下次新建工程时候,又可以直接复制粘贴了。在此谢谢原作者Y-D
在TrueStudio开发工具中使用printf函数如果第一次接触可能会找不到方向,现将最近刚刚接触STM32cubemx配置生成TrueStudio工程串口打印的使用过程进行如下说明:
(1) STM32cubemx创建基本工程打开软件在Pinout选项卡下按照如图选择配置串口1
A、选择系统时钟来源外部晶振
B、此处我现在JLINK的SWD模式做程序的调试,所以选择如下:
C、串口1配置为异步通信模式
2、配置单片机运行频率按照下图设置为主频72Mhz
3、在Configuration选项卡下配置串口相关参数
点开USART1
就此基本配置完成,现在开始生成TrueStudio工程,打开工程设置设置程序工程保存的路劲、名称、环境支持堆栈大小设置、.c/.h文件独立创建等设置。如下图:
设置完成,点击如下图标开始生成工程。
生成工程编译无误
4、开始编写及设置让你的程序支持printf输出
A、首先我在usart.c中添加如下函数即可让TrueStudio支持printf输出(注意代码必须添加在USER CODEBEGIN x和USER CODE ENDX之间,否则下次设置cube生成会自动丢掉)。
/* USER CODE BEGIN 0 */
#include "stdio.h"
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
PUTCHAR_PROTOTYPE
{
// 注意下面第一个参数是&huart1,因为cubemx配置了串口1自动生成的
HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, HAL_MAX_DELAY);
return ch;
}
#endif
int _write(intfile, char *ptr, int len)
{
int DataIdx;
for (DataIdx = 0; DataIdx < len;DataIdx++)
{
__io_putchar(*ptr++);
}
return len;
}
/* USER CODE END 0 */
就此便可直接通过printf输出数据但是没法输出浮点数,我们可以进行如下设置即可完美支持浮点数的输出。在工程属性下找到C/C++ build->Settings->Tool Settings->C Linker->Miscellaneous->Other options 选项空中填写:-u_printf_float即可。到此为止TrueStudio即可支持printf的所有数据类型输出。
程序输出:
效果图如下:
10.jpg (52.28 KB, 下载次数: 21)
2018-7-21 16:23 上传
高手请绕过。。。。。。。