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

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

[复制链接]
STMCU小助手 发布时间:2022-9-7 15:55
一、printf()函数重定向+ g8 A/ G$ _/ S3 t4 o4 {) c9 v
方法一:使用MicroLIB库
* _6 ~$ k5 p9 U4 G/ }* G1. 勾选 Use MicroLIB
) X# f% r; e; E2 i( P* C具体如下图所示:
4 d  N( l; k  F1 z5 ]0 q) `- x/ q# c! M# }5 n
3ece679043bd4ee6a9644bd3f87752fa.png & G1 _& L, E9 n8 X$ d! Z6 B( Z

4 L, U6 @3 Q  j$ o# s2. 重定向 fputc 函数
1 B( B" ^1 I  D4 Z3 p具体代码如下:1 ~( b& h& \0 E* P- r/ x( l2 N

# T% J  f3 A' {6 A8 o5 y
  1. #include <stdio.h>//需要调用stdio.h文件5 ^' H0 d5 O/ ?9 c

  2. 8 I/ H  B" D9 g7 J5 V: m
  3. /**********************printf重定向****************************/: o1 Q; t( C; }
  4. int fputc(int ch, FILE *f)/ V4 ?: a) n" ~  @  |
  5. {  
    & Y! v) T7 N3 j% w% O4 }" q. K5 |
  6.         USART_SendData(USART1, ch);        //发送数据
    " V! S9 T( J3 {" ]
  7.         while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);//等待发送完成2 W  Z- A. N8 I4 k6 X
  8.         
    9 V0 c3 G7 x, X% T9 h# X" |7 S
  9.         return ch;
    - l2 q+ D, M4 P7 b: x* ^' X
  10. }
复制代码

4 B- g8 m0 L1 S% W5 y将此代码一般是添加在对应的串口通信文件中,我这里是添加在 Uart1.c 文件中。2 e) X. m+ q* A6 [( \

( j* L. w: B9 q3 C  X6 S. v方法二:不使用MicroLIB库9 E5 e; w$ L% E( _: w' N* u
不用勾选 Use MicroLIB,直接在 Uart1.c 文件中添加以下代码:
: C$ k$ q$ l8 L
- ^2 _% N  K0 Q1 D; G$ f. q
  1. #include <stdio.h>//需要调用stdio.h文件
    6 |! R7 R: X$ x# p3 A
  2. - l9 m' P" L! g% v* B
  3. /**********************printf重定向****************************/
    7 u6 i; R$ E- Q8 ?) I
  4. //取消ARM的半主机工作模式2 t0 e. z) ?: b
  5. #pragma import(__use_no_semihosting)//标准库需要的支持函数                 3 V0 N/ s( c/ {1 m
  6. struct __FILE
    6 ^5 z; T1 ~' g
  7. { : s: d1 c% K$ O4 K
  8.         int handle;
    1 j$ R5 n* {/ N; E4 L/ f
  9. }; 8 t% I# e- V- l; _
  10. FILE __stdout;       1 ^$ X# R1 y1 ~% o
  11. void _sys_exit(int x) //定义_sys_exit()以避免使用半主机模式
    ! [, A0 J1 b$ y$ j
  12. { * I% C  v! [" x* t
  13.         x = x; * Y# u- v0 ~9 N; o7 x3 N" V- l
  14. } 9 U9 K: Z& D& S

  15. * \- d% F& Y# V  I
  16. int fputc(int ch, FILE *f)
    & P9 R% U6 i0 Z# D  M' j( z5 [" |
  17. {  . m, H& n9 u, p
  18.         USART_SendData(USART1, ch);        //发送数据6 z% k, r" j0 K/ O; ^0 g# h
  19.         while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);//等待发送完成1 I, E' t" P  z; p! ]0 ^
  20.         return ch;
      {. h3 L% Z! k+ @' w8 X
  21. }
    ' j; U. V9 m" J5 ]5 [# D
复制代码
0 _% U/ l; G5 a; i6 L7 c+ V/ q
二、printf()输出数据8 r: k( ]5 l) g, W4 Q- K& e
1. printf()函数详解( k8 Y; E! c; q8 B$ F# w: z/ G
点击蓝色文字,可以跳转到printf()函数详解文章。; ^% ]3 F0 ^4 W; y: |. m
C语言:printf()—格式数据输出
7 }- K/ d2 f% v
$ [0 i0 J  v+ x2. printf()函数输出数据调试实验
4 t- ^0 r& d/ P我单片机中程序的功能是:每200ms发送一次 工欲善其事,必先利其器。, G2 J) h* Q8 y9 w% V
具体程序如下:
* W$ q+ I) D7 \" O3 o7 Cmain.c
$ y& o6 t* v7 |. |3 T; W; ^3 N' m
  1. #include "stm32f10x.h"
    0 J. z! q5 H" M$ r- \2 ~& w0 q
  2. #include <stdio.h>
    % E( F- e3 Y5 o% v+ Q) B( ]
  3. #include "delay.h"* F/ B  s3 M5 D  _
  4. #include "Uart1.h") u3 B$ n/ h) @# U+ R! a

  5. 0 Z0 n( P8 t4 S' _
  6. int main (void)
    , d+ R# L2 H* X+ b
  7. {/ ~- i: b8 R* M# Z
  8.         Uart1_init();//串口1初始化
    0 `, z1 x' m; B6 F5 f
  9.         * R$ I$ p( t- Y6 J
  10.         while(1)
    ; {1 E! R2 u8 L+ {$ y
  11.         {
    ; y) N. V3 O% h. J$ y
  12.                 printf("工欲善其事,必先利其器。");6 @" v  S4 T' l+ M0 R3 Y8 K6 T
  13.                 delay_ms(200);                                                //延时200ms4 Z- \- {6 B6 I+ `+ r; D" j
  14.         }7 f" y% Z2 Q4 J# J/ i, B; c
  15. }
复制代码

; j# X1 b: T4 t0 j8 T  ^* n串口调试助手的现象如下:
2 J6 y) n# e' U7 r7 j4 m
; M9 y- J) Q: p+ m% g( z; ]% v1 l c699e1d9e23b440196d202cfd2bc751a.png
7 f# f2 u5 `7 [: B8 X' O
) @4 F- t- w9 v# n  f- f, h————————————————
/ n0 q& d6 P9 b2 d. ^4 ?4 v2 h% Q+ |版权声明:根号五
. {  ]5 f7 @5 E' K  u9 k9 C) ^
* Q1 w/ k" O6 h3 t  f, q$ E4 I+ m$ A0 T. P0 I- C
赞 收藏 评论0 发布时间:2022-9-7 15:55

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版