OpenEdv-开源电子网

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

STM32串口通信时收到的数据的疑问

[复制链接]

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2014-8-6
在线时间
6 小时
发表于 2014-8-18 22:48:02 | 显示全部楼层 |阅读模式
5金钱
我看了开发板附带的串口通信例程,发现例程里面串口通信接收到的数据都是存在一个缓存数组(USART_RX_BUF[ ])当中,假如我现在想将缓存数组中的字符数据全部组成一个字符串,赋值给某个字符串变量,该怎么来实现呢?(比如51单片机当中是 变量=SBUF),换句话说就是如何将字符串数组转换成字符串呢?或者是如何在串口接收子函数当中用一个字符串变量来作为接收到的数据的缓存呢?求帮助,求大神指教啊,本人不胜感激!谢谢!

最佳答案

查看完整内容[请看2#楼]

直接给数组首地址就是了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-18 22:48:03 | 显示全部楼层
直接给数组首地址就是了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-18 22:48:03 | 显示全部楼层
回复【3楼】零下一度:
---------------------------------
我们的例程,接收的都是ascii的字符,不包括直接的数字。这个大前提你要搞对。
在这个前提下,数组首地址,其实就是字符串的首地址了。
你printf 这个buf,以字符串的形式,是可以看到收到的内容的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2014-8-6
在线时间
6 小时
 楼主| 发表于 2014-8-19 01:07:44 | 显示全部楼层
回复【2楼】正点原子:
-------------------------------
假设String是一个u16的变量,你的意思是String=USART_RX_BUF[0]这样吗?这样不对啊,还是我理解错你的意思了?能不能给我举个例子,将数组USART_RX_BUF[ ]里的所有值全部串起来组成一串数据赋值给String
回复

使用道具 举报

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2014-8-6
在线时间
6 小时
 楼主| 发表于 2014-8-19 01:35:54 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
按照您说的,我理解是这样:
        char string1;
string1=(char)USART_RX_BUF; //强制类型转换成Char型
printf(string1);    //这里编译不通过
USART_SendData(USART1, string1); //编译通过,但返回的是乱码
请问这是什么原因呢?另外我像51单片机那样char string1="abc";编译也出错,这又是为什么呢?谢谢!
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1842
金钱
1842
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-8-19 08:09:56 | 显示全部楼层
不管怎样,你还是得定义一个数组,就是说你总得开辟一段内存空间来存放你的字符串,至于怎么放,你可以用指针的形式,或者直接赋值都可以。char *string1="abc";这样定义才对。
回复

使用道具 举报

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2014-8-6
在线时间
6 小时
 楼主| 发表于 2014-8-19 21:04:55 | 显示全部楼层
回复【6楼】TinyBoy:
---------------------------------
谢谢啊,你解释得很清晰,还有一个问题想请教下你,就是我给定一个数组,程序运行到一半我要修改数组某个值,然后问题来了,我赋值一个u8的值编译通过,但是串口却不显示出来!
u8 gg=1;
char data[10]="abcd";
        ......
        data[0]=gg;   // 如果想赋值成“abc”要怎么写呢这里?
printf(data);    
这样串口就会显示 bcd,究竟是什么原因呢?应该怎么写才对?谢谢!
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1842
金钱
1842
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-8-20 08:06:50 | 显示全部楼层
回复【7楼】零下一度:
---------------------------------

strcpy(data,"abc");你这样做就可以了。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-3 11:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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