STM32-ESP8266Wi-Fi模塊使用USART實現通信/創建AP和STA模式配置教程(寄存器版)

本章思維導圖:

ESP8266WIFI模塊簡介

ESP8266 是一款由樂鑫科技推出的低成本、高性能 Wi-Fi 模塊,廣泛應用于物聯網和嵌入式開發領域。

WIFI的頻段5G和2.4G

2.4G Wi-Fi與5G Wi-Fi最本質的區別即工作頻段(無線電波的頻率)不一樣;

2.4GWi-Fi工作頻段為:2.4GHZ~2.4835GHZ;

5GWi-Fi工作頻段為:5.15GHZ~5.350GHZ和5.725GHZ和5.850GHZ;

WIFI的信道

目前常用的頻段有2個5G和2.4G頻段,每個頻段又分為若干頻道,又稱為信道。如果把頻段理解為高速公路的話,那么信道可以理解高速公路上的車道。

WFIF模塊

SMT32F10x系統的MCU如果想通過WIFI聯網,必須配備WFI模塊。(互聯型MCU內置了WIFI外設,不用額外配置WIFI模塊)。本章講解目前市場上主流的WIFI模塊樂鑫公司的ESP8266;

ESP8266與MCU的通信方式:通常大多以串口的方式進行連接,ESP8266也支持IIC和SPI通訊;

ESP8266開發方式

ESP8266AT指令集:AT 命令以 “AT” 開始,代表 Attention,以新的一行 (CR LF) 為結尾。輸入的每條命令都會返回 OK 或 ERROR 的響應,表示當前命令的最終執行結果。注意,所有 AT 命令均為串行執行,每次只能執行一條命令。因此,在使用 AT 命令時,應等待上一條命令執行完畢后,再發送下一條命令。如果上一條命令未執行完畢,又發送了新的命令,則會返回 busy p...

常用AT指令有:(本章會上傳AT指令集文件,方便小伙伴們創建ESP8266模式)

?AT:測試指令

AT+CWLP:列出所有可訪問的WiFi

AT+CWMODE=? :設置模式

AT+CIPSIART=”type”,”address”,port:建立TCP或UDP連接

ESP8266三種模式:

AP模式:創建熱點,最多支持 5 個設備接入(如作為移動熱點共享網絡)。類似與路由器功能,簡單理解就是開放一個熱點信息模式;

STA模式:作為客戶端連接路由器,適用于遠程控制(如智能家居設備聯網)。連接熱點。簡單理解就是聯網模式;

AP+STA模式:同時作為客戶端和服務端,實現無縫切換(如設備既連接路由器又允許其他設備接入)。先連接一個可上網的熱點(STA)在開放一個熱點信息(AP)就是兩種模式同時存在;

USART3配置

根據原理圖,查看對應引腳

如圖所示:ESP8266跟STM32連接的引腳分別為:

ESP8266的22發送TX引腳連接STM32的PB11串口接收引腳;

ESP8266的21接收RX引腳連接STM32的PB10串口發送引腳;

ESP8266是采用USART串口3與STM32進行通信的;所以STM32PB11引腳應設置為復用輸入模式,STM32PB10引腳應設置為復用輸出模式;

USART3串口配置教程

USART3配置步驟:

1. 開時鐘

2. 配置GPIO模式

3. 通過在USART_CR1寄存器上置位UE位來激活USART

4.?編程USART_CR1的M位來定義字長。

5.?在USART_CR2中編程停止位的位數。

