stm32之无线通信模块(AT指令)
一、stm32cubeMX配置
1.1 GPIO配置
略....
1.2 USART配置
见其他....
二、代码
变量
//获取RSSI
char *strx;
char *str_xx=",-";
char *loc;
char *token;
int RSSI=0;
2.1 无线模块配置
void wireless_Config(void){
printf("开始初始化L610\n");
send_cmd("AT","OK",50);
Clear_USART3_RX_Buffer();
send_cmd("ATI","Fibocom",50);//查询版本号
Clear_USART3_RX_Buffer();
send_cmd("AT+CPIN?","+CPIN: READY",50);//SIM是否准备好
Clear_USART3_RX_Buffer();
send_cmd("AT+MIPCALL?","+MIPCALL:",50);//获取IP地址
Clear_USART3_RX_Buffer();
printf("4G模块初始化已完成\r\n");
}
2.2 send_cmd(u8 *cmd,u8 *ack,u16 waittime)
//通过无线模块发送命令,同时将返回的数据与ack对比
//cmd:发送的命令字符串;ack:期待的应答结果,如果为空,则表示不需要等待应答;waittime:等待时间(单位:10ms)
//返回值:0,发送成功(得到了期待的应答结果);1,发送失败
u8 send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
u8 res=0;
USART3_RX_STA=0;
u3_printf("%s\r\n",cmd); //发送命令
if(ack&&waittime) //需要等待应答
{
// u1_printf("OK\r\n"); //发送命令
while(--waittime) //等待倒计时
{
HAL_Delay(10);
if(USART3_RX_STA&0X8000)//接收到期待的应答结果
{
if(check_cmd(ack))
{
printf("ack:%s\r\n",(u8*)ack);
break;//得到有效数据
}
// USART3_RX_STA=0;
}
}
if(waittime==0)res=1;
}
return res;
}
2.3 check_cmd(u8 *str)
//发送命令后,检测接收到的应答
//str:期待的应答结果
//返回值:0,没有得到期待的应答结果;其他,期待应答结果的位置(str的位置)
u8* check_cmd(u8 *str)
{
char *strx=0;
if(USART3_RX_STA&0X8000) //接收到一次数据了
{
USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符
strx=strstr((const char*)USART3_RX_BUF,(const char*)str);
}
return (u8*)strx;
}
2.4 send_data(u8 *cmd,u16 waittime)
提取接收回传的数据
//收到返回的数据,获取信号量
//cmd:发送的命令字符串;waittime:等待时间(单位:10ms)
//返回值:发送数据后,服务器的返回验证码
u8* send_data(u8 *cmd,u16 waittime)
{
char temp[5];
char *ack=temp;
USART3_RX_STA=0;
u3_printf("%s\r\n",cmd); //发送命令
if(waittime) //需要等待应答
{
while(--waittime) //等待倒计时
{
HAL_Delay(10);
if(USART3_RX_STA&0X8000)//接收到期待的应答结果
{
USART_RX_BUF[USART_RX_STA&0X7FFF]=0;//添加结束符
ack=(char*)USART_RX_BUF;
printf("ack:%s\r\n",(u8*)ack);
loc=strstr((char*)USART3_RX_BUF,str_xx);
token = strtok(loc,str_xx);
RSSI = atoi((char*)token);
// USART_RX_STA=0;
}
}
}
return (u8*)ack;
}
2.5 Clear_USART3_RX_Buffer()
void Clear_USART3_RX_Buffer(void)//清空缓存
{
if(USART3_RX_STA&0x8000)
{
printf("\r\n返回值:%s\r\n",USART3_RX_BUF);
memset(USART3_RX_BUF,0,strlen((const char*)USART3_RX_BUF));
USART3_RX_STA=0;
}
else
{
printf("\r\nerror\r\n");
}
}
本文来自博客园,作者:登云上人间,转载请注明原文链接:https://www.cnblogs.com/lj15941314/p/17389839.html

浙公网安备 33010602011771号