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

STM32中使用printf,重定向的代码

[复制链接]
在路上11111111 发布时间:2016-12-11 16:19
  1. #ifndef MicroLIB//没有在MDK中打上MicroLIB对勾的话     执行下面的数据
    - h4 z8 Z# m, B
  2. #pragma import(__use_no_semihosting)//这句话的意思是不调用半主机模式5 _0 ?0 m& v4 C( K$ \  p' ^2 w, k* B
  3. struct  __FILE
    5 P7 N+ v9 R( S$ |8 ], I
  4. {! F4 E/ X$ x5 W( ]9 u9 h, P) g  \
  5.     int handle;
    : H" q, f9 j* y+ Q' A
  6. };
    & X, H. |: k. y5 K, k% Y
  7. FILE  __stdout;/ B+ K( D4 L' s: W7 q
  8. _sys_exit(int x)//避免使用半主机模式+ Y% ?7 N" u  d7 [. b0 S; W
  9. {: K6 ~5 _0 h) p% G
  10.   x = x;9 Q, L* A, t! D, L: h
  11. }8 N, o2 A! b3 a' G4 Y% I6 H
  12. int fputc(int ch,FILE *f)//重新定义fputc函数使其输出到串口上4 P) S, E- p5 V
  13. {
    : X/ o* o, A% t$ m
  14.    while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET)//等待发送成功9 ~  \1 O$ r/ B& ^1 Q- a
  15.    {}
    8 b- s3 O6 c0 v. x! @) [
  16.    USART_SendData(USART1,(uint8_t) ch);//发送数据8 L, d& }. u, F8 G% F
  17.    return ch;# v$ ^$ w/ z8 n9 U( L1 R$ H1 I
  18. }! W$ K$ `  j& Q6 ?- r

  19. 0 R" k- P2 Z) H0 f1 k2 b

  20. $ \8 q: u  a. Q' O4 H0 g. e0 C
  21. 在这里希望大神能想详细讲解一下#ifndef    到  #endif之间的东西,谢谢。
    $ q" e* w1 Z( V& E4 ~( \3 U
  22. int ferror(FILE *f)2 Y( m4 J8 D  v/ N( y$ u
  23. {
    / t* }* E* ^' a% j1 |
  24.    return EOF;
    ; L3 ?* _) I2 G$ W( ^
  25. }7 r, a! L6 Y8 f& k
  26. #endif1 N6 O7 j, Q& [0 I
  27. #ifdef USE_FULL_ASSERT
    8 Y0 h7 j7 o+ I& N8 c4 p4 t/ [
  28. /*************
    $ g2 f8 G3 H2 r  A* Q' ^  U
  29. 如果你定义了USE_FULL_ASSERT
    % u) D" F* E$ i5 s3 b: {; [& D

  30. 2 i8 h! s' B( E* ^
  31. 就可以在assert_failed,加入:
    + |' v/ S+ K% y+ b- F( W
  32. printf("Wrong parameters value: file %s on line %d\r\n", file, line);% o  t( [* M! C& X& T& p* F
  33. 就可以使用assert_param(expr) 来判断当前参数是够正确,如果不正确,就会打印出错的文件,以及出错的行。4 T* Z3 l* P  p# S% p& U
  34. 这样就可以方面调试信息了。
    7 K6 l; l( Y/ y) [7 M
  35. *********/! g, d, u5 x+ X' I& U
  36. void assert_failed(uint8_t* file,uint32_t line)//输出错误信息
    ' D- p9 n5 V$ R
  37. {
    ; g3 `, F( u/ K" ^" m" |
  38.     printf("Wrong parameters value: file %s on line %d\r\n",file,line);+ B) g# e9 s+ L- r- v
  39.         while(1)
    " R& m* [3 o; ^% L: P* v6 {
  40.         {
    # I# d% t' V# d( K
  41.         }
    " I$ S, d: n4 `
  42. }% u& z! I$ m0 d8 X; |8 b' c
  43. #endif; k8 ~* t7 [  ]
复制代码

4 r* d5 \' a  e! b/ w* Q' `* Y2 ^+ b* O1 _; M) ]1 o* [- e1 G
收藏 5 评论2 发布时间:2016-12-11 16:19

举报

2个回答
jackten 回答时间:2016-12-11 20:01:27
学习学习                        
leo121_3006061 回答时间:2016-12-11 21:22:35
楼主研究的真细,赞一个

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版