OpenEdv-开源电子网

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

如何使用串口从数据流中截取特定数据?

[复制链接]

11

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2015-8-10
在线时间
21 小时
发表于 2016-3-21 15:33:18 | 显示全部楼层 |阅读模式
10金钱
用STM32单片机的串口截取许多串口数据中的特定数据该怎么做?例如:........$,G,P,G,G,A,........'\r','n',............如何才能截取到$到'\n'之间的数据?

最佳答案

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

char *head_ptr = NULL; char *tail_ptr = NULL; char get_buf[MAX_SIZE + 1]; uint8_t len; head_ptr = strstr(rec_buf, "$GPGGA"); if(head_ptr == NULL) return; head_ptr = head_ptr + strlen("$GPGGA") + 1; tail_ptr = strchar(head_ptr, '\r'); if(tail_ptr == NULL) return; len = tail_ptr - head_ptr; if(len >= MAX_SIZE) return; strncpy(get_buf, head_ptr, len); 不知道对否,仅供参考!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

317

帖子

0

精华

高级会员

Rank: 4

积分
863
金钱
863
注册时间
2015-2-12
在线时间
354 小时
发表于 2016-3-21 15:33:19 | 显示全部楼层
char *head_ptr = NULL;
char *tail_ptr = NULL;
char get_buf[MAX_SIZE + 1];
uint8_t len;

head_ptr = strstr(rec_buf, "$GPGGA");
if(head_ptr == NULL) return;
head_ptr = head_ptr + strlen("$GPGGA") + 1;

tail_ptr = strchar(head_ptr, '\r');
if(tail_ptr == NULL) return;

len = tail_ptr - head_ptr;
if(len >= MAX_SIZE) return;

strncpy(get_buf, head_ptr, len);


不知道对否,仅供参考!
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-3-21 20:25:38 | 显示全部楼层
用上缓冲区,然后用sscanf()可解
回复

使用道具 举报

11

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
145
金钱
145
注册时间
2015-8-10
在线时间
21 小时
 楼主| 发表于 2016-3-23 11:18:24 | 显示全部楼层
是一种方法,读起来觉得可行,下去试试,遇到不懂的地方还请不吝指教。还有就是悬赏该如何给你?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 17:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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