STM32G474-Nucleo调试问题——串口printf重定向无法打印字符
: h: k/ R! ^' m5 M3 v5 b! Q按照官方提供的参考例程,在设置LPUART1为串口收发端口后,生成代码。添加以下语句:
/ ` a" z' G$ F! ~5 a4 E( J$ o' |2 q& u2 s" X- D7 O, ]
- #ifdef __GNUC__' ^' {. M8 {& _- K E3 x' T6 S# l
- #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
: F* [6 i2 Y3 g; A! ^ - #else
9 P1 _! Y+ H* V9 T& e. X' \5 M - #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
- n8 N6 H0 [0 P1 i9 V+ U - #endif /* __GNUC__ */
复制代码- PUTCHAR_PROTOTYPE) G# c$ ~5 d( K0 B# u$ }
- {8 q2 e- b" W6 J( _( Z; P0 t2 _
- /* e.g. write a character to the LPUART1 and Loop until the end of transmission */
) g: a9 D" H9 a9 P& Y- F2 T8 t - HAL_UART_Transmit(&hlpuart1, (uint8_t *)&ch, 1, 0xFFFF);
U0 s" x& D, w
1 L. @* V% o" s) w6 `- return ch;
1 B7 k1 P( l( x6 q# t+ | - }
复制代码
( ]1 Y2 Z1 I( l9 L8 m9 _再执行语句printf("How are you?");,发现串口没有办法打印字符。
9 J/ f Z5 Y9 q9 A( f! c, w! f, x因此便在Cubemx中与例程一一比对,几乎没有差错,甚至启用了文本比较器进行代码的比较,也发现几乎没有什么差别。于是便上网查询原因,解决方法如下:
) m: \$ ~0 W; a2 d8 `- g4 R d) K& H4 ?
2 N1 i" j- Q- l" n2 Q, n# [* z/ v在keil魔术棒选项中勾选Use MicroLIB选项,使用微库,防止printf()之类的函数使系统采用了半主机模式,而微库不会导致系统采用半主机模式。- Z6 ~. \+ s' M
问题解决,结果如下:
4 V1 H2 Z% |1 g4 [0 x. C6 l$ d
- ?7 J0 U1 I9 F6 }% F* d0 j: g- p. x5 l. b" }! |$ J
, Y0 g6 }+ @; J* V f3 c# E+ m4 G5 D6 S/ X, q. n2 L1 u% e
5 E' z( J" h# A( l |