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

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

[复制链接]
风中的IT 发布时间:2015-1-7 11:37
在用STM32用作开发时,网上例程都是KEIL下运行的,但是现在好多都是IAR下运行,在研发中加入串口打印便于调试,以下是printf函数的定义,已通过验证; _8 k7 s! H, P$ ]4 J; W( N0 o3 n- W+ a
: f$ ^* G& C. _% O
: k& u" u% l7 @; V& }9 D9 W8 P, A1 b. K
int fputc(int ch, FILE *f)
5 b+ o7 {9 _3 ?6 ~4 y{
) `% r) e8 r  A. {8 L        /* 写一个字节到USART1 */3 E7 k' Q! F0 e  y7 T& Y
        USART_SendData(USART1, (uint8_t) ch);# p2 ]; w( p1 T* t' _. U

' {0 G( @) c/ Q$ x2 Z8 O        /* 等待发送结束 */
  i* l) f  S% k+ |+ w: d; r        while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
8 J1 @( `. i5 G        {}
0 V$ C5 G7 z6 X( C
5 e  @0 r" \7 |% u/ Z" w        return ch;% Z! ^, m* ^9 a3 a- o4 ]: b- o
}
$ _2 k( q4 F+ l/ F2 |! s5 c, x+ w* Z5 s$ C6 f. A$ b, p
/*4 K; `% X3 K- ?% f9 [) {- h( o; t
*********************************************************************************************************- [2 F% ?5 w6 \5 F
*        函 数 名: fgetc* n- p3 D: |$ [9 n7 W+ o# Q
*        功能说明: 重定义getc函数,这样可以使用scanff函数从串口1输入数据. D9 E# Q& M& m- v
*        形    参: 无# Q" \, ?8 {3 {( ?' ~: z2 p& F
*        返 回 值: 无
% p" T5 b# y  h*********************************************************************************************************( ]& g# Y+ N' a2 a
*/
) u- q- G( m5 d5 J$ C& gint fgetc(FILE *f)
9 Q  H; F  d  v5 S1 P# z{
: O* T6 N6 U* h( u. `% x1 ~        /* 等待串口1输入数据 */
1 v- R$ j" N6 G0 W( c6 ~" ]        while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
8 P' X) N" z* K# v# k# @- u( p# l
        return (int)USART_ReceiveData(USART1);
" ?% P; I4 `+ |; ?$ v  A* S. ^}4 A  W6 v% Y6 }" S! y9 [4 p- m
7 i, r  H+ u; E% I

! n! _, f7 C) T3 c% v5 l% K( U0 @
收藏 评论23 发布时间:2015-1-7 11:37

举报

23个回答
晓枫VS枯叶 回答时间:2015-1-7 12:14:56
keil重定向的都是那几句,不过关于半主机的那段代码不能用在IAR上可以用宏定义屏蔽,也不会影响在keil上的使用) R+ Q% E% h2 d% v0 e
  1. #if defined ( __CC_ARM   )+ m0 S. W2 _. \9 h+ P( [
  2. #pragma import(__use_no_semihosting)            
    & w. u. M) M6 L6 O
  3. //标准库需要的支持函数                 
    1 {8 w; W- Z4 @5 }/ S/ x- U# {5 Y
  4. struct __FILE ! h! T+ U9 e0 J  G. J% v
  5. { 0 N/ a* P9 L9 a, y
  6.         int handle; , r* _0 F  w( I' |. k
  7. 3 `) |/ L% ]( N$ Z% E
  8. }; ( o$ W; `% x8 \0 W* w5 p) o
  9.   s; D/ ~6 S- j$ d6 a
  10. FILE __stdout;      
    , l* g! z- Y8 X$ r4 ]4 b7 i/ C
  11. //定义_sys_exit()以避免使用半主机模式   
    ' C$ x& c+ ^8 t! V: [9 A. U2 V5 L
  12. _sys_exit(int x) 7 F$ }, X  f& S5 R+ Y
  13. {
    2 x, B! k+ w# U. G( `7 n" c! |
  14.         x = x;
    9 M4 p- S- O$ [1 A! U9 m
  15. } 9 q! s! t0 r  {' F
  16. #endif9 P, _( H& A6 V! s0 _6 u; j
  17. //重定义fputc函数
    ( ]9 k; }4 K& s: o! h, z  z
  18. int fputc(int ch, FILE *f)5 Y- Z) V  B' D6 x) L9 u
  19. {      
    / F0 e7 A! {: h; J5 p$ L0 i* s$ e; f
  20.         while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   * ^) N2 a4 L$ I
  21.     USART1->DR = (u8) ch;      ; r- X9 Q* ^2 Q$ g$ X7 A' O9 }
  22.         return ch;1 y3 p6 g7 S& j4 j
  23. }
复制代码
1 C. X+ H2 M, c  \, o: _" c
这样keil和IAR都能用,不用改什么东西!
风中的IT 回答时间:2015-1-7 12:23:29
晓枫VS枯叶 发表于 2015-1-7 12:14' R9 I1 d2 O1 @& r' Q6 c) P, O
keil重定向的都是那几句,不过关于半主机的那段代码不能用在IAR上可以用宏定义屏蔽,也不会影响在keil上的 ...
1 [& A& R# x1 T; T. T" Q, _
你的这个我试试看啊,之前我把keil教程的代码复制到IAR下不能用
风中的IT 回答时间:2015-1-7 12:56:05
晓枫VS枯叶 发表于 2015-1-7 12:44  \* _: k8 f1 S6 P2 H- M
我在IAR上和keil上都试过,可以用的,你再试一下!

1 v/ t; Y- d( |. [4 f恩,试过了,能行,很不错,请问你对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
: w4 y  u  [* L7 N& c4 u重定向?IAR的重定向是这个函数吗?
, _8 D8 d* @  Z0 f4 f# m6 e* b& z
是啊,已通过验证
白日衣衫尽 回答时间: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# W3 Z8 P6 h, j( V9 X
外部flash用的SPI吗?
/ g3 ?. s6 E- U9 Y8 `
不是,要是SPI就简单了,但是类似于SPI
12下一页

所属标签

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