首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单片机AT指令配置模块程序模板(非阻塞版)

单片机AT指令配置模块程序模板(非阻塞版)

作者头像
杨奉武
发布2019-10-15 15:14:08
1.3K1
发布2019-10-15 15:14:08
举报
文章被收录于专栏:知识分享知识分享

拷贝这两个文件到自己的工程

测试1://单片机发送AT+RST\r\n  如果单片机串口接收到OK 或者ready 执行下一条

测试视频:

https://qqqqqbucket.oss-cn-beijing.aliyuncs.com/%E5%8D%95%E7%89%87%E6%9C%BA%E6%A8%A1%E5%9D%97%E5%8C%96%E7%A8%8B%E5%BA%8F/%E5%8D%95%E7%89%87%E6%9C%BAAT%E6%8C%87%E4%BB%A4%E9%85%8D%E7%BD%AE%E6%A8%A1%E5%9D%97%E7%A8%8B%E5%BA%8F%E6%A8%A1%E6%9D%BF(%E9%9D%9E%E9%98%BB%E5%A1%9E%E7%89%88)/20191014_224710.mp4

测试2: 平时发送数据的时候有时候需要先执行一些函数打包数据,然后再发送

为了直观,我做的单片机控制WIFI连接路由器的程序

测试:为了直观一点,我分别监听了STM32发送的  和 WIFI发送的数据

https://qqqqqbucket.oss-cn-beijing.aliyuncs.com/%E5%8D%95%E7%89%87%E6%9C%BA%E6%A8%A1%E5%9D%97%E5%8C%96%E7%A8%8B%E5%BA%8F/%E5%8D%95%E7%89%87%E6%9C%BAAT%E6%8C%87%E4%BB%A4%E9%85%8D%E7%BD%AE%E6%A8%A1%E5%9D%97%E7%A8%8B%E5%BA%8F%E6%A8%A1%E6%9D%BF(%E9%9D%9E%E9%98%BB%E5%A1%9E%E7%89%88)/20191014_230134.mp4

测试3: 有时候需要获取一下模块返回的数据,咱获取WIFI的MAC地址

既然获取MAC,就需要对字符串处理,给大家我写的常用的函数

/**
  ******************************************************************************
  * @file    String.c
  * @author  yang feng wu 
  * @version V1.0.0
  * @date    2019/10/13
  * @brief   字符串处理函数
  ******************************************************************************

  ******************************************************************************
  */
#define CSTRING_C_
#include "include.h"

char *Str = NULL;
void cStringFree(void){
    free(Str);
}

/**
* @brief  获取两个字符串之间的字符串
* @param  Str  源字符串
* @param  StrBegin  开始的字符串
* @param  StrEnd    结束的字符串
* @retval 字符串首地址
* @example  printf("%s",StrBetwString("wqe5w4ew46e5w","5w","6e"));cStringFree(Str);  输出:4ew4   
**/
char *StrBetwString(char *Str,char *StrBegin,char *StrEnd)
{
    char *StrStart=0,*StrStop=0,len=0;
    len = strlen(StrBegin);//字符串长度
    
  StrStart=strstr(Str, StrBegin);//第一个字符串开始的地址
    if(StrStart)
    {
      StrStop = strstr(StrStart+len+1, StrEnd);//第二个字符串开始的地址
        if(StrStop)
        {
            Str = (char *)malloc(((StrStop - (StrStart+len))+1) *sizeof(char));//多分配一个空间,防止其它数据干扰
            
            memset(Str,NULL,(StrStop - (StrStart+len))+1);
            memcpy(Str, StrStart+len, (StrStop - (StrStart+len)));
        
            return Str;
        }
        else
        {
            return NULL;
        }
    }
    else
    {
      return NULL;
    }
}



/**
* @brief  分割字符串
* @param  src        源字符串
* @param  separator  分割
* @param  dest       接收子串的数组
* @param  num        子字符串的个数
* @retval None
* @example split("42,uioj,dk4,56",",",temp,&cnt);  temp[0]=42,...temp[3]=56  cnt=4
**/
void split(char *src,const char *separator,char **dest,int *num) 
{
    char *pNext;
    int count = 0;
    if (src == NULL || strlen(src) == 0)
        return;
    if (separator == NULL || strlen(separator) == 0)
        return;
    pNext = (char *)strtok(src,separator);
    while(pNext != NULL) 
    {
        if(dest != NULL)
        *dest++ = pNext;
        ++count;
        pNext = (char *)strtok(NULL,separator);
    }  
    *num = count;
}

测试:

https://qqqqqbucket.oss-cn-beijing.aliyuncs.com/%E5%8D%95%E7%89%87%E6%9C%BA%E6%A8%A1%E5%9D%97%E5%8C%96%E7%A8%8B%E5%BA%8F/%E5%8D%95%E7%89%87%E6%9C%BAAT%E6%8C%87%E4%BB%A4%E9%85%8D%E7%BD%AE%E6%A8%A1%E5%9D%97%E7%A8%8B%E5%BA%8F%E6%A8%A1%E6%9D%BF(%E9%9D%9E%E9%98%BB%E5%A1%9E%E7%89%88)/20191015_002018.mp4

然后说一下,

这两句代码不要动!

如果判断数据处理成功,就写上这两句就可以.

最后一个参数

这个参数是控制如果当前指令返回正确,控制发送下一条数据的时间  写 CompareValue  就是下一条立即发送

如果不希望下一条立即发送,可以写 0 - CompareValue  的值,延时时间为 (CompareValue  - 你输入的值 ) Ms 

现在说一下如何控制重新配置

假设 串口接收到 CLOSED  咱需要重新配置

为了实现那个效果,我连接我的TCP服务器,然后大约20秒,服务器会自动断开连接,然后WIFI就会打印 CLOSED

测试:

https://qqqqqbucket.oss-cn-beijing.aliyuncs.com/%E5%8D%95%E7%89%87%E6%9C%BA%E6%A8%A1%E5%9D%97%E5%8C%96%E7%A8%8B%E5%BA%8F/%E5%8D%95%E7%89%87%E6%9C%BAAT%E6%8C%87%E4%BB%A4%E9%85%8D%E7%BD%AE%E6%A8%A1%E5%9D%97%E7%A8%8B%E5%BA%8F%E6%A8%A1%E6%9D%BF(%E9%9D%9E%E9%98%BB%E5%A1%9E%E7%89%88)/20191015_005932.mp4

然后说一下

如果你希望程序一开始进来的时候不希望程序执行

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档