OpenEdv-开源电子网

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

学习到iic那节,例程是在LCD上显示的,我想在串口上显示,用printf函数打印出来,但是打印出的都是数字,不是字符,肿么办

[复制链接]

129

主题

397

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2017-7-12
在线时间
150 小时
发表于 2017-9-4 17:29:29 | 显示全部楼层 |阅读模式
1金钱
学习到iic那节,例程是在LCD上显示的,我想在串口上显示,用printf函数打印出来,但是打印出的都是数字,不是字符,肿么办,求大神指点一二

TIM截图20170904172843.png

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

266

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2017-7-27
在线时间
98 小时
发表于 2017-9-4 17:29:30 | 显示全部楼层
余一水 发表于 2017-9-5 18:08
我在你的工程整个文件都没搜到这个printf ("\r\n%s",datatemp);,你是不是发错文件啦?

不好意思弄错了

EVAL_IIC_24C02实验16.rar

2.74 MB, 下载次数: 141

回复

使用道具 举报

3

主题

808

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3888
金钱
3888
注册时间
2017-3-7
在线时间
1694 小时
发表于 2017-9-4 17:36:12 | 显示全部楼层
搜一搜%d之类的代表什么意思就知道怎么做了
回复

使用道具 举报

24

主题

208

帖子

0

精华

高级会员

Rank: 4

积分
714
金钱
714
注册时间
2014-4-8
在线时间
160 小时
发表于 2017-9-4 17:42:48 | 显示全部楼层
%c
回复

使用道具 举报

129

主题

397

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2017-7-12
在线时间
150 小时
 楼主| 发表于 2017-9-4 18:00:10 | 显示全部楼层
回复

使用道具 举报

7

主题

185

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2729
金钱
2729
注册时间
2015-12-27
在线时间
469 小时
发表于 2017-9-4 19:43:50 | 显示全部楼层
用sprintf snprintf之类的先打印到一个缓冲区里,然后再串口往外发送,如果串口只是发送数据的话,可以很快,我试过1152000都没问题。
回复

使用道具 举报

17

主题

181

帖子

0

精华

高级会员

Rank: 4

积分
504
金钱
504
注册时间
2017-7-24
在线时间
117 小时
发表于 2017-9-4 19:46:17 | 显示全部楼层
我没记错的话,%d好像是代表整型变量的意思。所以你%d肯定是不可能输出字符的。
回复

使用道具 举报

129

主题

397

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2017-7-12
在线时间
150 小时
 楼主| 发表于 2017-9-4 19:56:52 | 显示全部楼层
q247341184 发表于 2017-9-4 19:46
我没记错的话,%d好像是代表整型变量的意思。所以你%d肯定是不可能输出字符的。

恩恩,我也意识到了,后来试了别的都不行,估计用printf怕是不行了,不知道该用什么函数才能将存在eeprom的字符输出到串口也显示是字符 就像LCD屏幕显示一样。。谢谢你的回答。
回复

使用道具 举报

17

主题

181

帖子

0

精华

高级会员

Rank: 4

积分
504
金钱
504
注册时间
2017-7-24
在线时间
117 小时
发表于 2017-9-4 20:01:11 | 显示全部楼层
余一水 发表于 2017-9-4 19:56
恩恩,我也意识到了,后来试了别的都不行,估计用printf怕是不行了,不知道该用什么函数才能将存在eeprom ...

我是跳着学习的,我印象中eeprom在stm32有个用flash模拟的,不知道你的是不是,如果是的话,你想显示你的字符大概有几种方式,第一种就是定义字符型变量然后printf输出。如果你写入flash地址里面你就得读出来再输出或者直接输出地址所代表的值。
回复

使用道具 举报

7

主题

185

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2729
金钱
2729
注册时间
2015-12-27
在线时间
469 小时
发表于 2017-9-4 20:01:25 | 显示全部楼层
定义一个这个宏

#define DEBUG_OUTPUT    USART1_SendBuf

#define DEBUG_PRINTF(format,args...)  {\
                      char temp[100];uint16_t len;\
                      len = snprintf((char*)temp,sizeof(temp),(const char*)format,##args);\
                      DEBUG_OUTPUT((uint8_t*)temp,len);\
                     }

使用的时候就这么用就可以啦
DEBUG_PRINTF("the value is %d ¼óéÏ %d μèóú %d \r\n",time,testvalue,time+testvalue);
回复

使用道具 举报

19

主题

62

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2016-8-21
在线时间
47 小时
发表于 2017-9-4 20:03:17 | 显示全部楼层
难道不应该是%s?
回复

使用道具 举报

10

主题

