你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103标准库开发---Uart串口通信实验---printf()函数重定向

[复制链接]
STMCU小助手 发布时间:2022-9-7 15:55
一、printf()函数重定向
/ B% w8 Q3 ?5 O3 t& L方法一:使用MicroLIB库
6 }" u; x: Q3 x* n6 d- C0 O) @1. 勾选 Use MicroLIB
4 K, e! W/ @" I; E具体如下图所示:/ `1 W7 j7 F0 t; m, ?

: k3 J9 ^( i2 z( f+ y 3ece679043bd4ee6a9644bd3f87752fa.png & L/ T9 s: ]+ h( E7 W7 ]

) R2 Q- |! {9 t: C# ]2. 重定向 fputc 函数, J  Q, J- @8 ~$ b/ C
具体代码如下:
/ f7 t+ u3 S9 S8 O' z1 m0 A% P! \% n" r) @  `8 x6 ~, D; s' Y
  1. #include <stdio.h>//需要调用stdio.h文件- `& N" `" x9 r' Y
  2.   |9 i0 i; [  T+ G! A
  3. /**********************printf重定向****************************/( I  {  ?0 z: L) s1 w5 {
  4. int fputc(int ch, FILE *f)# V+ M- S! E% a/ e
  5. {  
    / W* F' W) i% h7 j, o; E8 t. g
  6.         USART_SendData(USART1, ch);        //发送数据
    ( w7 [' ^3 C4 G. O' K
  7.         while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);//等待发送完成
    / c+ p" u4 f3 l* O, R% Q' b
  8.         1 X/ q* {( u0 ]/ O9 b8 y
  9.         return ch;7 M# J6 p* j/ T" y! K+ B
  10. }
复制代码

1 U9 N0 v' S: W/ f$ ^2 G9 A将此代码一般是添加在对应的串口通信文件中,我这里是添加在 Uart1.c 文件中。' [9 E/ s6 @/ O6 x

: L' h+ [9 O' Z9 _4 ^, Z8 U方法二:不使用MicroLIB库3 S. x' g4 F( q0 i3 y4 s
不用勾选 Use MicroLIB,直接在 Uart1.c 文件中添加以下代码:
+ t( z) p+ y" K9 i6 i" W6 F; M" Z4 _4 O, d# S) |7 u
  1. #include <stdio.h>//需要调用stdio.h文件  u! Z  m8 }* f

  2. 8 L1 i1 _- T! [3 q3 J
  3. /**********************printf重定向****************************/' w7 l! R4 \. H3 u6 G. [2 N2 N
  4. //取消ARM的半主机工作模式
    - T3 x. @* ^/ d
  5. #pragma import(__use_no_semihosting)//标准库需要的支持函数                 
    # T5 [- M+ M- Y0 B/ _# N; s
  6. struct __FILE + O' G: ~7 G- u( B" u1 d4 ?( ]7 m
  7. { 9 C  \% q+ k" u
  8.         int handle;
      A, p0 R4 \2 J
  9. }; 1 }" h: ?; F2 ~7 q) m; J
  10. FILE __stdout;       ( b; V& P) y' V( y: [0 n
  11. void _sys_exit(int x) //定义_sys_exit()以避免使用半主机模式
      \6 w& D8 d- ]! G
  12. { ( y  [& y5 a+ F8 M
  13.         x = x;
    5 j( B& ^# }0 r1 ^
  14. }
    9 |6 d8 c, @) Z, r: k. q+ W
  15. + w0 O$ o6 r' `# |
  16. int fputc(int ch, FILE *f)& c+ k5 S0 n* y0 E& c  `
  17. {  9 a& |0 B: Z, |$ u  b, Y+ C
  18.         USART_SendData(USART1, ch);        //发送数据! o' a/ O" {( s, C& E! l" t
  19.         while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);//等待发送完成5 [# Z) a2 N0 H3 ^* |
  20.         return ch;
    ) o5 w! C+ ~2 Y
  21. }
    4 I- q2 g0 o+ e, B) \: }  ?
复制代码

5 J5 M* S7 K  J- ~, y  r1 |7 E& z二、printf()输出数据7 V! b+ d- L5 z
1. printf()函数详解
! j3 ^% {" S7 O$ f( g6 n. B  }点击蓝色文字,可以跳转到printf()函数详解文章。
# ~4 I* F# V1 |7 V+ L) u2 j1 a: DC语言:printf()—格式数据输出% P" F# l9 p. [; u

+ h& H, M; _! r- O0 E& T1 E+ R2. printf()函数输出数据调试实验
" [0 j" F, G) X' W我单片机中程序的功能是:每200ms发送一次 工欲善其事,必先利其器。
4 X6 J/ v5 v3 j  ^: Y2 P具体程序如下:
9 I& P' e# \, v: S. b" Nmain.c
6 Q  @3 P+ @5 F& t3 x
  1. #include "stm32f10x.h"7 Y! j7 u* j0 }9 J! G4 c' d
  2. #include <stdio.h>& _) Z7 H1 U, R, ^8 Z( Y
  3. #include "delay.h"3 f5 R5 t1 ]6 r5 {- u
  4. #include "Uart1.h") L$ Q9 }+ n1 M1 [4 ~
  5. 3 E9 P4 R0 E' }3 H. I1 w
  6. int main (void)
    ( c1 Q! m; M( N; F6 |
  7. {. d3 h, \  k. Z" [3 H% d
  8.         Uart1_init();//串口1初始化
    " I4 U) c( C. K
  9.         
    7 c3 n: ~$ k3 h2 R, ~& c
  10.         while(1)
    # Y% c) e5 x8 i
  11.         {
    & @! ^) H- I0 H% b9 |
  12.                 printf("工欲善其事,必先利其器。");6 z& y: d2 m, V  l! y
  13.                 delay_ms(200);                                                //延时200ms
    9 V4 c6 a* H% D% g" b5 Q5 C9 L2 `4 i; {
  14.         }
    ! `3 _% N/ W6 A. m* F/ F. k2 z, N% J1 k
  15. }
复制代码

( z" S7 r# t2 n% _/ M2 L串口调试助手的现象如下:
6 v% v) h' V3 y% l& A' A1 U$ O/ m; N9 v% i1 ?( L, H0 i/ X
c699e1d9e23b440196d202cfd2bc751a.png 0 t$ o# U5 `9 R
) L& y# z& \2 m) C& L
————————————————
: ^  J7 E5 a( f4 O版权声明:根号五
, s: V. Y+ S+ S6 G& u# ^0 m
+ U! [) g% ^) A: z/ j
+ W  u, E, @( N6 p1 G
收藏 评论0 发布时间:2022-9-7 15:55

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版