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

2024-08-29 06:52

本文主要是介绍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通信的理解,进而实现更复杂的物联网应用功能。

这篇关于STM32F103与ESP8266 WIFI模块的USART中断调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117153

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类