OpenEdv-开源电子网

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

请教个战舰开发板SIM开发的代码事宜

[复制链接]

95

主题

174

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2015-9-22
在线时间
103 小时
发表于 2017-7-26 14:27:39 | 显示全部楼层 |阅读模式
5金钱
在代码中:
u8 sim800c_gprs_test(void)
{
        const u8 *port="8086";        //端口固定为8086,当你的电脑8086端口被其他程序占用的时候,请修改为其他空闲端口
        u8 mode=0;                                //0,TCP连接;1,UDP连接
        u8 key;
        u8 timex=0;
        u8 ipbuf[16];                 //IP缓存
        u8 iplen=0;                        //IP长度
        sim800c_gprs_ui();        //加载主界面
        Show_Str(30+72,90,200,16,(u8*)modetbl[mode],16,0);        //显示连接方式        
        Show_Str(30+40,130,200,16,(u8*)port,16,0);                        //显示端口         
         sim800c_send_cmd("AT+CIPCLOSE=1","CLOSE OK",100);        //关闭连接
        sim800c_send_cmd("AT+CIPSHUT","SHUT OK",100);                //关闭移动场景
        if(sim800c_send_cmd("AT+CGCLASS=\"B\"","OK",1000))return 1;                                //设置GPRS移动台类别为B,支持包交换和数据交换
        if(sim800c_send_cmd("AT+CGDCONT=1,\"IP\",\"CMNET\"","OK",1000))return 2;//设置PDP上下文,互联网接协议,接入点等信息
        if(sim800c_send_cmd("AT+CGATT=1","OK",500))return 3;                                        //附着GPRS业务
        if(sim800c_send_cmd("AT+CIPCSGP=1,\"CMNET\"","OK",500))return 4;                 //设置为GPRS连接模式
        if(sim800c_send_cmd("AT+CIPHEAD=1","OK",500))return 5;                                         //设置接收数据显示IP头(方便判断数据来源)
        ipbuf[0]=0;


而sim800c_send_cmd会最终调用:
//串口3,printf 函数
//确保一次发送数据不超过USART3_MAX_SEND_LEN字节
void u3_printf(char* fmt,...)  
{  
        u16 i,j;
        va_list ap;
        va_start(ap,fmt);   //指向格式的下一个位置即CMD位置
        vsprintf((char*)USART3_TX_BUF,fmt,ap);   //将CDM按格式写入字符串
        va_end(ap);
        i=strlen((const char*)USART3_TX_BUF);                     //此次发送数据的长度
        for(j=0;j<i;j++)                                          //循环发送数据
        {
          while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);//等待上次传输完成
                USART_SendData(USART3,(uint8_t)USART3_TX_BUF[j]);           //发送数据到串口3
        }
        
}

每次cmd发送指令都是填写到USART3_TX_BUF数组中,如果后面的CMD长度比前面一次的CMD短,比如
前面AT+CGDCONT=1,\"IP\",\"CMNET\"
接着发"AT+CGATT=1
那么第二次经过u3_printf函数形成的USART3_TX_BUF的数据不是会保留前面指令的后半截?
请教下。谢谢

最佳答案

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

我们例程做了处理的,不会有问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165452
金钱
165452
注册时间
2010-12-1
在线时间
2113 小时
发表于 2017-7-26 14:27:40 | 显示全部楼层
我们例程做了处理的,不会有问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-18 08:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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