赞
踩
先配置好第一个ESP8266再与STM32连接起来,可以随便找一个串口助手,我这里用买ESP8266时候的资料里面的串口助手,我这个出厂有烧录固件进去。
(每一个指令都要换行)
ESP8266的默认出产波特率为115200,也有的个别不是115200,如果有
出现乱码的情况,就是波特率不对,可以自己尝试更换别的波特率
AT//测试ESP8266是否可用
如果回复时OK则说明esp8266没有问题,如果不会回复的话,可能是固件库过老或者固件库没有烧录进去,这个可以去看看别的博主是如何烧录固件库的,我会在下次文章中教大家怎么烧录。
接下来,先把ESP8266配置为AP模式(作为服务器给别人连接)
AT+CWMODE=2//AP模式
设置ESP8266的热点和密码
AT+CWSAP="ESP8266","123456789",4,4//AT+CWSAP=“SSID”,“PWD”,CHL,ECN
看不懂指令的可以看下面这个表
AT+CWSAP=“SSID”,“PWD”,CHL,ECN | OK |
---|---|
SSID | 该AP名称 |
PWD | 密码 |
CHL | 通道号(1~14) |
ECN | 加密方式(1~4) |
下一步设置多连接模式
AT+CIPMUX=1
开启TCP服务器
AT+CIPSERVER=1,5050//AT+CIPSERVER="1是开启","端口号0~9999"
配置第二块ESP8266
AT+CWMODE_DEF=1//STA模式
其他的配置再下面讲
代码如下(示例):
ESP8266和stm32的连接方式
ESP8266 | STM32F103 |
---|---|
3v3 | 3v3 |
GND | GND |
EN | 3v3 |
TX | A3 |
RX | A2 |
usart口配置
#include "bsp\_usart2.h" #include <stdarg.h> #include "wifi\_config.h" void USART2\_Config( void ) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC\_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC\_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO\_Init(GPIOA, &GPIO_InitStructure); /\* Configure USART2 Rx (PA.03) as input floating \*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO\_Init(GPIOA, &GPIO_InitStructure); /\* USART2 mode config \*/ USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No ; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART\_Init(USART2, &USART_InitStructure); /\* 使能串口2接收中断 \*/ USART\_ITConfig(USART2, USART_IT_RXNE, ENABLE); /\* 使能串口2总线空闲中断 \*/ USART\_ITConfig(USART2, USART_IT_IDLE, ENABLE); USART\_Cmd(USART2, ENABLE); } /\* \* 函数名:itoa \* 描述 :将整形数据转换成字符串 \* 输入 :-radix =10 表示10进制,其他结果为0 \* -value 要转换的整形数 \* -buf 转换后的字符串 \* -radix = 10 \* 输出 :无 \* 返回 :无 \* 调用 :被USART2\_printf()调用 \*/ static char \*itoa( int value, char \*string, int radix ) { int i, d; int flag = 0; char \*ptr = string; /\* This implementation only works for decimal numbers. \*/ if (radix != 10) { \*ptr = 0; return string; } if (!value) { \*ptr++ = 0x30; \*ptr = 0; return string; } /\* if this is a negative value insert the minus sign. \*/ if (value < 0) { \*ptr++ = '-'; /\* Make the value positive. \*/ value \*= -1; } for (i = 10000; i > 0; i /= 10) { d = value / i; if (d || flag) { \*ptr++ = (char)(d + 0x30); value -= (d \* i); flag = 1; } } /\* Null terminate the string. \*/ \*ptr = 0; return string; } /\* NCL\_Itoa \*/ /\* \* 函数名:USART2\_printf \* 描述 :格式化输出,类似于C库中的printf,但这里没有用到C库 \* 输入 :-USARTx 串口通道,这里只用到了串口2,即USART2 \* -Data 要发送到串口的内容的指针 \* -... 其他参数 \* 输出 :无 \* 返回 :无 \* 调用 :外部调用 \* 典型应用USART2\_printf( USART2, "\r\n this is a demo \r\n" ); \* USART2\_printf( USART2, "\r\n %d \r\n", i ); \* USART2\_printf( USART2, "\r\n %s \r\n", j ); \*/ void USART2\_printf( USART_TypeDef\* USARTx, char \*Data, ... ) { const char \*s; int d; char buf[16]; va_list ap; va\_start(ap, Data); while ( \*Data != 0) // 判断是否到达字符串结束符 { if ( \*Data == 0x5c ) //'\' { switch ( \*++Data ) { case 'r': //回车符 USART\_SendData(USARTx, 0x0d); Data ++; break; case 'n': //换行符 USART\_SendData(USARTx, 0x0a); Data ++; break; default: Data ++; break; } } else if ( \*Data == '%') { // switch ( \*++Data ) { case 's': //字符串 s = va\_arg(ap, const char \*); for ( ; \*s; s++) { USART\_SendData(USARTx,\*s); while( USART\_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET ); } Data++; break; case 'd': //十进制 d = va\_arg(ap, int); itoa(d, buf, 10); for (s = buf; \*s; s++) { USART\_SendData(USARTx,\*s); while( USART\_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET ); } Data++; break; default: Data++; break; } } /\* end of else if \*/ else USART\_SendData(USARTx, \*Data++); while( USART\_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET ); } }
代码如下(示例):
#include "stm32f10x.h" #include "stdio.h" #include "wifi\_config.h" #include "wifi\_function.h" #include <string.h> #include <stdlib.h> ## 最后 **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。** **深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。** **因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。** ![img](https://img-blog.csdnimg.cn/img_convert/130cf4dda95ae9be950b492105ae8cc7.png) ![img](https://img-blog.csdnimg.cn/img_convert/c30fe84b927f633a50d9e9e84f5c7508.jpeg) ![img](https://img-blog.csdnimg.cn/img_convert/850b7ccfb24e41fef7bb1f6e0c29cf3c.png) ![img](https://img-blog.csdnimg.cn/img_convert/fed0b72fceb45bd1c505368e4e5f8b54.png) ![img](https://img-blog.csdnimg.cn/img_convert/6d5d8e70457b52cdd2732b438790fadc.png) ![img](https://img-blog.csdnimg.cn/img_convert/85a76225d2ec8051503c1d736e1a29c2.png) ![](https://img-blog.csdnimg.cn/img_convert/e5a85fc7d69604dbb76bb98b0aa43f34.png) **既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!** [**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289) **由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!! 5684469531)] [外链图片转存中...(img-nvNYNqrn-1715684469531)] [外链图片转存中...(img-CM6RoJg5-1715684469532)] **既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!** [**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289) **由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。