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

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

[复制链接]
风中的IT 发布时间:2015-1-7 11:37
在用STM32用作开发时,网上例程都是KEIL下运行的,但是现在好多都是IAR下运行,在研发中加入串口打印便于调试,以下是printf函数的定义,已通过验证
( L) m, Y( Z$ V! L* y* I1 u  ^( o& ~' c) u8 |" K: h2 r
0 C7 R  t* h6 Q% H- E% ~  H; R
int fputc(int ch, FILE *f)0 a: K: L; T: X- |/ J
{
" Y( f, k0 V3 D3 E1 v% t        /* 写一个字节到USART1 */
1 c# u4 E( N: e+ O; P        USART_SendData(USART1, (uint8_t) ch);
3 y) I$ V$ |/ d4 M. W, n7 b+ Q
        /* 等待发送结束 */( i. `' H" g0 o, ]3 x$ A
        while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)1 V+ b- |, W/ ~4 \) l
        {}
7 i" p5 I2 z* p0 ^4 y' b! o9 j+ ^8 x) Z/ E1 ^" ^
        return ch;7 s0 _& S. j4 z" {8 L$ `$ Y
}* [  s* L+ A% {! G! x3 c3 O9 k

! j3 C1 m+ G6 Z3 P+ b1 a5 P! s/*2 C' X0 x7 i2 X+ {; B
*********************************************************************************************************
8 N3 k7 U0 v' _" s: V*        函 数 名: fgetc- J* v, ?2 r" |( b8 B
*        功能说明: 重定义getc函数,这样可以使用scanff函数从串口1输入数据0 K5 e0 H+ @$ l4 F8 P
*        形    参: 无( m' k" U" s: ~+ u- q4 s$ q$ I
*        返 回 值: 无% c9 ~# ?+ x' R+ A$ i
*********************************************************************************************************$ a# {) X! o" {# u+ Z
*/
( b% Z: r  \* [' g3 m" |4 n0 E) cint fgetc(FILE *f)5 K* y4 X% i9 m2 ^$ ?/ ~
{; v. Q+ |0 U. c' y4 h
        /* 等待串口1输入数据 */2 o" q. k. b3 f5 F6 v& T# U
        while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
! A7 K3 ^3 v8 f$ ^+ H1 m& e1 Q8 k
* B" P, l4 P7 v, U  P3 z% s9 L        return (int)USART_ReceiveData(USART1);
9 T* `2 S9 ~8 A4 [6 X1 L6 T}
3 C2 J8 D2 n/ @% T& C7 Y3 r! _1 [+ t

+ {) h1 R$ t1 E7 N. [7 m$ ^
收藏 评论23 发布时间:2015-1-7 11:37

举报

23个回答
晓枫VS枯叶 回答时间:2015-1-7 12:14:56
keil重定向的都是那几句,不过关于半主机的那段代码不能用在IAR上可以用宏定义屏蔽,也不会影响在keil上的使用0 k9 u  }2 X( {
  1. #if defined ( __CC_ARM   )/ w/ _0 D& v$ p  G7 P
  2. #pragma import(__use_no_semihosting)            
    ; W( {) D/ _8 \* `8 t" a' W0 {
  3. //标准库需要的支持函数                   X8 h/ ~/ p- o. }6 G6 b& x/ D6 ~( E- b
  4. struct __FILE # f& f0 y0 j  V& n
  5. { 6 ?  T+ `5 C" [3 v
  6.         int handle; 9 z" n7 \: E6 s3 ?1 \: U4 B# S' u, a  `

  7. 0 L# N4 ?! r) }/ s. m$ o
  8. }; & F9 D5 J- _' n% t) G7 ?6 e( A

  9. / N' I% n: H) @
  10. FILE __stdout;      
    6 |  [" X7 X1 B% O9 t% G! t5 Z
  11. //定义_sys_exit()以避免使用半主机模式   
      T6 E% n1 m' H* L7 @
  12. _sys_exit(int x)
    0 l9 d6 E; F5 c
  13. {   E- S7 G8 s+ ~; W$ ~$ n+ F2 I
  14.         x = x; ! Z9 @' M( J1 N
  15. } , F9 x. l5 [9 M; m* X+ ~% ^& l) v( [3 P
  16. #endif
    + h) R5 ~" K5 `7 H, M* x
  17. //重定义fputc函数 / ?# T8 C0 T+ [/ j' C2 Y, T
  18. int fputc(int ch, FILE *f)
    . w+ O# Q) C$ k- T
  19. {      
    ( P+ v% [, k6 u& e
  20.         while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   & O' U" F" T4 d* P
  21.     USART1->DR = (u8) ch;      3 I) O- g5 @. \1 }; w1 a1 f4 U0 u3 I6 ~
  22.         return ch;5 j& c# w# I' q: W$ a$ w/ m
  23. }
复制代码
% |3 W) H6 `; b- Y+ c7 t
这样keil和IAR都能用,不用改什么东西!
风中的IT 回答时间:2015-1-7 12:23:29
晓枫VS枯叶 发表于 2015-1-7 12:14
6 H) h  @# O7 P# l5 M' Jkeil重定向的都是那几句,不过关于半主机的那段代码不能用在IAR上可以用宏定义屏蔽,也不会影响在keil上的 ...

) [- a3 d- j6 s: d0 J# z* O你的这个我试试看啊,之前我把keil教程的代码复制到IAR下不能用
风中的IT 回答时间:2015-1-7 12:56:05
晓枫VS枯叶 发表于 2015-1-7 12:44
( S( t- {* g" ?) B6 @$ }; P5 W我在IAR上和keil上都试过,可以用的,你再试一下!
2 J* g5 v: W% 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
: F- G4 b  H# a) l4 N& b重定向?IAR的重定向是这个函数吗?
+ V9 v0 I2 a% D+ a8 M: L& T1 S( Y
是啊,已通过验证
白日衣衫尽 回答时间: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:591 |: n/ K( Z5 [; e* _% b- h+ \
外部flash用的SPI吗?
! I  Z' s8 _: Y  e
不是,要是SPI就简单了,但是类似于SPI
12下一页

所属标签

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