266

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2017-7-27
在线时间
98 小时
发表于 2017-9-4 20:08:28 | 显示全部楼层
本帖最后由 huanghan 于 2017-9-4 20:37 编辑

printf("%s \r\n",datatemp);打印函数%d改为%s就是打印字符串了
回复

使用道具 举报

129

主题

397

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2017-7-12
在线时间
150 小时
 楼主| 发表于 2017-9-4 20:50:41 | 显示全部楼层
huanghan 发表于 2017-9-4 20:08
printf("%s \r\n",datatemp);打印函数%d改为%s就是打印字符串了

乱码了,理论和实际不符合了
回复

使用道具 举报

10

主题

266

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2017-7-27
在线时间
98 小时
发表于 2017-9-4 21:26:34 | 显示全部楼层
呵呵!学习学习
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-9-5 00:44:37 | 显示全部楼层
你下载我们串口通信实验,看看正常么
回复

使用道具 举报

129

主题

397

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2017-7-12
在线时间
150 小时
 楼主| 发表于 2017-9-5 09:47:32 | 显示全部楼层
正点原子 发表于 2017-9-5 00:44
你下载我们串口通信实验,看看正常么

正常的,串口printf一般就是用来debug的,都是正常的,包括在这个iic实验中,例程里在lcd屏幕显示的那些提示at24c02检测、写入完成等等都能打印到串口,但是想把写入的字符串打印出来就不行了,也就是单纯的打印字符串是可以的,但是打印带参数的变量(这个变量存放了字符串,也就是AT24C02存储的数据)就不好使了。也就是printf(“stm32”);正常。printf(“写入值为:%s”,datatemp);就不正常了。%d %什么都不行,我参考了LCD显示字符串的函数,自己写一个也不行,就是来一个循环,依次显示字符,循环的次数就是写入字符的个数。原子大神给指点指点
回复

使用道具 举报

10

主题

266

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2017-7-27
在线时间
98 小时
发表于 2017-9-5 09:51:24 | 显示全部楼层
本帖最后由 huanghan 于 2017-9-5 10:00 编辑
余一水 发表于 2017-9-4 20:50
乱码了,理论和实际不符合了

我就是这样做的实验,刚刚又验证了几次,正常的        
       while(1)
        {
                key=KEY_Scan();
                if(key==1)//KEY0按下,写入24C02
                {
                        LCD_Fill(0,170,239,319,WHITE);//清除半屏   
                         LCD_ShowString(60,170,"Start Write 24C02....");
                        AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE);
                        LCD_ShowString(60,170,"24C02 Write Finished!");//提示传送完成
                }
                if(key==3)//KEY1按下,读取字符串并显示
                {
                         LCD_ShowString(60,170,"Start Read 24C02.... ");
                        AT24CXX_Read(0,datatemp,SIZE);
                        printf ("\r\n%s",datatemp);
                        LCD_ShowString(60,170,"The Data Readed Is:  ");//提示传送完成
                        LCD_ShowString(60,190,datatemp);//显示读到的字符串
                }
                i++;
                delay_ms(1);
                if(i==200)
                {
//                        LED0=!LED0;//提示系统正在运行        
                        i=0;
                }                  
        }
回复

使用道具 举报

129

主题

397

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2017-7-12
在线时间
150 小时
 楼主| 发表于 2017-9-5 11:38:02 | 显示全部楼层
读取显示是空白,如果换成%d倒是有数据,但不是要显示的字符,%s直接没显示了
捕获.PNG
回复

使用道具 举报

129

主题

397

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2017-7-12
在线时间
150 小时
 楼主| 发表于 2017-9-5 13:28:22 | 显示全部楼层
