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

利用IAR环境实现STM32串口打印的函数代码

[复制链接]
风中的IT 发布时间:2015-1-7 11:37
在用STM32用作开发时,网上例程都是KEIL下运行的,但是现在好多都是IAR下运行,在研发中加入串口打印便于调试,以下是printf函数的定义,已通过验证
3 n" i5 Z+ `( B6 \  R" [7 b) z/ i( Z" |  R" p6 A9 M2 @+ u
5 n+ Z( `( `/ ~8 y0 U! i
int fputc(int ch, FILE *f)
" k$ x  t- d6 |3 w- ~{* r) U8 E8 k) {: Q
        /* 写一个字节到USART1 */9 [, S: S& U5 }. V) H$ @) I/ e
        USART_SendData(USART1, (uint8_t) ch);
/ R3 e: |+ _+ X+ H! a% C3 x) b  r4 ]$ e5 e( y1 U1 s* c1 p
        /* 等待发送结束 */& @! r) Z3 X* v' ]
        while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)6 D2 u/ z0 E5 W( ^
        {}
0 S% G( l! W) |# e4 k( a9 ^' k) ~' P  y, A, n9 w6 y4 b
        return ch;
, d; ~0 g0 h7 \* x, K9 v}
( k9 H0 c; }( J4 ?7 Y. V: {
6 N( u/ [7 t* A* `& x/*
8 u" h9 A  L% Q! i) q, t*********************************************************************************************************! h+ m7 s, S+ `) p
*        函 数 名: fgetc
' g: V; Z- x# o$ j8 Q; N! R$ Y*        功能说明: 重定义getc函数,这样可以使用scanff函数从串口1输入数据
: ~$ j6 M. g$ X4 x/ C*        形    参: 无6 x' p7 E& h1 w  X
*        返 回 值: 无$ V3 p- i6 A7 l* O1 W% `
*********************************************************************************************************
/ p* F+ [0 d) c*/
2 ^5 L, C) |* h4 oint fgetc(FILE *f)
1 |/ p! E$ z3 {" |- Z/ w{
, q( n! s# f0 ]! S        /* 等待串口1输入数据 */
4 y* V( G5 Q: A; _/ ?/ ^$ ?& q# p- i* d        while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);# ]# q( {- _4 l) h& E! J
- @5 u: V5 Q+ m4 z4 z3 s
        return (int)USART_ReceiveData(USART1);
0 h  `3 q, J$ _  g. ^  b}
! q) k$ W7 E5 p2 |) w! H
* C- B0 ]/ Y& ~: ^% F
2 n4 p4 R1 P% t
赞 收藏 评论23 发布时间:2015-1-7 11:37

举报

23个回答
晓枫VS枯叶 回答时间:2015-1-7 12:14:56
keil重定向的都是那几句,不过关于半主机的那段代码不能用在IAR上可以用宏定义屏蔽,也不会影响在keil上的使用
9 ]. l* X( K' L" |: J
  1. #if defined ( __CC_ARM   )
    - J( ?+ x  ?: C  d
  2. #pragma import(__use_no_semihosting)            
    4 I. B0 }4 u( X) Y9 T
  3. //标准库需要的支持函数                 
    & s( P5 p0 U4 `. M
  4. struct __FILE
    0 m1 K7 q2 Y; ]
  5. { ( S4 e" ?1 {1 @8 ^: Q1 t
  6.         int handle; " s: B( }) u: E( ^( E; C/ g2 r
  7. ( W- n; E" J, w+ F- ]
  8. };
      W; L. ]6 D& d. W3 _9 {- d" l

  9. 3 }" p0 O0 g; K) s/ y7 C
  10. FILE __stdout;       8 s8 F- x8 A! _) e% ~5 U$ }8 ]" I
  11. //定义_sys_exit()以避免使用半主机模式    3 c! h* W4 w- v( x
  12. _sys_exit(int x) 6 {( B8 T4 P/ z3 r) [! @
  13. {
    $ j% D! W, Z2 s) h
  14.         x = x; ) N3 K! z% [: F0 f% W
  15. } 7 Z/ P- ~% q5 @/ F% i& M( M
  16. #endif0 T: V# M4 S- c: \2 T$ [
  17. //重定义fputc函数
    - y" S4 `  Y( `' x
  18. int fputc(int ch, FILE *f)% y1 I4 v% p) }5 |; P7 D" N5 O* [5 X
  19. {      2 Z  v5 ?" ]( p1 W
  20.         while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    8 O) u6 P- W) \5 h4 I" I( ~7 L0 k/ I
  21.     USART1->DR = (u8) ch;      ) r' e+ j7 Z4 U8 l; G' e
  22.         return ch;# Z5 z# h" `- c' d9 S, F* E* E
  23. }
复制代码

" o0 b. Q2 |; n9 h* ?# Z3 S这样keil和IAR都能用,不用改什么东西!
风中的IT 回答时间:2015-1-7 12:23:29
晓枫VS枯叶 发表于 2015-1-7 12:145 F" P/ L6 R- k3 g( T
keil重定向的都是那几句,不过关于半主机的那段代码不能用在IAR上可以用宏定义屏蔽,也不会影响在keil上的 ...

( x8 c7 L" ?! |9 T7 Y& p# B你的这个我试试看啊,之前我把keil教程的代码复制到IAR下不能用
风中的IT 回答时间:2015-1-7 12:56:05
晓枫VS枯叶 发表于 2015-1-7 12:44
( m/ W# U  z# a! B* K, T7 p我在IAR上和keil上都试过,可以用的,你再试一下!

: C$ ~2 m0 V' ?恩,试过了,能行,很不错,请问你对STM32控制外部FLASH这块清楚吗,我遇到了一个问题,可以请教下您吗
风中的IT 回答时间:2015-1-7 11:38:23
已通过验证
最初的梦想! 回答时间:2015-1-7 11:44:32
以后会用到,很好的代码
qianfan 回答时间:2015-1-7 11:46:30
重定向?IAR的重定向是这个函数吗?
风中的IT 回答时间:2015-1-7 12:09:16
QianFan 发表于 2015-1-7 11:46
1 g; n6 X) @# T) ~重定向?IAR的重定向是这个函数吗?

4 a$ W0 X' i) M$ P是啊,已通过验证
白日衣衫尽 回答时间:2015-1-7 12:33:03
很好的代码啊,找了好久 终于找到了
hahaha007 回答时间:2015-1-7 12:35:05
很不错,先mark一下
晓枫VS枯叶 回答时间:2015-1-7 12:44:25
我在IAR上和keil上都试过,可以用的,你再试一下!
晓枫VS枯叶 回答时间:2015-1-7 12:59:24
外部flash用的SPI吗?
巅峰残狼 回答时间:2015-1-7 13:17:56
谢谢分享
fangyan5218 回答时间:2015-1-7 13:22:13
很不错的代码,能用到
风中的IT 回答时间:2015-1-7 13:37:13
晓枫VS枯叶 发表于 2015-1-7 12:59
1 p6 H. s/ k+ x. _+ P外部flash用的SPI吗?

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