STM32智能家居7天小项目(3)ESP8266和STM32的通信简单介绍

举报
yd_274589494 发表于 2023/07/25 11:31:39 2023/07/25
【摘要】 @TOC 前言这是学习百问网7天智能家居的第3天,本篇文章将带大家了解ESP8266和STM之前的通信。 一、环形缓冲区buff.c#include "buff.h"#include <stdlib.h>#include <string.h>#include <stdio.h>int buff_Iint(Pbuffer buffer,u16 size){ //判断参数合法性 if(buf...

@TOC

前言

这是学习百问网7天智能家居的第3天,本篇文章将带大家了解ESP8266和STM之前的通信。

一、环形缓冲区

buff.c

#include "buff.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int buff_Iint(Pbuffer buffer,u16 size)
{
  //判断参数合法性
  if(buffer==NULL||size==0)
  {
    return -1;
  }
  if(buffer->fifo==NULL)
  {
    buffer->fifo=(u8*)malloc(size);//申请空间
    if(buffer->fifo==NULL)//申请空间失败
    {
      
      return -1;
    }
  }
  //对缓冲区进行初始化
  buffer->pr=buffer->pw=0;
  buffer->buf_size=size;
  
  return 0;
}

int buffer_write(Pbuffer buffer,const u8 data)
{
  //判断参数合法性
  if(buffer==NULL||buffer->fifo==NULL)
  {
    return -1;
  }
  //写入数据
  if((buffer->pw+1)%buffer->buf_size!=buffer->pr)
  {    
    buffer->fifo[buffer->pw]=data;
    buffer->pw=(buffer->pw+1)%buffer->buf_size;
    return 0;
  }
  return -1;
}

int buffer_writeBytes(Pbuffer buffer,u8 *data_strea,u8 len)
{
  int i=0;
  //判断参数合法性
  if(buffer==NULL||buffer->fifo==NULL)
  {
    return -1;
  }
  if(data_strea==NULL)
  {
    return -1;
  }
  if(len==0)
  {
    return -1;
  }
  for(i=0;i<len;i++)
  {
      if(buffer_write(buffer,data_strea[i])!=0)
      {    
            break;
      }
  }
  return i;
}

int buffer_read(Pbuffer buffer,u8 *data)
{
  //判断参数合法性
  if(buffer==NULL||buffer->fifo==NULL)
  {
    return -1;
  }
  if(buffer->pr!=buffer->pw)
  {
    *data=buffer->fifo[buffer->pr];
    buffer->pr=(buffer->pr+1)%buffer->buf_size;
    return 0;
  }
  return 0;
}

int buffer_readBytes(Pbuffer buffer,u8 *data_strea,u8 len)
{
  int i=0;
  //判断参数合法性
  if(buffer==NULL||buffer->fifo==NULL)
  {
    return -1;
  }
  if(data_strea==NULL)
  {
    return -1;
  }
  if(len==0)
  {
    return -1;
  }
  for(i=0;i<len;i++)
  {
      if(buffer_read(buffer,&data_strea[i])!=0)
      {    
            break;
      }
  }
  return i;
}

int buffer_clean(Pbuffer buffer)
{
  //判断参数合法性
  if(buffer==NULL||buffer->fifo==NULL)
  {
    return -1;
  }
  memset(buffer->fifo,0,sizeof(buffer->buf_size));//数据全部清0
  buffer->pr=buffer->pw=0;//读写置0
  
  return 0;
  
}

buff.h

#ifndef _BUFF_H_
#define _BUFF_H_


#include "main.h"

#define u8 unsigned char
#define u16 unsigned short
#define u32 unsigned int


typedef struct
{
  u8 *fifo;
  u16 pw;//读指针
  u16 pr;//写指针
  u16 buf_size;//环形缓冲区大小
}buffer,*Pbuffer;



int buff_Iint(Pbuffer buffer,u16 size);
int buffer_write(Pbuffer buffer,u8 data);
int buffer_read(Pbuffer buffer,u8 *data);
int buffer_clean(Pbuffer buffer);
int buffer_writeBytes(Pbuffer buffer,u8 *data_strea,u8 len);
int buffer_readBytes(Pbuffer buffer,u8 *data_strea,u8 len);


#endif


二、ESP8266AT指令集

使用下面的AT指令即可操作ESP8266模块
在这里插入图片描述

总结

本文就简单介绍到这里,百问网下一节课将带我们如何去使用STM32串口对ESP8266发送信息。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。