huanghan 发表于 2017-9-5 09:51
我就是这样做的实验,刚刚又验证了几次,正常的        
       while(1)
        {

大神看一下楼下我发的截图,不知道哪里出了问题,可否把你的工程直接打包发给我啊,虽然我没有改什么,你的正常,我也不知道哪里出了问题了
回复

使用道具 举报

5

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
金钱
307
注册时间
2016-10-20
在线时间
64 小时
发表于 2017-9-5 14:08:58 | 显示全部楼层
你在%s后面加上换行回车(\r\n)
回复

使用道具 举报

10

主题

266

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2017-7-27
在线时间
98 小时
发表于 2017-9-5 14:28:31 | 显示全部楼层
余一水 发表于 2017-9-5 13:28
大神看一下楼下我发的截图,不知道哪里出了问题,可否把你的工程直接打包发给我啊,虽然我没有改什么,你 ...

我是参照 正点原子的里程来玩的,自己画的板

EVAL_IIC温度实验3.rar

3.76 MB, 下载次数: 124

回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2017-9-5 14:36:56 | 显示全部楼层
printf("0x%02x\r\n",temp);

这个是16进制显示的
自己选择的路,成家前走完。
回复

使用道具 举报

129

主题

397

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2017-7-12
在线时间
150 小时
 楼主| 发表于 2017-9-5 15:15:54 | 显示全部楼层
huanghan 发表于 2017-9-5 14:28
我是参照 正点原子的里程来玩的,自己画的板

你的板子芯片是什么啊?屏幕是8080的屏幕吗?
回复

使用道具 举报

10

主题

266

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2017-7-27
在线时间
98 小时
发表于 2017-9-5 15:26:44 | 显示全部楼层
余一水 发表于 2017-9-5 15:15
你的板子芯片是什么啊?屏幕是8080的屏幕吗?

工程里可以看的,STM32F103VB
回复

使用道具 举报

129

主题

397

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2017-7-12
在线时间
150 小时
 楼主| 发表于 2017-9-5 15:50:23 | 显示全部楼层
huanghan 发表于 2017-9-5 14:28
我是参照 正点原子的里程来玩的,自己画的板

这个工程没看到printf打印出存在AT240C2中的字符串的程序啊 哥
回复

使用道具 举报

10

主题

266

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2017-7-27
在线时间
98 小时
发表于 2017-9-5 16:24:50 | 显示全部楼层
本帖最后由 huanghan 于 2017-9-5 16:26 编辑
余一水 发表于 2017-9-5 15:50
这个工程没看到printf打印出存在AT240C2中的字符串的程序啊 哥
不可能没,先读在打印,
        while(1)
        {
                key=KEY_Scan();
                if(key==1)//KEY0按下,写入24C02
                {
                        LCD_Fill(0,170,239,319,WHITE);//清除半屏   
                         LCD_ShowString(60,170,"Start Write 24C02....");
                        AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE);
                        LCD_ShowString(60,170,"24C02 Write Finished!");//提示传送完成
                }
                if(key==3)//KEY1按下,读取字符串并显示
                {
                         LCD_ShowString(60,170,"Start Read 24C02.... ");
                        AT24CXX_Read(0,datatemp,SIZE);                             
                        printf ("\r\n%s",datatemp);

                        LCD_Fill(0,170,239,319,WHITE);//清除半屏
                        LCD_ShowString(60,170,"The Data Readed Is:  ");//提示传送完成
                        LCD_ShowString(60,190,datatemp);//显示读到的字符串
                }
                i++;
                delay_ms(1);
                if(i==200)
                {
//                        LED0=!LED0;//提示系统正在运行        
                        i=0;
                }                  
        }
回复

使用道具 举报

10

主题

266

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2017-7-27
在线时间
98 小时
发表于 2017-9-5 16:29:24 | 显示全部楼层
你用的芯片型号是什么,
回复

使用道具 举报

129

主题

397

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2017-7-12
在线时间
150 小时
 楼主| 发表于 2017-9-5 18:03:32 | 显示全部楼层
huanghan 发表于 2017-9-5 16:29
你用的芯片型号是什么,

stm32f103ret6
回复

使用道具 举报

129

主题

397

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2017-7-12
在线时间
150 小时
 楼主| 发表于 2017-9-5 18:08:45 | 显示全部楼层
huanghan 发表于 2017-9-5 16:24
不可能没,先读在打印,
        while(1)
        {

我在你的工程整个文件都没搜到这个printf ("\r\n%s",datatemp);,你是不是发错文件啦?
TIM截图20170905180642.png
回复

使用道具 举报

10

主题

266

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2017-7-27
在线时间
98 小时
发表于 2017-9-5 19:44:48 | 显示全部楼层
你用的IO管脚是哪两个,IIC几,马上给你配一个工程就好了
回复

使用道具 举报

28

主题

70

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2015-3-26
在线时间
4 小时
发表于 2017-9-5 19:53:51 | 显示全部楼层
字符是ASCII的形式转化的数字存储的,读出来之后再转回字符
回复

使用道具 举报

129

主题

397

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2017-7-12
在线时间
150 小时
 楼主| 发表于 2017-9-5 20:20:46 | 显示全部楼层
huanghan 发表于 2017-9-5 19:44
你用的IO管脚是哪两个,IIC几,马上给你配一个工程就好了

我的IIC没毛病啊,是软件模拟的,不是硬件IIC啊
回复

使用道具 举报

129

主题

397

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2017-7-12
在线时间
150 小时
 楼主| 发表于 2017-9-5 21:53:37 | 显示全部楼层
huanghan 发表于 2017-9-4 17:29
不好意思弄错了

问题还是出在IIC那里,你的那个iic就可以,我的就有问题。现在基本解决了,Thanks♪(・ω・)ノ
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 09:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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