STM32F103与ESP8266 WIFI模块的USART中断调试

本文概述了利用STM32F103的HAL库,通过USART中断方式调试ESP8266(ESP-01)WIFI模块的方法。首先介绍了开发环境和ESP-01模块的基本特点与功能,随后展示了如何通过电脑PC的串口助手进行初步调试与验证。最后,重点阐述了如何利用STM32F103单片机,结合其USART中断功能,明确ESP8266模块已可以用AT指令进行调试。

 一、开发环境


硬件:正点原子精英版  STM32F103 开发板、ESP8266 WIFI模块、USB-TTL转串口、

单片机:STM32F103ZET6

软件:Keil版本:5.32 ;串口调试助手;

STM32CubeMX版本:6.9.2

STM32Cube MCU Packges版本:STM32F1xx_DFP.2.3.0

二、ESP8266(ESP-01)模块简介


实验使用的是ESP8266(ESP-01)模块。ESP8266 系列模组是深圳市安信可科技有限公司开发的一系列基于乐鑫ESP8266EX的低功耗UART-WiFi芯片模组,可以方便地进行二次开发,接入云端服务,实现手机3/4G全球随时随地的控制,加速产品原型设计。

  模块核心处理器 ESP8266 在较小尺寸封装中集成了业界领先的 Tensilica L106 超低功耗 32 位微型 MCU,带有 16 位精简模式,主频支持 80 MHz 和 160 MHz,支持 RTOS,集成 Wi-Fi MAC/ BB/RF/PA/LNA,板载天线。支持标准的 IEEE802.11 b/g/n 协议,完整的 TCP/IP 协议栈。用户可以使用该模块为现有的设备添加联网功能,也可以构建独立的网络控制器。ESP8266 有两个 UART,其中 UART0 有 TX、 RX,可做数据传输; UART1 由于RX 脚被SPI-Flash 占⽤,只能使⽤TX,可以做串⼝调试信息打印。

  ESP8266 是高性能无线 SoC,以最低成本提供最大实用性,为 Wi-Fi 功能嵌入其他系统提供无限可能。

实物图片如下:

封装如下:


 

三、电脑PC串口助手调试ESP8266

