龙空技术网

我在高职教STM32——ESP8266 WiFi 通信与控制(二)

南耿先生 363

前言:

现时我们对“c语言memset函数的代码”可能比较关切,各位老铁们都想要分析一些“c语言memset函数的代码”的相关文章。那么小编在网摘上汇集了一些关于“c语言memset函数的代码””的相关内容,希望看官们能喜欢,朋友们快快来了解一下吧!

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正是如此,才有了借助头条平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思设计的教学课件分享出来,如果您正是一名单片机爱好者或是一名同行,欢迎点赞+关注,各位的支持是本人持续输出的动力,多谢多谢!#30天学会STM32##STM32单片机##单片机#

在之前的章节中,我们已经学习了传感器数据的采集和显示,但仅限于本开发板之上。既然是物联网开发板,那么接下来的需求就是将传感器数据通过网络上传云端。本章我们来完成开发板入网的工作,为下一步数据上云做准备。

【学习目标】

了解ESP8266模块特点与组网模式了解ESP8266常用的AT指令看懂开发板上ESP8266模块与STM32的连接结合联网测试程序,明白ESP8266接入WiFi热点和连接服务器的过程

STM32控制ESP8266入网其实并不复杂,但落实到细节还是有不少东西可讲的,本章打算分三个部分来讲解,本文是第二部分。

三、工程源码剖析3.1 串口2初始化与中断处理源码

在前面,我们学习了有关STM32串口的知识,并剖析了与串口1相关的代码(参见本合集的“串口通信”部分)。在此基础上,我们增加与串口2有关的代码到usart.c文件中,使之满足与ESP8266“对话”的要求。

1)uart2_init()函数源码

该函数用来初始化串口2及其中断,与之前初始化串口1的流程一致,大家阅读代码清单1的时候顺便再好好回顾一下相关知识。当然,不要忘了把该函数在usart.h头文件里声明一下。

代码清单1 uart2_init()函数源码

2)Usart_SendString()函数源码

考虑到需要给ESP8266发AT指令这样一串字符,而固件库里只提供了发送单个字符的函数USART_SendData(),因此构造了这个发送字符串的函数Usart_SendString(),如代码清单2所示。

代码清单2 Usart_SendString()函数源码

3)串口2中断处理函数

该函数用来接收和处理ESP8266“回复”的消息,就如同串口1接收来自串口助手发来的消息。由于是中断处理函数,因此函数名是规定好的USART2_IRQHandler。考虑到它专门用来处理ESP8266的消息,因此把它写进esp8266.c这个文件中更合适,其源码剖析见下面的3.3小节。

3.2 esp8266.h文件源码

如代码清单3所示,这个头文件里声明了必要的全局变量和驱动函数,构造它们需要对ESP8266工作过程中的功能细节进行抽象和分解,也需要有较强的嵌入式开发经验,大家阅读源码时可以好好领悟一下。

代码清单3 esp8266.h文件源码

3.3 esp8266.c文件源码

该文件的源码较多,是每个驱动函数的实现,这里为了突出源码的功能细节和排版之需,对源码进行了必要的分割处理,连续且完整的源码请阅读本实验配套的工程。

1)头文件、宏、全局变量

我们先把该文件前面非函数部分的代码拎出来,如代码清单4所示,其中的注释已经很详细了。

代码清单4 esp8266.c文件里的头文件、宏和全局变量

2)ESP8266_Clear()函数源码

在与ESP8266“对话”过程中,其回复的内容都是放在esp8266_buf[]缓冲区里的,新内容到来之前应该把旧内容清空,该函数便起到这个作用,如代码清单5所示,清空缓存用的是标准库stdio.h里的memset()函数。

代码清单5 ESP8266_Clear()函数源码

3)ESP8266_WaitReceive()函数源码

该函数通过检测记录消息长度的计数值,来判断ESP8266发来的消息是否接收完成,如代码清单6所示。该函数在调用时应放在循环里,直到接收完成才退出循环。

代码清单6 ESP8266_WaitReceive()函数源码

4)ESP8266_SendCmd()函数源码

该函数的功能是向ESP8266发一条AT指令,如代码清单7所示,参数*cmd是指令内容,通过调用Usart_SendString()函数把指令发到串口2。考虑到发送需要时间,也可能失败,因此设置了一个超时参数timeOut,通过循环检测接收是否完成,来决定指令发送是否成功。在不超时的情况下接收完成,说明发送成功,否则发送失败。

代码清单7 ESP8266_SendCmd()函数源码

5)ESP8266_Init()函数源码

该函数对连接ESP8266复位引脚的PC14进行初始化,并给出复位时序完成ESP8266的初始化,如代码清单8所示。

代码清单8 ESP8266_Init()函数源码

6)串口2中断处理函数源码

该函数在3.1小节中已提及,是用来接收ESP8266“回复”的消息,如代码清单9所示,消息的内容保存在esp8266_buf缓冲区里。当然,对于超过缓冲区长度(200个字节)的消息做了截断处理。

代码清单9 串口2中断处理函数源码

3.4 main.c文件源码

再看一眼前面图10的流程,可以发现主程序要解决两方面的问题:一方面是将串口助手发来的AT指令转发给ESP8266,另一方面则是将ESP8266回复的消息“打印”到串口助手,从而实现“对话”。完整的源码和注释见代码清单10,其中涉及串口1的接收、打印和回显,我们在本合集“串口通信”部分的源码中已经分析过了,大家重温的同时再领悟一下与串口2的结合。

图10 程序执行流程图

代码清单10 main.c文件源码

(第二部分完,下一部分我们对上述代码进行测试,并据此进行完善和补充)

标签: #c语言memset函数的代码