6.?利用USART_BRR寄存器選擇要求的波特率。(查看第二章的系統架構找到 ?USART3屬于APB1上,在第六章的時鐘樹上找到APB1總線工作頻率;用工作頻率/波特率:(USART1>BRR=72000000/bps)注意要換算成HZ單位因為對應秒時間

7.?設置USART_CR1中的TE位,發送一個空閑幀作為第一次數據發送。

8.?設置USART_CR1的RE位。激活接收器,使它開始尋找起始位。

9. 接收緩沖區非空中斷使能

10.?開啟空閑幀中斷

11.?調用中斷設置優先級函數

代碼示例:

/*串口3初始化函數ESP8266的22發送TX引腳連接STM32的PB11串口接收引腳;ESP8266的21接收RX引腳連接STM32的PB10串口發送引腳;形參bps為設置的波特率
*/
void USART3_Init(u32 bps)
{//1. 開時鐘RCC->APB1ENR|=1<<18;//開啟USART3時鐘RCC->APB2ENR|=1<<3;//開啟PB時鐘RCC->APB1RSTR|=1<<18;//開啟USART3復位時鐘RCC->APB1RSTR&=~(1<<18);//關閉復位時鐘//2. 配置GPIO模式GPIOB->CRH&=0xffff00ff;//清空PB10和PB11引腳模式GPIOB->CRH|=0x00008b00;//PB11為輸入模式,PB10為輸出模式//3. 通過在USART_CR1寄存器上置位UE位來激活USARTUSART3->CR1|=1<<13;//4.?編程USART_CR1的M位來定義字長。USART3->CR1&=~(1<<12);//5.?在USART_CR2中編程停止位的位數。USART3->CR2&=~(0x3<<12);//6.?利用USART_BRR寄存器選擇要求的波特率。(查看第二章的系統架構找到 ?USART3屬于APB1上,在第六章的時鐘樹上找到APB1總線工作頻率;用工作頻率/波特率:(USART1>BRR=72000000/bps)注意要換算成HZ單位因為對應秒時間USART3->BRR=36000000/bps;//7.?設置USART_CR1中的TE位,發送一個空閑幀作為第一次數據發送。USART3->CR1|=1<<3;//8.?設置USART_CR1的RE位。激活接收器,使它開始尋找起始位。USART3->CR1|=1<<2;//9. 接收緩沖區非空中斷使能USART3->CR1|=1<<5;//10.?開啟空閑幀中斷USART3->CR1|=1<<4;//11.?調用中斷設置優先級函數STM32_SetNVICPriority(USART3_IRQn,1,1);
}

串口3底層發送數據函數

代碼示例:

/*
串口3底層發送數據函數
*/
void USART3_TX(u8 *dat)
{while(*dat){USART3->DR=*dat++;while(USART3->SR&1<<7){};//等待數據發送完成}
}

串口3中斷接收服務函數

代碼示例:

/*串口3中斷服務函數
*/
u8 USART3_buffer[1024];//接收數據緩沖區
u32 USART3_cnt=0;//緩沖區數組下標
u8 USART3_flag=0;//標志位
void USART3_IRQHandler(void)
{u8 dat=0;if(USART3->SR&1<<5)//接收數據中斷{dat=USART3->DR;if(USART3_cnt<1024){USART3_buffer[USART3_cnt]=dat;USART3_cnt++;}else{USART3_cnt=0;}}if(USART3->SR&1<<4)//空閑幀中斷{dat=USART3->DR;USART3_flag=1;}    
}

?配置ESP8266Wi-Fi模塊AP和STA模式

STM32通過UART串口與ESP8266模塊通信,利用AT指令集控制ESP8266的工作模式、網絡連接及數據傳輸。ESP8266默認波特率為115200,支持多種模式(Station、AP、Station+AP),并通過AT指令動態切換。

配置AP模式

STM32通過USART3(串口3)向ESP8266模塊發送AT指令集,配置其進入AP(Access Point,無線接入點)模式,使ESP8266作為Wi-Fi熱點運行,供其他設備連接。

配置AP模式指令集代碼(本章會上傳指令集代碼文件):

通過USART3發送以下AT指令序列

ESP8266_AP_SERVER_MODE
{"AT\r\n"         --測試指令"ATE0\r\n"       --關回顯"AT+CWMODE=2\r\n"--設置為服務器模式"AT+RST\r\n"    --模塊復位"ATE0\r\n"      --關回顯"AT+CWSAP=\"%s\",\"%s\",1,4\r\n" --設置wifi信息"AT+CIPMUX=1\r\n"--開啟多連接"AT+CIPSERVER=1,%d\r\n" --設置端口號"AT+CIFSR\r\n"   --查詢IP
}

配置AP模式代碼示例:

#include "LED.h"
#include "Delay.h"
#include "KEY.h"
#include "USART1.h"
#include "stdio.h"
#include "USART3.h"
char *ESP8266_AP_SERVER_MODE[]=
{"AT\r\n" ,       // --測試指令"ATE0\r\n" ,      //--關回顯"AT+CWMODE=2\r\n",//--設置為服務器模式"AT+RST\r\n",    //--模塊復位"ATE0\r\n",      //--關回顯"AT+CWSAP=\"LYF_WiFi\",\"LYF77777\",1,4\r\n", //--設置wifi信息"AT+CIPMUX=1\r\n",//--開啟多連接"AT+CIPSERVER=1,8088\r\n", //--設置端口號"AT+CIFSR\r\n",   //--查詢IP
};
int main()
{LED_Init();//LED燈初始化函數KEY_Init();//按鍵初始化函數USART3_Init(115200);//USART3串口3初始化函數printf("各模塊初始化完成\n");u8 key=0;u8 index=0;while(1){key=KEY_get();if(key){LED1(1);Delay_MS(50);LED1(0);printf("發送指令集:%s\n",ESP8266_AP_SERVER_MODE[index]);USART3_TX((u8*)ESP8266_AP_SERVER_MODE[index]);index++;if(index==9){index=0;}} if(USART3_flag){USART3_buffer[USART3_cnt]='\0';printf("發送指令集返回狀態:%s\n",USART3_buffer);USART3_cnt=0;USART3_flag=0;}}
}

創建一個WiFi名稱為LYF_WiFi的熱點信息、密碼為:LYF77777、端口號為:8088;

代碼運行效果圖:

配置STA模式

STM32通過USART3(串口3)向ESP8266模塊發送AT指令集,使其配置ESP8266為STA模式(Station模式,即客戶端模式)

配置STA模式指令集代碼(本章會上傳指令集代碼文件):

通過USART3發送以下AT指令序列

ESP8266_STA_TCPserver[]=
{"AT\r\n",//測試指令"ATE0\r\n",//關回顯"AT+CWMODE=3\r\n",//AP+STA共存模式"AT+RST\r\n",//模塊復位"ATE0\r\n",//關回顯"AT+CWJAP=\"liyyff\",\"12345678\"\r\n",//連接wifi"AT+CIPMUX=1\r\n",//設置多連接"AT+CIFSR\r\n",//查詢IP"AT+CIPSERVER=1,100\r\n",//建立TCP服務器"AT+CIPSTART=\"TCP\",\"192.168.1.118\",8080\r\n",//設置端口號,連接服務器"AT+CIPMODE=1\r\n",//設置透傳模式"AT+CIPSEND\r\n",//開始發送數據
};

配置STA模式代碼示例:

#include "LED.h"
#include "Delay.h"
#include "KEY.h"
#include "USART1.h"
#include "stdio.h"
#include "USART3.h"
char *ESP8266_STA_TCPClient[]=
{"AT\r\n",//測試指令"ATE0\r\n",//關回顯"AT+CWMODE=1\r\n",//設置客戶端模式"AT+RST\r\n",//模塊復位"ATE0\r\n",//關回顯"AT+CWJAP=\"HUAWEIshui\",\"asdfghjkl12\"\r\n",//連接wifi"AT+CIPMUX=0\r\n",//設置單連接"AT+CIFSR\r\n",//查詢IP"AT+CIPSTART=\"TCP\",\"192.168.43.204\",8080\r\n",//設置端口號,連接服務器"AT+CIPMODE=1\r\n",//設置透傳模式"AT+CIPSEND\r\n",//開始發送數據
};int main()
{LED_Init();//LED燈初始化函數KEY_Init();//按鍵初始化函數USART3_Init(115200);//USART3串口3初始化函數printf("各模塊初始化完成\n");u8 key=0;u8 index=0;while(1){key=KEY_get();if(key){LED1(1);Delay_MS(50);LED1(0);printf("發送指令集:%s\n",ESP8266_STA_TCPClient[index]);USART3_TX((u8*)ESP8266_STA_TCPClient[index]);index++;if(index==12){index=0;}} if(USART3_flag){USART3_buffer[USART3_cnt]='\0';printf("發送指令集返回狀態:%s\n",USART3_buffer);USART3_cnt=0;USART3_flag=0;}}
}

先用電腦創建一個liyyff名稱的熱點信息,密碼為:12345678,頻段為:2.4GHZ,IP地址為:192.168.1.118,設置好AT指令利用串口3發送,使其ESP8266連接熱點信息;

代碼運行結果:


制作不易!喜歡的小伙伴給個小贊贊!喜歡我的小伙伴點個關注!有不懂的地方和需要的資源隨時問我喲!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93857.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93857.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93857.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法26. 刪除有序數組中的重復項

給你一個 非嚴格遞增排列 的數組 nums &#xff0c;請你 原地 刪除重復出現的元素&#xff0c;使每個元素 只出現一次 &#xff0c;返回刪除后數組的新長度。元素的 相對順序 應該保持 一致 。然后返回 nums 中唯一元素的個數。 考慮 nums 的唯一元素的數量為 k &#xff0c;你…

ROS2中傳輸樣條曲線

在ROS2中傳輸樣條曲線需要解決兩個核心問題&#xff1a;**如何結構化表示曲線數據**和**如何高效傳輸**。以下是一套完整方案&#xff0c;結合自定義消息設計、序列化優化和QoS配置實現可靠傳輸&#xff1a;---### &#x1f4d0; 一、定義樣條曲線的自定義消息 樣條曲線通常由控…

Win11怎樣安裝DirectX 9

通過微軟官方下載安裝&#xff1a;確認系統兼容性并準備&#xff1a;確保顯卡驅動為最新版本&#xff0c;因為 DirectX 與顯卡驅動程序緊密相關。同時&#xff0c;可暫時關閉防病毒軟件和防火墻&#xff0c;防止其干擾安裝過程。下載安裝程序&#xff1a;訪問微軟官方網站下載 …

RAGFLOW~Enable RAPTOR

Enable RAPTOR 一種遞歸抽象方法&#xff0c;用于長上下文知識檢索和摘要&#xff0c;在廣泛語義理解和細微細節之間取得平衡。 RAPTOR&#xff08;遞歸抽象處理用于樹狀組織檢索&#xff09;是一種在2024年論文中引入的增強文檔預處理技術。它旨在解決多跳問答問題&#xff0c…

【機器人+相機通訊】宇樹科技相機通信

https://github.com/unitreerobotics/xr_teleoperate/blob/main/README_zh-CN.md 相機驅動與服務端 https://github.com/unitreerobotics/xr_teleoperate/blob/main/teleop/image_server/image_server.py 其中相機如果是realsense, 安裝好驅動后&#xff0c;可以使用命令查看…

機械學習中的一些優化算法(以邏輯回歸實現案例來講解)

一、混淆矩陣混淆矩陣是機器學習中評估分類模型性能的重要工具&#xff0c;尤其適用于二分類或多分類任務。它通過展示模型預測結果與實際標簽的匹配情況&#xff0c;幫助理解模型的錯誤類型&#xff08;如假陽性、假陰性等&#xff09;。以下通過二分類場景為例&#xff0c;結…

龍蜥受邀參加2025開放計算技術大會,解碼基礎模型驅動下的系統創新與生態共建

開放計算技術大會由全球最大的開放計算社區 OCP 發起&#xff0c;是開放計算領域生態覆蓋最廣且最具影響力的亞洲年度技術盛會。本屆大會由 OCP 與 OCTC&#xff08;中國電子工業標準化技術協會開放計算標準工作委員會&#xff09;兩大開放組織聯合主辦&#xff0c;將于 8 月 7…

第三階段—8天Python從入門到精通【itheima】-140節(pysqark實戰——基礎準備)

目錄 140節——pysqark實戰——基礎準備 1.學習目標 2.pysqark庫的安裝 3.pyspark的路徑安裝問題 一、為什么不需要指定路徑&#xff1f; 二、如何找到 pyspark 的具體安裝路徑&#xff1f; 三、驗證一下&#xff1a;直接定位 pyspark 的安裝路徑 四、總結&#xff1a;記…

數據庫中使用SQL作分組處理01(簡單分組)

1.簡單分組GroupBy什么就Select什么SELECT Name,Score From StudentScore GROUP BY Name,Score2.聚合函數(MAX SUM AVG COUNT)&#xff08;1&#xff09;計算1.表的全部字段都可以用聚合函數&#xff0c;但是篩選聚合函數的結果要用Having關鍵字2.聚合函數默認排除Null值IDName…

Linux基本服務——web服務解析

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 目錄 Web服務解析 虛擬Web主機 Web目錄訪問控制 Web服務解析 用途&#xff1a;基于 B/S 架構提供網頁的服務端程序 應用層協議&#xff1a;HTTP&#xff08;TCP 80…

深入理解緩存淘汰策略:LRU vs LFU 完全解析

深入理解緩存淘汰策略&#xff1a;LRU vs LFU 完全解析 文章目錄深入理解緩存淘汰策略&#xff1a;LRU vs LFU 完全解析前言一、基礎概念解析1.1 LRU&#xff08;Least Recently Used&#xff09;- 最近最少使用1.2 LFU&#xff08;Least Frequently Used&#xff09;- 最少使用…

【C語言】字符函數與字符串函數詳解

文章目錄一、字符分類函數二、字符轉換函數三、strlen函數&#xff1a;計算字符串長度功能說明使用示例模擬實現四、strcpy函數&#xff1a;字符串拷貝功能說明模擬實現五、strcat函數&#xff1a;字符串追加功能說明模擬實現六、strcmp函數&#xff1a;字符串比較比較規則模擬…

uvicorn 啟動重復加載 多次加載

目錄 uvicorn 啟動重復加載 多次加載 解決方法1&#xff1a; 解決方法2&#xff1a; uvicorn 啟動重復加載 多次加載 fastapi_aa 是當前類 解決方法1&#xff1a; import uvicornfrom fastapi import FastAPIapp FastAPI()if __name__ "__main__":if sys.gett…

Bard AI本地部署教程:在自己的服務器上運行谷歌AI

Bard AI本地部署教程:在自己的服務器上運行谷歌AI 關鍵詞:Bard AI、本地部署、服務器、谷歌AI、運行教程 摘要:本文旨在為大家詳細介紹如何在自己的服務器上實現Bard AI的本地部署。我們會從背景知識講起,逐步深入到核心概念、算法原理、操作步驟,還會提供項目實戰案例和實…

應急響應處置案例(上)

本文目錄 目錄 本文目錄 Web安全事件 概述 案例1 - webshell 背景 排查情況 天眼 服務器 案例2 - Struts2 排查情況 天眼 服務器 案例3 - Redis未授權 背景 排查情況 天眼 服務器 案例4 - EW內網穿透 背景 排查情況 天眼 服務器 案例5 - 一句話木馬 背…

面試官問我:“為什么不能完全用對象替代指針?”我笑了:看看Google和Linux內核代碼就知道了!

本篇摘要 本篇將以最通俗易懂的語言&#xff0c;形象的講述為什么很多情境下&#xff0c;我們優先考慮的使用指針而不是對象本身&#xff0c;本篇將給出你答案&#xff01; 一.從一個生活例子說起&#xff0c;形象秒懂 想象一下&#xff0c;你去圖書館借書&#xff0c;下面你…

CAMx大氣污染模擬全流程:Linux編譯/多重嵌套配置/SMOKE清單預處理/SA-DDM-PA工具應用與科研繪圖結果可視化分析

CAMx模型是一個基于大氣化學&#xff0c;針對臭氧、顆粒物和霧霾天氣過程的大氣污染物計算模型。【目標】&#xff1a;1、掌握CAMx模式的區域空氣質量模擬案例配置技術方法2、掌握SMOKE模型的CAMx模式大氣排放清單輸入準備方法3、掌握CAMx模式污染來源解析工具&#xff08;SA&a…

嵌入式學習筆記-MCU階段-DAY10ESP8266模塊

1.ESP8266概述 官方網址&#xff1a;ESP8266 Wi-Fi MCU I 樂鑫科技 (espressif.com.cn) ESP8266模塊---wifi模塊 產品特點&#xff1a; 2.ESP8266中的wifi: ESP8266EX ?持 TCP/IP 協議&#xff0c;完全遵循 802.11 b/g/n WLAN MAC 協議&#xff0c;?持分布式控制功能 (DC…

如何快速通過軟件項目驗收,第三方軟件檢測機構的重要性

在客戶和開發團隊之間&#xff0c;最后臨門一腳的項目驗收環節總容易出現各種問題&#xff0c;以至于時間無限拉長&#xff0c;久久不見結束&#xff0c;為此給大家準備了一份如何快速通過軟件項目驗收的內容來幫助大家結束持久戰。 一、項目驗收準備材料 &#xff08;一&…

洛谷做題3:P5711 【深基3.例3】閏年判斷

文章目錄題目描述輸入格式輸出格式輸入輸出樣例分析代碼題目描述 輸入一個年份&#xff0c;判斷這一年是否是閏年&#xff0c;如果是輸出 1&#xff0c;否則輸出 0。 1582 年以來&#xff0c;閏年的定義&#xff1a; 普通閏年&#xff1a;公歷年份是 4 的倍數&#xff0c;且不…