OpenEdv-开源电子网

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

sim800c模块,sim800c_send_cmd()函数,当cmd<0XFF的时候,发送数字,大于的时候发送字符串. 为什么

[复制链接]

15

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2017-7-17
在线时间
68 小时
发表于 2017-7-19 15:08:04 | 显示全部楼层 |阅读模式
5金钱
//SIM800C发送命令
//cmd:发送的命令字符串(不需要添加回车了),当cmd<0XFF的时候,发送数字(比如发送0X1A),大于的时候发送字符串.
//ack:期待的应答结果,如果为空,则表示不需要等待应答
//waittime:等待时间(单位:10ms)
//返回值:0,发送成功(得到了期待的应答结果)
//       1,发送失败
u8 sim800c_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
u8 res=0;
USART3_RX_STA=0;
if((u32)cmd<=0XFF)
{
  while((USART3->SR&0X40)==0);//等待上一次数据发送完成  
  USART3->DR=(u32)cmd;
}else u3_printf("%s\r\n",cmd);//发送命令

  if(waittime==1100)//11s后读回串口数据(蓝牙测试用到)
  {
   Scan_Wtime = 11;//需要定时的时间
   TIM7_SetARR(9999);//产生1S定时中断
   
  }
if(ack&&waittime)  //需要等待应答
{
  while(--waittime) //等待倒计时
  {
   if(BT_Scan_mode)//蓝牙测试模式下
   {
    res=KEY_Scan(0);//返回上一级
    if(res==KEY1_PRES)return 2;
   }
   delay_ms(10);
   if(USART3_RX_STA&0X8000)//接收到期待的应答结果
   {
    if(sim800c_check_cmd(ack))break;//得到有效数据
    USART3_RX_STA=0;
   }
  }
  if(waittime==0)res=1;
}
return res;
}

是因为字符串在堆中吗? <0XFF的地址为栈地址吗?

最佳答案

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

因为要发0X1A。还有字符串。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-7-19 15:08:05 | 显示全部楼层
因为要发0X1A。还有字符串。
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2017-8-11
在线时间
12 小时
发表于 2017-8-11 17:13:34 | 显示全部楼层
同问,还有,楼主,我也有两个问题:1、USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0; //添加结束符  为什么=0是结束符号?
2、if(connectsta==1&&timex>=600)//连接正常的时候,每 6 秒发送一次心跳
{
timex=0;
if(sim800c_send_cmd("AT+CIPSEND",">",200)==0)//发送数据
{
sim800c_send_cmd((u8*)0X00,0,0); //发送数据:0X00
delay_ms(20); //必须加延时
sim800c_send_cmd((u8*)0X1A,0,0);
//CTRL+Z,结束数据发送,启动一次传输
}else sim800c_send_cmd((u8*)0X1B,0,0); //ESC,取消发送
hbeaterrcnt++;
printf("hbeaterrcnt:%d\r\n",hbeaterrcnt);//方便调试代码
}
标红部分发送0x00是干什么的?
回复

使用道具 举报

15

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2017-7-17
在线时间
68 小时
 楼主| 发表于 2017-8-13 20:49:19 | 显示全部楼层
yanzerui123 发表于 2017-8-11 17:13
同问,还有,楼主,我也有两个问题:1、USART3_RX_BUF=0; //添加结束符  为什么=0是结束符号?
2、if(conn ...

0x00是保持通信,即心跳的
回复

使用道具 举报

15

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2017-7-17
在线时间
68 小时
 楼主| 发表于 2017-8-14 08:40:13 | 显示全部楼层
为什么当cmd<0XFF的时候,发送数字(比如发送0X1A),大于的时候发送字符串.
回复

使用道具 举报

15

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2017-7-17
在线时间
68 小时
 楼主| 发表于 2017-8-14 08:40:48 | 显示全部楼层
正点原子 发表于 2017-7-19 15:08
因为要发0X1A。还有字符串。

为什么当cmd<0XFF的时候,发送数字(比如发送0X1A),大于的时候发送字符串.
回复

使用道具 举报

70

主题

6698

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12695
金钱
12695
注册时间
2012-11-26
在线时间
3712 小时
发表于 2017-8-14 08:50:30 | 显示全部楼层

自己研究各种码的范围
学无止境
回复

使用道具 举报

15

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2017-7-17
在线时间
68 小时
 楼主| 发表于 2017-8-14 11:29:08 | 显示全部楼层
jermy_z 发表于 2017-8-14 08:50
自己研究各种码的范围

是因为字符串在堆中吗? <0XFF的地址为栈地址吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-26 08:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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