本帖最后由 Y-D 于 2018-7-24 09:14 编辑 ' J, E5 p: ?, l2 C& B p* P 8 F1 O) V. M( K9 j& k& [ 在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的所有数据类型输出。 程序输出: 效果图如下: 高手请绕过。。。。。。。 3 W4 n) X" U' t |
【STM32图书分享之二十一】—《ARM MCU开发工具MDK使用入门》
节省PCB面积的方法
STM32的硬件资源介绍
嵌入式开发环境常用开发工具的使用
ST针对STM8推出全新开发工具STM8CubeMX
【中文文档】UM1727_STM32 Nucleo板软件开发工具入门
UM2052_STM32 MCU探索套件软件开发工具入门
UM1727_STM32 Nucleo板软件开发工具入门
旺宝辅助开发工具合集
【STM32电机培训online】+ 神奇的电机开发工具ST Motor Profiler
" f' q! Q- b, k6 d7 U
感谢分享,但是代码要这样才对:" v+ `9 Q `7 z
: F$ i8 l% E; J* j. t# C: E! U$ Y
/* USER CODE BEGIN 0 */9 r& @' E7 f' K& O0 i
#include "stdio.h"
#ifdef __GNUC__- d. _% K- b$ T3 @* p" ~
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
PUTCHAR_PROTOTYPE! p r- u; e- l! f' @' B+ y, K6 g
{8 N7 q. R* N% r% q q4 `% c& O# h
// 注意下面第一个参数是&huart1,因为cubemx配置了串口1自动生成的
HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, HAL_MAX_DELAY);/ |3 @4 E+ r( {% a% P
return ch;
}4 M- e. B. B H% b
#endif$ k% P- z `, w$ }1 P. K. p' U
int _write(int file, char *ptr, int len)4 G$ l1 g Z# b* `6 F q! t
{8 ?) ^, ?' q! b% j+ Q" E7 V
int DataIdx;7 V) d3 @( ^* v+ X1 F3 N$ y4 D* e
for (DataIdx = 0; DataIdx < len;DataIdx++)8 n* u1 O* D q; U8 M/ B7 _0 R# A
{( t7 [1 g; b; u! W( [
__io_putchar(*ptr++);1 c$ E/ X/ b' T6 X9 i: ^9 P- z5 @
}
return len;: V, _% D: V' Q* x0 A% P. g
}6 U' I: x: F6 V" G
/* USER CODE END 0 */; y: R: J2 D& O* g; f
我在楼主的代码上加了空格,还有漏了的#endif. p% f! k9 v- d* I) h
( O# g' h" B* T9 q1 Q) K
然后-u_printf_float增加的位置具体是:工程属性->C/C++ build->Settings->Tool Settings->C Linker->Miscellaneous->Other options才对。这样才完整的。- W( u/ Z% N) N! j5 _ `! C( m
2 W2 J! c. K) G- j3 M( X' S G6 [5 i$ t
6 K' E7 h6 p3 Q
在Atollic TrueSTUDIO for STM32 9.0.1上测试OK。2 W0 k$ ?* e2 F9 V
. q, O0 v' ?8 B9 c: J, ]
! J4 u) C3 @# O [! ]" O+ o# Y