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

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

[复制链接]
在路上11111111 发布时间:2016-12-11 16:19
  1. #ifndef MicroLIB//没有在MDK中打上MicroLIB对勾的话     执行下面的数据
    & s  |3 p  K& c
  2. #pragma import(__use_no_semihosting)//这句话的意思是不调用半主机模式5 E$ t' T: S, x2 L1 h
  3. struct  __FILE+ b3 V, H! K* q7 c" H5 H" G
  4. {8 E  I( o# n# A$ S- B% I3 s' |- P4 Z
  5.     int handle;
    ' [# n7 j7 m- n# Z' }2 P, H( Z
  6. };
    3 M# H' L4 {( R, z# D2 L
  7. FILE  __stdout;$ u6 L2 l* y: [0 v4 D- `9 J; w& O, r
  8. _sys_exit(int x)//避免使用半主机模式
    5 \- N8 [/ ]( L8 P& n4 G
  9. {' W7 _! k2 \7 L: F7 ^/ E
  10.   x = x;2 S5 Z5 P! y3 |( G
  11. }
    0 E+ G* z. Z5 o7 d; |# f
  12. int fputc(int ch,FILE *f)//重新定义fputc函数使其输出到串口上
    3 `, Y8 b- e8 R7 S
  13. {
    4 H. h8 l4 H4 \
  14.    while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET)//等待发送成功
    2 s+ I5 `. W1 i( `
  15.    {}) b* L- k! N! r$ f/ V! G6 ^. |
  16.    USART_SendData(USART1,(uint8_t) ch);//发送数据
    6 X/ {6 ~4 n9 s, v: _2 ?* Q
  17.    return ch;
    9 p1 {3 x, H$ `" p; R" I9 O
  18. }* x+ `1 T* n" R6 b) i9 ~4 A) L1 K- Q
  19. 8 Z  q- g0 v( X0 G7 t* m
  20. 7 a0 s& j- U+ D
  21. 在这里希望大神能想详细讲解一下#ifndef    到  #endif之间的东西,谢谢。; r* h( u" J: {# z, k9 C+ L8 _
  22. int ferror(FILE *f)
    9 T" h) V9 f: h: w  y  ]0 V5 n
  23. {0 m5 e7 S4 |( Z8 S( A( C
  24.    return EOF;5 o9 B, m/ Y7 V: C4 ]! ~- N$ l; o2 \
  25. }
    9 |) j" S5 w" J
  26. #endif
    " c' U; X5 L3 I% I0 g" @2 d
  27. #ifdef USE_FULL_ASSERT5 o8 S1 y$ E9 Q  C+ g3 w+ P
  28. /*************' w) [% ?7 `$ [# \
  29. 如果你定义了USE_FULL_ASSERT
    & n9 G& z+ r& [* b6 F" e5 Q
  30. 8 P+ }. o2 q9 q7 D) i2 A# ~
  31. 就可以在assert_failed,加入:
    # B* P, ?1 Q9 {9 H, K" Q) b
  32. printf("Wrong parameters value: file %s on line %d\r\n", file, line);
    $ t' X( n8 k# x0 B0 W  s
  33. 就可以使用assert_param(expr) 来判断当前参数是够正确,如果不正确,就会打印出错的文件,以及出错的行。
    + ]+ Y& @7 b4 m! }
  34. 这样就可以方面调试信息了。
    + D# f% m# [" X2 f
  35. *********/
    2 l/ _) d1 _" P% Q7 A8 K
  36. void assert_failed(uint8_t* file,uint32_t line)//输出错误信息. U  r. X3 e  r! {) l
  37. {1 k5 ~& G& [. _2 m- V
  38.     printf("Wrong parameters value: file %s on line %d\r\n",file,line);) ?. p" H- l% m6 D* u! x( @, i
  39.         while(1)
      k& C, H( S$ B
  40.         {
    : e* \: @! L* L/ K0 x- Q4 M% T) r5 y
  41.         }1 [3 ^# x# y" s, T2 W$ V
  42. }
    ' |  b$ G, }* b1 G
  43. #endif
    - ]$ \# a) d$ T6 C* q' ]
复制代码

  }/ [0 a4 ]0 s+ {2 @6 b7 ^2 p/ e# s3 R
赞 收藏 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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版