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”,则表示模块已正确响应,可进行后续操作。
    AT
    
    
    OK
    
    AT+RST
    
    
    OK
    
    
     ets 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 0x79
    
    2nd boot version : 1.5
      SPI Speed      : 40MHz
      SP
    I Mode       : DIO
      SPI 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;drd
    
    Ai-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通信的理解,进而实现更复杂的物联网应用功能。

### 回答1: 实现STM32F103ESP8266的配合,可以实现一个简单的Web服务器。具体步骤如下: 首先,需要将ESP8266模块连接到STM32F103开发板上。可以使用串口或者SPI总线进行连接。连接后,需要配置ESP8266模块的工作模式,使其能够作为一个服务器。 其次,需要在STM32F103开发板上编写相应的程序。可以使用STM32CubeMX进行代码生成,选择相应的GPIO口和外设,进行配置。 然后,需要在STM32F103的代码中,进行串口通信或者SPI通信,与ESP8266模块进行数据传输。通过AT指令和ESP8266模块进行通信,可以实现WiFi的连接与配置。 接下来,需要在STM32F103的代码中,实现Web服务器的功能。可以使用STM32的内部FLASH或者SD卡等存储器,存储网页文件。通过在程序中配置相应的路由和处理函数,可以实现网页的访问与处理。 最后,需要在ESP8266模块的配置中,设置对应的IP地址和端口号,并将请求转发到STM32F103开发板上。通过解析HTTP请求,可以实现对不同网页请求的响应。 总之,通过将STM32F103ESP8266进行配合,可以实现一个简单的Web服务器。这样,就可以通过网络访问STM32F103上的资源,并实现相应的控制与交互功能。 ### 回答2: 要实现STM32F103ESP8266一起工作,搭建一个Web服务器可以按照以下步骤进行。 首先,连接STM32F103ESP8266的串口,并使用AT指令将ESP8266设置为AP模式,以便创建一个WiFi网络。 通过STM32F103USART控制器,将AT指令发送到ESP8266。使用串口通信协议进行数据传输。同时,使用GPIO控制ESP8266的复位引脚以便在需要时进行复位。 一旦ESP8266被设置为AP模式,STM32F103可以使用ESP8266创建一个TCP/IP连接。使用AT指令,可以通过发送HTTP GET请求从Web服务器上获取数据。 STM32F103还可以通过AT指令将数据发送到Web服务器。通过将数据封装在HTTP POST请求中,并将其发送到Web服务器,可以将数据发送到远程服务器。 在STM32F103上,可以使用HTTP库来解析接收到的HTTP响应。这样,可以轻松地获取响应中的数据。 最后,使用STM32F103USART控制器,将响应数据发送到串口,并通过STM32F103上的LCD显示出来。 总结起来,要实现STM32F103ESP8266一起工作,创建一个Web服务器,你需要连接STM32F103ESP8266并设置ESP8266为AP模式。使用STM32F103控制ESP8266,发送AT指令来实现HTTP GET和POST请求。以及使用HTTP库来解析响应数据,并将数据发送到STM32F103上的LCD进行显示。 ### 回答3: STM32F103ESP8266都是常见的嵌入式芯片,可以用于实现Web服务器功能。 首先,STM32F103作为主控芯片,负责控制整个系统的运行。它可以搭载一个TCP/IP协议栈,用于与ESP8266通信,并接收和处理来自ESP8266的数据。 ESP8266作为WiFi模块,可以连接到网络并通过TCP/IP协议与其他设备通信。它支持AT指令集,可以通过向其发送AT指令来控制其工作模式和网络连接。在本例中,ESP8266被配置为与STM32F103通过串口通信。 实现Web服务器功能的步骤如下: 1. 配置ESP8266的工作模式和连接网络。通过向ESP8266发送AT指令,将其设置为AP或STA模式,并将其连接到指定的WiFi网络。 2. 在STM32F103中,初始化串口和与ESP8266通信的GPIO引脚。使用串口和ESP8266进行通信,发送和接收数据。 3. STM32F103发送HTTP请求到ESP8266,使用ESP8266模块作为服务器,接收STM32F103的请求并返回相应的数据。可以使用GET或POST请求来获取或发送数据。 4. ESP8266接收到来自STM32F103的HTTP请求后,解析请求的内容,并执行相应的处理操作。可以使用ESP8266的库文件来简化HTTP请求的处理。 5. ESP8266将处理结果返回给STM32F103。根据请求的内容,可以是HTML页面、JSON数据或其他格式的响应。 6. STM32F103接收到来自ESP8266的响应后,进行相应的处理,如显示HTML页面或解析JSON数据。 通过上述步骤,可以实现STM32F103控制ESP8266并利用其作为Web服务器的功能。整个过程可以灵活调整和扩展,以满足具体需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值