OpenEdv-开源电子网

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

刚知道printf怎么用....

[复制链接]

9

主题

29

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2013-11-24
在线时间
0 小时
发表于 2013-12-13 22:22:38 | 显示全部楼层 |阅读模式
这C语言学的太烂了,到现在才知道printf怎么用。



if(USART_RX_STA & 0X8000) //接接收完成
{
printf("USART_RX_STA = %#x\n",USART_RX_STA); //输出USART_RX_STA内容
len = USART_RX_STA &0x3fff;
USART_RX_STA = 0; //重置等待下次接收
printf("USART_RX_BUFF = %s\n",USART_RX_BUF);        //输出USART_RX_BUF内容
printf("接收到%*s\n",len,USART_RX_BUF);         //指定长度输出USART_RX_BUF
printf("Len = %0*d\n",tmp,len); //接收到的字符长度  tmp = 4;
}



刚开始学STM32,下午测试 战舰源码 system文件夹下提供的usart接收ISR,以及printf输出功能。
使用战舰提供的串口助手,虚拟串口和MDK软件调试

很简单的几句,本意是想将 USART_RX_STA的状态,接收的字符,缓冲区内容 再发出来
测试时发生了一些事:
1 我输入123456,没有按回车,没有任何回应,这是正确的,因为 串口接收ISR 将回车符作为结束符
2 再发送一次带上回车的123456,有了回应,没有问题。
再发送一次之后,问题出现了,
这句
 printf("接收到%*s\n",len,USART_RX_BUF);         //指定长度输出USART_RX_BUF
这句输出不是我想要的了,因为这时 BUFF中的内容是这样的 123456123456,而我的想法是指定输出宽度为上次接收到的字符宽度,即预想输出为123456
明显错了。
不得已,去查了printf函数。发现改成这样才对。
printf("接收到%.*s\n",len,USART_RX_BUF);         //指定长度输出USART_RX_BUF

学C语言也很久了,printf函数可以说是最早接触到的函数,可是,万万没想到在这翻船,
发个帖子纪念下,提醒下自己,也提醒下朋友们,很多东西,自己真的是一知半解,搞好基础是多麽的重要啊!
























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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-14 00:48:43 | 显示全部楼层
%s输出的时候,必须遇到结束符才结束,结束符就是数字0,如果接收到2次123456,且连在一起,那就可能使你这种输出两次123456了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2013-12-14 11:01:35 | 显示全部楼层
回复【楼主位】youngjean:
---------------------------------
顶楼主,基础很重要,加油
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

9

主题

29

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2013-11-24
在线时间
0 小时
 楼主| 发表于 2013-12-18 14:42:24 | 显示全部楼层
我知道‘\0’可以,我只是想控制他的长度。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 00:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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