在代码中:
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的数据不是会保留前面指令的后半截?
请教下。谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>