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

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

[复制链接]
风中的IT 发布时间:2015-1-7 11:37
在用STM32用作开发时,网上例程都是KEIL下运行的,但是现在好多都是IAR下运行,在研发中加入串口打印便于调试,以下是printf函数的定义,已通过验证
! N7 m" K$ g5 c9 |+ A% ?% n1 [$ S1 }
3 `+ R! }) Z. {* P5 J( X0 Y
int fputc(int ch, FILE *f)
2 P/ T/ \) i4 G, j, X8 j{" O. W0 b# p4 o) z
        /* 写一个字节到USART1 */
( F4 H( A1 C$ X$ u. Y        USART_SendData(USART1, (uint8_t) ch);
6 }! P+ {# v* h; n. g: H& T
9 X9 W  O. C4 A/ r# z4 g; S        /* 等待发送结束 */
% L) L% R1 c5 _" k7 A& L0 a& K        while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
5 h5 j1 |: P4 r4 j. b1 K        {}
& m3 z9 M# r* z( H; o  B/ k  {4 u* r+ ~; ^7 V' l( d% }
        return ch;. G2 H, g) E- y9 e0 W
}  R  s" V6 t6 h0 H& O
9 e# i* d3 v# n7 `4 S( L1 y5 Y
/*
5 L+ l$ l* z6 Z& n*********************************************************************************************************' `0 t4 `: v: B- K, Q: M
*        函 数 名: fgetc
4 `, q( L; I0 N( r7 J. J8 V6 v*        功能说明: 重定义getc函数,这样可以使用scanff函数从串口1输入数据) D3 H$ l) V1 \( A. f
*        形    参: 无
# e4 J' y: T+ G' e7 d6 U*        返 回 值: 无- c, j5 _! K% N
*********************************************************************************************************; v; }+ L; q: ]9 ~
*/$ H7 s0 ~( I* F! c4 ~
int fgetc(FILE *f)
! q& Q9 g0 |% L5 h) A4 A{) O: K* Q5 q0 P/ F! S  K7 i( |
        /* 等待串口1输入数据 */$ o9 |6 J2 ~5 X) Q7 K
        while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);( c8 g* }* p* q- e0 x/ g9 o$ @4 h

* O" S9 O' }. g# i# ]* \        return (int)USART_ReceiveData(USART1);
& S' J/ z. w# w* r% a* Q9 Q}/ n" G* A; b4 H' z& H# \* b
- E9 y1 d7 {% i
. U+ K; O$ e* Q* a
收藏 评论23 发布时间:2015-1-7 11:37

举报

23个回答
晓枫VS枯叶 回答时间:2015-1-7 12:14:56
keil重定向的都是那几句,不过关于半主机的那段代码不能用在IAR上可以用宏定义屏蔽,也不会影响在keil上的使用
8 N; E% A! `" o7 P
  1. #if defined ( __CC_ARM   )0 Z* V6 [( h" [- I5 W
  2. #pragma import(__use_no_semihosting)            
    4 Z+ v; w; W( T# j, i4 }
  3. //标准库需要的支持函数                 
    # f3 U0 Y3 `* L$ r+ ]; V5 _: d( _
  4. struct __FILE / @8 L3 J4 r# B1 Q. i/ [8 R
  5. { " v( W0 _, g) w
  6.         int handle; , A# F7 k8 {( V, j

  7. ; _6 t% f  ]# Q" b
  8. };
    ' n- M3 D+ g1 k' l) A3 j

  9. 7 T! d; q, A' s- b0 H. g
  10. FILE __stdout;      
    ; }% L. ?; ~4 b
  11. //定义_sys_exit()以避免使用半主机模式    ; }2 l9 j% w* U
  12. _sys_exit(int x) . a, C- a1 W- _* |6 ~# J
  13. { 5 O( V# M; J3 Z3 \
  14.         x = x; " c0 M, |3 a/ ~5 w4 O+ ]
  15. }
    , T2 _/ n5 a$ \1 I) f6 _9 g; I$ ^
  16. #endif
    2 m) z( R* b/ `& _) }1 Z5 y( \. S
  17. //重定义fputc函数
    ' _2 g( u) P; |0 I, B* y
  18. int fputc(int ch, FILE *f)
      u6 E% C2 E/ w' y! [
  19. {      
    ( Z( J# ^+ w: ]+ Y
  20.         while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    0 o4 N( R2 C; g3 _
  21.     USART1->DR = (u8) ch;      
    ; ]  H0 L& R7 c9 d6 x, N7 Q
  22.         return ch;
    $ `  @$ _  Z3 M, I( \, d1 P
  23. }
复制代码

: }( @  H  n( M+ T* V& Z/ @这样keil和IAR都能用,不用改什么东西!
风中的IT 回答时间:2015-1-7 12:23:29
晓枫VS枯叶 发表于 2015-1-7 12:14
/ N* d& {: D) A! Skeil重定向的都是那几句,不过关于半主机的那段代码不能用在IAR上可以用宏定义屏蔽,也不会影响在keil上的 ...
3 _4 z0 {( u( @& n5 K. W  |) Z
你的这个我试试看啊,之前我把keil教程的代码复制到IAR下不能用
风中的IT 回答时间:2015-1-7 12:56:05
晓枫VS枯叶 发表于 2015-1-7 12:44
" t  G4 T1 b" \, h$ I$ s! n我在IAR上和keil上都试过,可以用的,你再试一下!

- I. `! u5 y! w; a8 e恩,试过了,能行,很不错,请问你对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
: Q% H: \0 z' `; j1 l7 ?7 K. k# C重定向?IAR的重定向是这个函数吗?
; q8 a' o- _" k0 f
是啊,已通过验证
白日衣衫尽 回答时间: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& `8 Y& m3 r& L/ M+ y
外部flash用的SPI吗?

$ P$ k" q, u& \, [' U( y( }; D  B- k不是,要是SPI就简单了,但是类似于SPI
12下一页

所属标签

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