OpenEdv-开源电子网

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

stm32f1精英板蓝牙实验--MCU检测蓝牙模块时返回的字符为啥是4个

[复制链接]

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2020-3-30
在线时间
8 小时
发表于 2020-7-23 16:18:32 | 显示全部楼层 |阅读模式
5金钱
     请问在stm32f1精英板蓝牙实验中,MCU检测蓝牙模块时,通过在KEY置高时u3_printf发送“AT\r\n”,在置低,然后为啥返回的是4个字符(即temp怎么是4?)
下面附上源码,请各位大佬指教。
  1. while(retry--)
  2.         {
  3.                 HC05_KEY=1;                                        //KEY置高,进入AT模式
  4.                 delay_ms(10);                                               
  5.                 u3_printf("AT\r\n");                //发送AT测试指令
  6.                 HC05_KEY=0;                                        //KEY拉低,退出AT模式
  7.                
  8.                
  9.                 for(t=0;t<10;t++)                         //最长等待50ms,来接收HC05模块的回应
  10.                 {
  11.                         if(USART3_RX_STA&0X8000)break;
  12.                         delay_ms(5);
  13.                 }               
  14.                
  15.                 if(USART3_RX_STA&0X8000)        //接收到一次数据了
  16.                 {
  17.                         temp=USART3_RX_STA&0X7FFF;        //得到数据长度
  18.                         USART3_RX_STA=0;                         
  19. <font color="#ff0000">                        if(temp==4&&USART3_RX_BUF[0]=='O'&&USART3_RX_BUF[1]=='K')</font>
  20.                         {
  21.                                 temp=0;//接收到OK响应
  22.                                 break;
  23.                         }
  24.                 }                                           
  25.         }                    
  26.         if(retry==0)temp=1;        //检测失败
  27.         return temp;          
复制代码
    蓝牙指令手册里只说明AT+“\r\n”,返回的是“OK”,这不是两个字符?要是一定是4个字符,那么另外的两个字符分别是什么?
本人已经试过“\r\n”或者两个‘ ’空格字符,都行不通。  

最佳答案

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

回车换行就是0X0D,0X0A,自然有4个字节。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2020-7-23 16:18:33 | 显示全部楼层
18689400042qaz 发表于 2020-7-25 16:25
@正点原子
我指的是temp=USART3_RX_STA&0X7FFF;        //得到一次数据的长度
我用串口打印出来USART3_RX ...

回车换行就是0X0D,0X0A,自然有4个字节。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4480
金钱
4480
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-7-23 16:24:58 | 显示全部楼层
调试一下看看返回的是什么就是什么
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2020-3-30
在线时间
8 小时
 楼主| 发表于 2020-7-23 16:26:16 | 显示全部楼层
求求大家,救救孩子,帮我解答这一问题
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2020-3-30
在线时间
8 小时
 楼主| 发表于 2020-7-23 16:39:01 | 显示全部楼层
本帖最后由 18689400042qaz 于 2020-7-23 16:46 编辑

@三叶草
已经通过if(temp==4&&USART3_RX_BUF[0]=='O'&&USART3_RX_BUF[1]=='K')
                        {
                                printf("USART3_RX_BUF=%s",(char*)USART3_RX_BUF);                                printf("temp=%d\r\n",temp);
                                temp=0;//接收到OK响应
                                break;
                        }
可是串口调试助手打印出来的是

USART3_RX_BUF=OK

temp=4



这是怎么回事?


回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4480
金钱
4480
注册时间
2013-4-22
在线时间
337 小时
发表于 2020-7-23 16:43:20 | 显示全部楼层
18689400042qaz 发表于 2020-7-23 16:39
@三叶草
已经通过if(temp==4&&USART3_RX_BUF[0]=='O'&&USART3_RX_BUF[1]=='K')
                         ...

打个断点,看下USART3_RX_BUF里面是啥不就清楚了
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2020-3-30
在线时间
8 小时
 楼主| 发表于 2020-7-23 16:52:53 | 显示全部楼层
@三叶草

已经用串口打印出来了,USART3_RX_BUF 里面的内容就是“OK”,我不奇怪这个结果,我奇怪的是为啥temp的个数不是2,而是4
temp=USART3_RX_STA&0X7FFF;        //得到一次数据的长度
                        USART3_RX_STA=0;                         
                        if(temp==4&&USART3_RX_BUF[0]=='O'&&USART3_RX_BUF[1]=='K')
                        {
                                printf("USART3_RX_BUF=%s\r\n",(char*)USART3_RX_BUF);
                                printf("temp=%d\r\n",temp);   //这个temp怎么就是4,不应该是2?“OK”不是两个字符?
                                temp=0;//接收到OK响应
                                break;
                        }

1.JPG
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2020-7-24 01:56:26 | 显示全部楼层
你不等于4就进不来啊
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2020-3-30
在线时间
8 小时
 楼主| 发表于 2020-7-25 16:25:59 | 显示全部楼层
@正点原子
我指的是temp=USART3_RX_STA&0X7FFF;        //得到一次数据的长度
我用串口打印出来USART3_RX_BUF[temp]这个数组里面只“OK”两个字符,怎么temp这个数组长度是4呢?
难道‘ O’ 和‘K’两个字符,1个字符长度不是1,2个字符长度不就是2?

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 14:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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