OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 16101|回复: 18

IAR下,STM8用printf默认是不支持32位输出的,不过被我找到办法了,共享下.

[复制链接]

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2013-6-25 15:49:27 | 显示全部楼层 |阅读模式

默认的(temp为32位数组):
 printf("0X%X",temp);//16进制参数显示   
会报警告,且无法正确使用.
改为:
 printf("0X%lX",temp);//16进制参数显示  
就OK了.
其实就是加多一个小写的"L",即 long 型...
问题解决! 

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

1608

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2013-6-25 18:42:40 | 显示全部楼层
原子哥,大牛啊。我一直做printf的时候,一直是单个字节传输的,多字节传输有问题。
今天学习了啊。
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
 楼主| 发表于 2013-6-25 20:46:53 | 显示全部楼层
回复【2楼】ST-FAE-SALE:
---------------------------------
瞎猫碰耗子,被我逮到了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7041

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-6-25 21:32:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

109

主题

1608

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2013-6-25 21:33:40 | 显示全部楼层
我要去试试呀,以后也可以和客户吹吹牛啊!!!哈哈
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2013-8-2
在线时间
3 小时
发表于 2013-8-5 16:04:17 | 显示全部楼层
回复【楼主位】正点原子:
---------------------------------
mark
回复 支持 反对

使用道具 举报

4

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-8-8
在线时间
2 小时
发表于 2013-8-8 21:43:34 | 显示全部楼层

/*
*********************************************************************************************************
*
* 模块名称 : printf模块
* 文件名称 : bsp_printf.c
* 版    本 : V2.0
* 说    明 : 实现printf和scanf函数重定向到串口1,即支持printf信息到UART1
*    实现重定向,只需要添加2个函数:
*    int fputc(int ch, FILE *f);
*    int fgetc(FILE *f);
*
*    这个c模块无对应的h文件。
*    如果需要应用程序支持 printf 函数,只用将 bsp_printf.c 这个文件添加到工程即可。
*
* 修改记录 :
*  版本号  日期       作者    说明
*  v1.0    2012-10-12 armfly  ST固件库版本 V2.1.0
*
* Copyright (C), 2012-2013, 安富莱电子 www.armfly.com
*
*********************************************************************************************************
*/

#include "stm8s.h"
#include <stdio.h>

/*
 由于不同的编译器 putcha 和 getchar 形参和返回值略有不同。
 因此此处采用宏定义的方式区别。

 _RAISONANCE_ 和 _COSMIC_ 这2个宏是由编译器自动添加的预编译宏
*/
#ifdef _RAISONANCE_
 #define PUTCHAR_PROTOTYPE int putchar (char c)
 #define GETCHAR_PROTOTYPE int getchar (void)
#elif defined (_COSMIC_)
 #define PUTCHAR_PROTOTYPE char putchar (char c)
 #define GETCHAR_PROTOTYPE char getchar (void)
#else /* _IAR_ */
 #define PUTCHAR_PROTOTYPE int putchar (int c)
 #define GETCHAR_PROTOTYPE int getchar (void)
#endif /* _RAISONANCE_ */

/*
*********************************************************************************************************
* 函 数 名: putchar
* 功能说明: 重定义 putchar 函数, 这样可以使用printf函数从串口1打印输出
* 形    参: 等待发送的字符
* 返 回 值: 返回已发送的字符
*********************************************************************************************************
*/
PUTCHAR_PROTOTYPE
{
 /* 发送一个字符 c 到UART1 */
 UART1_SendData8(c);

 /* 等待发送完毕 */
 while (UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET);

 return (c);
}

/*
*********************************************************************************************************
* 函 数 名: getchar
* 功能说明: 重定义C库中的 getchar 函数,这样可以使用scanff函数从串口1输入数据
* 形    参: 无
* 返 回 值: 返回已读到的字符
*********************************************************************************************************
*/
GETCHAR_PROTOTYPE
{
 #ifdef _COSMIC_
  char c = 0;
 #else
  int c = 0;
 #endif

 /* 等待新数据到达  */
 while (UART1_GetFlagStatus(UART1_FLAG_RXNE) == RESET);

 /* 读取数据寄存器 */
 c = UART1_ReceiveData8();

 return (c);
}

/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/

回复 支持 反对

使用道具 举报

4

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-8-8
在线时间
2 小时
发表于 2013-8-8 21:46:01 | 显示全部楼层
printf("0X%X",temp);//  
 printf("0X%lX",temp);//  
利用安富利的那个Printf 函数,之后按照原子哥的方式输出一组字符数组, 结果串口打印出来的结果怎么不对呢?
是 OX1097  是不是还有其他需要注意的地方 ?  本人申明 ,对编程不是很在行!
回复 支持 反对

使用道具 举报

4

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2013-8-8
在线时间
2 小时
发表于 2013-8-21 16:00:29 | 显示全部楼层
自问自答问题解决!  
总算是弄明白了  IAR for STM8的 printf注意事项了!
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2013-3-20
在线时间
0 小时
发表于 2013-11-16 20:19:26 | 显示全部楼层
mark
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2012-11-13
在线时间
1 小时
发表于 2014-4-30 00:29:07 | 显示全部楼层
赞一个
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2013-7-21
在线时间
25 小时
发表于 2014-12-16 10:41:42 | 显示全部楼层
这问题让我纠结了好久,原来是这样的!!
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2014-7-2
在线时间
0 小时
发表于 2015-2-11 10:04:10 | 显示全部楼层
学习了,很赞!
回复 支持 反对

使用道具 举报

54

主题

136

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
403
金钱
403
注册时间
2014-3-6
在线时间
41 小时
发表于 2015-7-7 14:39:10 | 显示全部楼层
原子哥,最近学习stm8s005,看了您的仿战舰的delay.c和sys.c但是找不到uart相关的,发过吗,找了好久没找着,求地址!!!
回复 支持 反对

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
 楼主| 发表于 2015-7-8 00:20:31 | 显示全部楼层
回复【14楼】春和景明:
---------------------------------
论坛搜索。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2017-8-10
在线时间
83 小时
发表于 2017-8-24 14:30:19 | 显示全部楼层
这个坑浪费了我3个小时,
回复 支持 反对

使用道具 举报

10

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2017-8-10
在线时间
83 小时
发表于 2017-8-24 14:30:31 | 显示全部楼层
这个坑让我浪费了3个小时
回复 支持 反对

使用道具 举报

10

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2017-8-10
在线时间
83 小时
发表于 2017-8-24 14:31:21 | 显示全部楼层
int main(void)
{   
u32 i=1;   
BSP_Configuration();//硬件驱动初始化函数     
while(1)//主程序循环,反复执行循环体里的语句
  {   
      printf("TIM1通道1捕获:%ld\r\n",i++);
    delay_ms(200);  
}
}
printf默认不支持32位输出
回复 支持 反对

使用道具 举报

10

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
273
金钱
273
注册时间
2017-8-10
在线时间
83 小时
发表于 2017-8-24 14:32:21 | 显示全部楼层
tao2008 发表于 2017-8-24 14:31
int main(void)
{   
u32 i=1;   

加了L就可以了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-9 04:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表