OpenEdv-开源电子网

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

蓝牙实验关于字节长度的疑问

[复制链接]

2

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2015-3-23
在线时间
35 小时
发表于 2015-5-14 21:36:14 | 显示全部楼层 |阅读模式
5金钱
在蓝牙实验中,HC05.C中,
//获取ATK-HC05模块的角色
[mw_shl_code=c,true]//返回值:0,从机;1,主机;0XFF,获取失败. u8 HC05_Get_Role(void) { u8 retry=0X0F; u8 temp,t; while(retry--) { HC05_KEY=1; //KEY置高,进入AT模式 delay_ms(10); u2_printf("AT+ROLE?\r\n"); //查询角色 for(t=0;t<20;t++) //最长等待200ms,来接收HC05模块的回应 { delay_ms(10); if(USART2_RX_STA&0X8000)break; } HC05_KEY=0; //KEY拉低,退出AT模式 if(USART2_RX_STA&0X8000) //接收到一次数据了 { temp=USART2_RX_STA&0X7FFF; //得到数据长度 USART2_RX_STA=0; if(temp==13&&USART2_RX_BUF[0]=='+')//接收到正确的应答了 { temp=USART2_RX_BUF[6]-'0';//得到主从模式值 break; } } } if(retry==0)temp=0XFF;//查询失败. return temp; } [/mw_shl_code]
这段代码,u2_printf("AT+ROLE?\r\n"); //查询角色,假如得到了正确的应答,应该返回(+ROLE:0 OK\r\n)或者(+ROLE:1 OK\r\n),就算在最后要加上\0结束符,得到的数据长度也不到13啊。为什么啊?
看别的返回OK应答时,数据长度为4,所以\r\n是占用一个字符,是吧?






最佳答案

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

楼主直接蓝牙模块接电脑串口调试助手 然后发AT+ROLE=?,试试看 接收区以16进制显示,看看发送完:AT+ROLE=?,回复了你多少个数据? 回复【2楼】KEY100: --------------------------------- 当然可以发送,主从只是针对蓝牙连接来说,并不是针对串口。 因为你连接上了或者LED引脚有效了。
野蛮生长,不忘初心。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-5-14 21:36:15 | 显示全部楼层
楼主直接蓝牙模块接电脑串口调试助手
然后发AT+ROLE=?,试试看
接收区以16进制显示,看看发送完:AT+ROLE=?,回复了你多少个数据?

回复【2楼】KEY100:
---------------------------------
当然可以发送,主从只是针对蓝牙连接来说,并不是针对串口。
因为你连接上了或者LED引脚有效了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2015-3-23
在线时间
35 小时
 楼主| 发表于 2015-5-14 21:42:14 | 显示全部楼层
蓝牙模块为什么在连接的时候,不管是主还是从,都可以向对方发送数据?
而且有时只有一个蓝牙模块打开时,LCD上也会显示"STA:Connected",原因不详,是不是因为之前连接过的原因?
野蛮生长,不忘初心。
回复

使用道具 举报

2

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2015-3-23
在线时间
35 小时
 楼主| 发表于 2015-5-15 08:30:31 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
+ROLE:0
OK
;

转换成16进制后变成(2B 52 4F 4C 45 3A 30 0D 0A 4F 4B 0D 0A 3B 0D 0A),共16个16进制数,
0D表示\r,是归位的意思, 0A表示\n,是换行的意思,难道是显示OK后换行回车,之后的字符都不算了,是调试助手自己添加的吗?
野蛮生长,不忘初心。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 22:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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