STM32G474-Nucleo调试问题——串口printf重定向无法打印字符
- z) y* {4 o) ~按照官方提供的参考例程,在设置LPUART1为串口收发端口后,生成代码。添加以下语句:
% Q- h! x8 L4 ]9 h
1 r% F2 k1 F: U$ L# q- #ifdef __GNUC__
" u. [* ~+ x% M- ^ - #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)' Z- @0 T# b/ |1 D- Q& m
- #else
/ E! u+ L) Z* C. @$ D1 m/ E% S - #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)1 u. _+ J, Q) @! j! i# ~
- #endif /* __GNUC__ */
复制代码- PUTCHAR_PROTOTYPE
9 l# `0 E' |* l9 v1 V9 M( ]: h4 A - {4 Z2 a7 g" ]6 D# E2 L6 p; o; y
- /* e.g. write a character to the LPUART1 and Loop until the end of transmission */ G% M5 @0 ?5 ^; g. V1 Y
- HAL_UART_Transmit(&hlpuart1, (uint8_t *)&ch, 1, 0xFFFF);' \' U$ [6 r8 F% H& @: X! f, b. K
4 A" E( [' N1 Z' F- return ch;
$ i4 Y. d1 S& N2 _( Q) K - }
复制代码
6 I0 h7 `$ k9 L再执行语句printf("How are you?");,发现串口没有办法打印字符。
1 g2 [: z4 f" S- A( K8 T5 P因此便在Cubemx中与例程一一比对,几乎没有差错,甚至启用了文本比较器进行代码的比较,也发现几乎没有什么差别。于是便上网查询原因,解决方法如下:, w0 p. |7 g$ x9 F7 z! L
6 f5 M9 k! L) t" Y- N: H# b% H* o# r0 d$ _, p; G- ~5 M" L
在keil魔术棒选项中勾选Use MicroLIB选项,使用微库,防止printf()之类的函数使系统采用了半主机模式,而微库不会导致系统采用半主机模式。
4 ~% L, f2 x' I( Q! {, m问题解决,结果如下:
3 S. y6 G7 Q" p( T. t8 z* J! Q* H( V
9 f! ^1 i& r9 _9 {* ]- e; z
) @. Y. u+ Z+ t6 Q* F Y
4 f. o5 t6 e, O3 ]! p R. `
: r5 K4 F! B9 x3 p# p7 f
|