在开始使用STM32F103单片机调试ESP8266之前,建议先通过电脑PC的串口助手软件(如PuTTY、SSCOM等)与ESP8266进行通信测试,以确保模块功能正常。具体步骤如下:

  1. 连接硬件:使用USB转TTL模块将ESP8266的TX、RX引脚(注意交叉连接,即ESP8266的TX接USB转TTL的RX,反之亦然)与电脑连接。VCC、 CH_PD 接到3.3v(EN),GND引脚连接到GND,并确保供电稳定。如图所示。

    值得注意,请保证供电电源是3.3V,在 3V-4V 以下,保证 CH_PD 也就是芯片选通脚为高电平(3.3v),系统若有指示灯,蓝灯会在上电瞬间闪烁一下立刻灭掉!因为 8266 模组的 LED 灯接到芯片的 GPIO2 引脚,此引脚与 UART1 的TXD 共用,此时模块上电会输出一下打印信息,所以 LED 会闪烁直到打印信息输出完毕,LED 灯就灭了。若看到数据指示灯有输出,而你的串口没数据,代表输出的数据你没有很好的接收到,请检查你的USB 转串口工具。

  2. 配置串口助手:打开串口助手软件,设置正确的波特率(ESP8266默认波特率通常为115200)、数据位、停止位和校验位。
  3. 发送AT指令:通过串口助手向ESP8266发送AT指令(如“AT\r\n”),如果返回“OK”,则表示模块已正确响应,可进行后续操作。
    ATOKAT+RSTOKets Jan  8 2013,rst cause:1, 
    boot mode:(3,6)load 0x40100000, len 1856, room 16 
    tail 0
    chksum 0x63
    load 0x3ffe8000, le
    n 776, room 8 
    tail 0
    chksum 0
    x02
    load 0x3ffe8310, len 552, room 8 
    tail 0
    chksum 0x79
    csu
    m 0x792nd boot version : 1.5SPI Speed      : 40MHzSP
    I Mode       : DIOSPI Flash Size & Map: 8Mbit(512KB+512KB)
    jump to run user1 @ 1000勩?胣燠{傷g|???{l你s???
    d`勩;踠鋎?l`屻{?嚐?l$ {l敲sl倪銊c$刢s|?8 鋖鋍$s宒c潴o鐎o'?刣鹸d$?l那???弆?l?g?劅銊cd鞆p劅銊c$?8;drdAi-Thinker Technology Co. Ltd.ready
    

    系统启动后,在 0.91 版本以及以前,系统会输出一堆乱码(其实不是乱码,系统启动后输出一些内部信息)然后输出 READY!代表系统正常。按照上述方法,系统正常运行后,应该能在手机上或者电脑上搜到以 ESP_XXXX或AI-THINKER 为头的WIFI,若系统有上述描述的状态,代表你的系统正常运行。

四、STM32单片机调试ESP8266

接下来,我们将利用STM32F103单片机,通过其USART接口以中断方式调试ESP8266模块,实现更高级别的设备交互与控制。

  1. 硬件连接:1)将ESP8266的TX、RX接STM32F103的相应USART2引脚(PA2、PA3)。VCC、 CH_PD 接到3.3v,GND引脚连接到GND,并确保供电稳定。2)使用USB转TTL模块将STM32单片机USART1(PA9、PA10)的TX、RX引脚(注意交叉连接,TX接USB转TTL的RX,反之亦然)与电脑连接。VCC、 CH_PD 接到3.3v(EN),GND引脚连接到GND,并确保供电稳定。如图所示。

  2. 软件配置

    初始化USART:使用STM32CubeMX或手动配置STM32F103的USART1,USART2,设置波特率、中断优先级等参数。
  3. 编写调试代码

    • 基于STM32 HAL库编写USART初始化代码,并配置中断服务例程以处理接收到的数据。在中断服务例程中,在usart.c添加代码添加串口的代码。
      /* USER CODE BEGIN 0 */
      #include <string.h>
      #include <stdio.h>
      /* USER CODE END 0 *//* USER CODE BEGIN 1 *//*
      * 添加如下代码,可不在工程设置中勾选Use MicroLIB
      */
      #pragma import(__use_no_semihosting)struct __FILE
      {int a;
      };FILE __stdout;
      FILE __stdin;void _sys_exit(int x)
      {
      }/*****************************************************
      *function: 写字符文件函数
      *param1: 输出的字符
      *param2: 文件指针
      *return: 输出字符的ASCII码
      ******************************************************/
      int fputc(int ch, FILE *f)
      {HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 10);return ch;
      }
      /*****************************************************
      *function: 读字符文件函数
      *param1: 文件指针
      *return: 读取字符的ASCII码
      ******************************************************/
      int fgetc(FILE *f)
      {uint8_t ch = 0;HAL_UART_Receive(&huart1, (uint8_t*)&ch, 1, 10);return (int)ch;
      }static uint8_t rx_len;
      static uint8_t rx_data;
      static uint8_t usart_rx_buf[200];void USART2_startRx(void)
      {HAL_UART_Receive_IT(&huart2,(uint8_t*)&rx_data,1);
      }void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
      {usart_rx_buf[rx_len%200] = rx_data;rx_len++;HAL_UART_Receive_IT(&huart2,(uint8_t*)&rx_data,1);}
      uint16_t USART2_receive(uint8_t *pdata)
      {memcpy(pdata,(uint8_t*)usart_rx_buf,rx_len);return rx_len;
      }
      void USART2_transmit(uint8_t *pdata,uint16_t size,uint32_t timeout)
      {HAL_UART_Transmit(&huart2,pdata,size,timeout);
      }
      void USART2_clear(void)
      {rx_len = 0;	memset((uint8_t*)usart_rx_buf,0,200);
      }/* USER CODE END 1 */
    • 在main.c添加串口发送和接收的指令,发送AT指令。
      /* Private user code ---------------------------------------------------------*/
      /* USER CODE BEGIN 0 */
      uint8_t pdata_rx[200]={0};
      //uint8_t pdata_tx[200]="AT+RST\r\n";
      uint8_t pdata_tx[200]="AT\r\n";
      int len =0;/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
      int main(void)
      {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();MX_USART2_UART_Init();/* USER CODE BEGIN 2 */USART2_startRx();printf("usart1 is ok\r\n");USART2_transmit((uint8_t*)pdata_tx,sizeof(pdata_tx),500);printf("tx:%s",pdata_tx);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */len= USART2_receive(pdata_rx);if(len>0){//USART2_transmit((uint8_t*)pdata_rx,sizeof(pdata_rx),500);//printf("pdata_rx:%s\r\n",pdata_rx);printf("%s ",pdata_rx);USART2_clear();len =0;}}/* USER CODE END 3 */
      }
      
  4. 调试与测试

    串口调试助手看到,STM32发送AT指令给ESP8266模块,ESP8266模块回复OK,明确ESP8266模块已可以用AT指令进行调试。               

五、总结

 通过以上步骤,通过上述步骤,我们成功地利用STM32F103单片机通过USART中断方式调试了ESP8266 WIFI模块。这一过程不仅加深了我们对ESP8266模块及STM32单片机USART通信的理解,进而实现更复杂的物联网应用功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot-读取配置文件方式

前言 Spring Boot提供了多种灵活的方式来读取配置文件&#xff0c;以适应不同的开发和部署需求&#xff0c;SpringBoot启动的时候&#xff0c;读取配置文件的时候&#xff0c;首先获取的是file:/config/文件下的配置文件&#xff0c;也就是项目下config文件里面的配置文件&…

jmeter 响应乱码

Jmeter在做接口测试的时候的&#xff0c;如果接口响应的内容中有中文&#xff0c;jmeter的响应内容很可能显示乱码&#xff0c;为了规避这种出现乱码的问题&#xff0c;就要对jmeter的响应结果进行编码处理。 打开jmeter进行接口、压力、性能等测试&#xff0c;出现以下乱码问…

等保需要的设备部署vs网络安全域划分原则

等保需要的安全设备和部署 技术要点–等保2级 技术要点–等保3级 安全产品/服务全景图 选型产品说明 安全区域边界配置 资产探测及漏洞检测配置 网络安全域划分原则 网络安全域 定义 网络安全域是一种网络划分方式&#xff0c;将具有相同安全需求、访问控制、相同信任级别、…

【MySQL 14】用户管理

文章目录 &#x1f308; 一、用户管理⭐ 1. 用户信息⭐ 2. 创建用户⭐ 3. 修改密码⭐ 4. 删除用户 &#x1f308;二、数据库的权限⭐ 1. 权限列表⭐ 2. 查看权限⭐ 3. 授予权限⭐ 4. 回收权限 &#x1f308; 一、用户管理 MySQL 也会区分普通用户和超级用户。如果只是访问某一…

【云原生系列之SkyWalking的部署】

1、分布式链路追踪 1.1概念 在较大的web集群和微服务环境中&#xff0c;客户端的一次请求需要经过不同的模块&#xff0c;多个不同中间件&#xff0c;多个不同机器一起相互协作才能处理完成客户端的请求&#xff0c;而在这一系列的请求过程之中,处理流程可能是串行执行,也可能…

【微信小程序】全局数据共享 - MobX

1. 什么是全局数据共享 2. 小程序中的全局数据共享方案 3.Mobx的使用 1.npm init -y(根据实际情况选择) 在小程序项目中&#xff0c;可以通过 npm 的方式引入 MobX 。 如果你还没有在小程序中使用过 npm &#xff0c;那先在小程序目录中执行命令&#xff1a; npm init -y2. …

19.神经网络 - 线性层及其他层介绍

神经网络 - 线性层及其他层介绍 1.批标准化层–归一化层&#xff08;不难&#xff0c;自学看官方文档&#xff09; Normalization Layers torch.nn — PyTorch 1.10 documentation BatchNorm2d — PyTorch 1.10 documentation 对输入采用Batch Normalization&#xff0c;可…

[数据集][目标检测]光伏发电板红外图像鸟粪检测数据集VOC+YOLO格式173张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;173 标注数量(xml文件个数)&#xff1a;173 标注数量(txt文件个数)&#xff1a;173 标注类别…

sentinel安装

Releases alibaba/Sentinel GitHub java -jar sentinel-dashboard-1.8.8.jar 默认启动端口是8080 修改端口启动 java -jar sentinel-dashboard-1.8.8.jar --server.port8888 localhost:配置的端口 账密都是sentinel

本地部署Xinference实现智能体推理工作流(一)

提示&#xff1a;没有安装Docker的需要先提前安装好Docker 第一篇章 使用AutoDL平台快速部署xinference 备注&#xff1a;若使用AutoDL平台&#xff0c;以下过程使用无卡模型开机即可(省钱) 1. 下载Dify源码 Github下载Dify:https://github.com/langgenius/dify 2. 快速启动…

通过观测云 eBPF Tracing 实现无埋点的全链路追踪

前言 随着微服务架构的普及和系统复杂度的增加&#xff0c;对应用程序的可观测性要求也越来越高。传统的监控方法通常需要在应用程序中添加代码来记录和追踪重要信息&#xff0c;这种方法可能会增加系统的负担&#xff0c;并且在复杂系统中维护难度较大。 eBPF&#xff08;Ex…

告别PDF格式困扰,2024年PDF转换器推荐

PDF现在已经逐渐成为了文件传输的主流格式了&#xff0c;它有保存文件页面版式的优点&#xff0c;但是这个格式编辑对大部分人来说还是不那么方便&#xff0c;日常我们还是习惯将它们转换成我们常见的 文本格式来操作。今天我分享一下可以实现PDF格式转换的pdf转换器有哪些吧。…

SX_c语言字符串赋值 “multiple definition of .. first defined here”问题_21

字符串赋值问题&#xff1a; #include <stdio.h> #include <string.h>char* my_string_cat(int position, int slot, char* content){char* gnsst NULL;static char retvalue[50];memset(retvalue, \0, sizeof(retvalue));if(position 0){//头部if(slot 0){//卡…

【视频讲解】SMOTEBoost、RBBoost和RUSBoost不平衡数据集的集成分类酵母数据集、治癌候选药物|数据分享...

全文链接&#xff1a;https://tecdat.cn/?p37502 分析师&#xff1a;Zilin Wu 在当今的大数据时代&#xff0c;科研和实际应用中常常面临着海量数据的处理挑战。在本项目中&#xff0c;我们拥有上万条数据&#xff0c;这既是宝贵的资源&#xff0c;也带来了诸多难题。一方面&a…

【递归回溯之floodfill算法专题练习】

1. 图像渲染 class Solution {int dx[4] {0, 0, -1, 1};int dy[4] {1, -1, 0, 0};int m, n;int oldcolor; public:vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {oldcolor image[sr][sc]; // 保存原…

MySQL数据库MVCC机制底层原理详解

mvcc机制即多版本并发控制 当在事务中使用了写操作&#xff08;增删改&#xff09;语句时会给当前事务生成一个事务id&#xff0c;事务id是递增的 同时&#xff0c;对于被修改的行的数据会创建一个数据版本 &#xff0c;这个数据版本除了包含原有的字段还会包含一个事务id和一…

Linux驱动开发—创建总线,创建属性文件

文章目录 1.什么是BUS&#xff1f;1.1总线的主要概念1.2总线的操作1.3总线的实现 2.创建总线关键结构体解析2.1注册总线到系统2.2 struct bus_type *bus 解析 3.实验结果分析1. devices 目录2. drivers 目录3. drivers_autoprobe 文件4. drivers_probe 文件5. uevent 文件 4.在…

【力扣】划分为k个相等的子集

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 给定一个整数数组 …

【qt】锁

线程安全问题. 多线程程序太复杂了. 加锁 把多个线程要访问的公共资源&#xff0c;通过锁保护起来.>把并发执行变成串行执行. Linux mutex 互斥量. C11引入std::mutex Qt 同样也提供了对应的锁&#xff0c;来针对系统提供的锁进行封装.QMutex 多个线程进行加锁的对象&…

【生日视频制作】室内告白表白祝福布置霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板】

室内告白表白祝福布置霓虹灯生日视频制作教程AE模板改字生成器 怎么如何做的【生日视频制作】室内告白表白祝福布置霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频