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

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

[复制链接]
风中的IT 发布时间:2015-1-7 11:37
在用STM32用作开发时,网上例程都是KEIL下运行的,但是现在好多都是IAR下运行,在研发中加入串口打印便于调试,以下是printf函数的定义,已通过验证
' ?% ^: v5 \2 s+ a2 {" [- l, Z8 B1 v: ~! a* J4 x' z/ f
' |# f) }  I, w& e$ J# W
int fputc(int ch, FILE *f)/ x+ g9 K3 f' K) Y2 ?, ~
{
  |8 R0 {+ Z. g  D: h( K        /* 写一个字节到USART1 */
: ^1 H  i( G1 v/ g  [+ A6 y        USART_SendData(USART1, (uint8_t) ch);5 `. o! J$ P7 N! c

7 d; a7 A; I3 `6 ]/ _3 m3 D/ k        /* 等待发送结束 */) s; b. h; i, Z) Z! q" N
        while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
  c4 \% b" i3 _! f* {        {}0 W  j, H2 t1 M
4 `( ^! P# n- c4 C
        return ch;
& ~, V$ }4 |: S  r6 s5 _5 q}
  o- _/ Z7 I1 w4 u  p; ~, Q5 Q
# ~! c+ F  _& z2 R/*
1 D3 ^) D& n6 U0 A*********************************************************************************************************7 s- f5 e  k" L! h
*        函 数 名: fgetc2 _- o  Z( v2 `
*        功能说明: 重定义getc函数,这样可以使用scanff函数从串口1输入数据7 t+ {( U- L1 D! \- e( [7 x% L# i
*        形    参: 无2 ]& [( u- w5 X0 x& z  p
*        返 回 值: 无
4 R' _! o! X  [3 D( Y* S- `  A) q*********************************************************************************************************5 c1 ]) c, J8 n( Y* p
*/  |# g: ?; [4 C# P4 z2 B" E+ z3 J
int fgetc(FILE *f)3 A- O4 j5 t* r2 \. M
{
3 f' D$ p* T7 Q( i& F2 E2 P/ O        /* 等待串口1输入数据 */
! T& Z8 O7 |+ P  x        while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
& [. i1 ?) k% i; A6 \
/ `) ^4 T8 Q7 s        return (int)USART_ReceiveData(USART1);
: s$ C; f  K( e% _8 l# J6 z' m}
! l* i  G/ I! c0 V- E4 V( |: K
! p- E6 q# d9 z. I. D% m& Q* @" P: F7 b; U
赞 收藏 评论23 发布时间:2015-1-7 11:37

举报

23个回答
晓枫VS枯叶 回答时间:2015-1-7 12:14:56
keil重定向的都是那几句,不过关于半主机的那段代码不能用在IAR上可以用宏定义屏蔽,也不会影响在keil上的使用
# D* N5 ~3 k, Y2 e! u% J' Q( k
  1. #if defined ( __CC_ARM   )
    * q7 I: F/ H* }
  2. #pragma import(__use_no_semihosting)             2 r. c4 O( i! l! a% j. \/ ?3 m
  3. //标准库需要的支持函数                 7 T/ J1 J5 k+ _
  4. struct __FILE # M/ z% W9 B# Z$ Q0 U- _2 `& Y, Q
  5. {
    9 K) ~* q8 M3 [  K
  6.         int handle;
    . F' n6 J5 ^  J* T- a

  7. 7 ^+ l. F+ W" G
  8. };
    : r; c( y, q% Z+ t

  9. . S6 ~4 _9 x: m1 G$ ]
  10. FILE __stdout;       , R: j7 l/ Y* p. J, f
  11. //定义_sys_exit()以避免使用半主机模式    " u- L! z% Q4 D9 a+ m3 U
  12. _sys_exit(int x)
    ! q. |4 {, b; r( V' L, R
  13. {
    0 r& O, v0 s2 ~3 L# B3 u' {5 |
  14.         x = x; 7 d9 a8 T, _9 v0 a# e' k
  15. } : t; _: n: V# b" x
  16. #endif
    ) E: j: D/ w! q. l! T! s' a
  17. //重定义fputc函数 8 J* D9 S& O  p+ m
  18. int fputc(int ch, FILE *f)' Q/ I0 z' S( I& d
  19. {      0 n) y5 N2 P( P
  20.         while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
      z6 U1 m" b* c" d+ d/ J% v
  21.     USART1->DR = (u8) ch;      
    # X- |, L& j1 V% s! ]
  22.         return ch;% E: H1 I9 C2 J% Q8 v& C" ~7 L4 l
  23. }
复制代码

& ^) d; _) ]' i8 l+ i这样keil和IAR都能用,不用改什么东西!
风中的IT 回答时间:2015-1-7 12:23:29
晓枫VS枯叶 发表于 2015-1-7 12:14+ I: R# @* O* X# [
keil重定向的都是那几句,不过关于半主机的那段代码不能用在IAR上可以用宏定义屏蔽,也不会影响在keil上的 ...

0 E; D1 @" i( _  ~你的这个我试试看啊,之前我把keil教程的代码复制到IAR下不能用
风中的IT 回答时间:2015-1-7 12:56:05
晓枫VS枯叶 发表于 2015-1-7 12:44" i: D) C$ ], P) I
我在IAR上和keil上都试过,可以用的,你再试一下!

+ z/ u( l2 c7 w恩,试过了,能行,很不错,请问你对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, c9 I: R( n: w, {: R% b3 V
重定向?IAR的重定向是这个函数吗?
5 s& `& B% s" j# w' M
是啊,已通过验证
白日衣衫尽 回答时间: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# x5 E$ Y) H# V4 S. Q% X
外部flash用的SPI吗?
9 ]1 ~8 \6 I% U
不是,要是SPI就简单了,但是类似于SPI
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版