
本帖最后由 Y-D 于 2018-7-24 09:14 编辑 $ k9 o9 W1 h6 R, K# Z1 @ 在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__ #definePUTCHAR_PROTOTYPE int __io_putchar(int ch) PUTCHAR_PROTOTYPE { // 注意下面第一个参数是&huart1,因为cubemx配置了串口1自动生成的 HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, HAL_MAX_DELAY); return ch; } 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--C Linker--Miscellaneous---Other oprtions 选项空中填写:-u_printf_float即可。到此为止TrueStudio即可支持printf的所有数据类型输出。 程序输出: ![]() 效果图如下: ![]() 高手请绕过。。。。。。。 |
【STM32图书分享之二十一】—《ARM MCU开发工具MDK使用入门》
节省PCB面积的方法
STM32的硬件资源介绍
嵌入式开发环境常用开发工具的使用
ST针对STM8推出全新开发工具STM8CubeMX
【中文文档】UM1727_STM32 Nucleo板软件开发工具入门
UM2052_STM32 MCU探索套件软件开发工具入门
UM1727_STM32 Nucleo板软件开发工具入门
旺宝辅助开发工具合集
【STM32电机培训online】+ 神奇的电机开发工具ST Motor Profiler
0 ^. }1 y4 X8 Y, T7 |. y" h# X5 }
感谢分享,但是代码要这样才对:
/* USER CODE BEGIN 0 */
#include "stdio.h"
9 l# J% w: @# p, L: z3 X
#ifdef __GNUC__8 G, S3 O* l2 A4 T6 o+ s- }
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)2 i2 A! Z9 O2 F# ~ v' ?
PUTCHAR_PROTOTYPE- ^3 ?9 u7 w% h7 E, }
{1 Y: W$ ^# w6 w1 f. \0 }. |* Q4 R
// 注意下面第一个参数是&huart1,因为cubemx配置了串口1自动生成的$ Y. b3 W8 |6 r3 f& Q3 f6 h
HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, HAL_MAX_DELAY);6 k2 h) Q6 k6 @9 _- B, ]
return ch;
}% V* m& ]9 k& D' E( O C c5 D
#endif7 l: T0 G, X8 i9 g; `
int _write(int file, char *ptr, int len)
{5 Z/ n& Q$ y2 F
int DataIdx;! }- R$ Y9 Z: M8 j: k, j( @
for (DataIdx = 0; DataIdx < len;DataIdx++)* C% \# X5 z& @7 n! K
{" M+ _* |2 L" o2 w2 H
__io_putchar(*ptr++);4 _1 l( n2 P* P1 }( T {! h
} w' j% M" E4 E% R7 Y& O5 L! L0 s+ \
return len;2 Q0 ~3 r9 A, w+ Z! U8 X
}& e# v1 X' P( `, @& s9 b& j- F
/* USER CODE END 0 */; h9 r$ G: I( s4 Y' E
我在楼主的代码上加了空格,还有漏了的#endif
0 A; o! Q+ q6 {6 W7 E: o: D* N
然后-u_printf_float增加的位置具体是:工程属性->C/C++ build->Settings->Tool Settings->C Linker->Miscellaneous->Other options才对。这样才完整的。
在Atollic TrueSTUDIO for STM32 9.0.1上测试OK。2 |2 p" M/ g) z- b7 \$ E
$ r7 B9 o/ ^6 j. u5 E7 c