ESP8266学习【4】——uart打印输出(Hello World)

一、给工程模板添加文件

1、按照文章生成工程模板:ESP8266学习【2】——工程项目编译及工程模板创建

2、添加 uart 驱动文件,代码结构如下:

3、在user_main.c 的 user_init 函数添加以下内容:

void ICACHE_FLASH_ATTR
user_init(void)
{
	//uart_init(115200,115200);	//初始化波特率
	os_printf("\r\n---------------------------------\r\n");
	os_printf("SDK version:%s\n",system_get_sdk_version());		// 串口打印SDK版本
	uart0_sendStr("\r\nHello World\r\n");
	os_printf("\r\n---------------------------------\r\n");
}

其中,uart_init(115200,115200) 可以修改 uart0 和 uart1 的波特率 。

添加的头文件:

#include "ets_sys.h"
#include "osapi.h"			//os_xxx接口
#include "user_interface.h"	//系统接口
#include "driver/uart.h"

相关API函数: 

 

二、编译与烧录

1、先 Clean Project 清理项目,再 Build Project 编译项目,编译成功:

2、按照文章烧录固件:ESP8266学习【3】——固件烧录及相关参数说明

 

三、输出测试

1、打开串口助手,波特率74880

2、复位模块

3、看到输出hello world 即测试成功。

 

输出参数说明:

ets Jan 8 2013,rst cause:2, boot mode:(3,6)

rst cause:

1:电源重启

2:外部复位

4:硬件看门狗复位

boot mode:

第一个参数代表当前的 boot 模式;第二个参数与 SDIO 相关。

运行模式正常log输出应该是 boot mode:(3,n)。

Boot 模式由 strapping 管脚值 [GPIO15,GPIO0,GPIO2] 共同决定。如下表所示:

Strapping 管脚值[GPIO15,GPIO0,GPIO2]Boot 模式
0[0,0,0]Remapping
1[0,0,1]UART Boot
2[0,1,0]Jump Boot
3[0,1,1]Flash Boot
4[1,0,0]SDIO LowSpeed V2 IO
5[1,0,1]SDIO HighSpeed V1 IO
6[1,1,0]SDIO LowSpeed V1 IO
7[1,1,1]SDIO HighSpeed V2 IO
可以使用HAL库中的USART模块和AT指令来控制esp8266发送数据。以下是一个示例代码: ```c #include "stm32f1xx_hal.h" #include <string.h> #define ESP8266_USART USART1 #define ESP8266_USART_CLK RCC_APB2Periph_USART1 #define ESP8266_USART_BAUDRATE 115200 #define ESP8266_USART_TX_PIN GPIO_PIN_9 #define ESP8266_USART_TX_GPIO_PORT GPIOA #define ESP8266_USART_TX_GPIO_CLK RCC_APB2Periph_GPIOA #define ESP8266_USART_RX_PIN GPIO_PIN_10 #define ESP8266_USART_RX_GPIO_PORT GPIOA #define ESP8266_USART_RX_GPIO_CLK RCC_APB2Periph_GPIOA #define ESP8266_RESET_PIN GPIO_PIN_12 #define ESP8266_RESET_GPIO_PORT GPIOB #define ESP8266_RESET_GPIO_CLK RCC_APB2Periph_GPIOB UART_HandleTypeDef uart_handle; void ESP8266_USART_Init(void) { GPIO_InitTypeDef gpio_init_struct; // Enable GPIO and USART clocks RCC_APB2PeriphClockCmd(ESP8266_USART_CLK | ESP8266_USART_TX_GPIO_CLK | ESP8266_USART_RX_GPIO_CLK, ENABLE); // Configure USART pins gpio_init_struct.GPIO_Pin = ESP8266_USART_TX_PIN; gpio_init_struct.GPIO_Speed = GPIO_Speed_50MHz; gpio_init_struct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(ESP8266_USART_TX_GPIO_PORT, &gpio_init_struct); gpio_init_struct.GPIO_Pin = ESP8266_USART_RX_PIN; gpio_init_struct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(ESP8266_USART_RX_GPIO_PORT, &gpio_init_struct); // Configure RESET pin gpio_init_struct.GPIO_Pin = ESP8266_RESET_PIN; gpio_init_struct.GPIO_Speed = GPIO_Speed_50MHz; gpio_init_struct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(ESP8266_RESET_GPIO_PORT, &gpio_init_struct); // Configure USART uart_handle.Instance = ESP8266_USART; uart_handle.Init.BaudRate = ESP8266_USART_BAUDRATE; uart_handle.Init.WordLength = UART_WORDLENGTH_8B; uart_handle.Init.StopBits = UART_STOPBITS_1; uart_handle.Init.Parity = UART_PARITY_NONE; uart_handle.Init.HwFlowCtl = UART_HWCONTROL_NONE; uart_handle.Init.Mode = UART_MODE_TX_RX; HAL_UART_Init(&uart_handle); } void ESP8266_SendData(char* data) { HAL_UART_Transmit(&uart_handle, (uint8_t*)data, strlen(data), HAL_MAX_DELAY); } void ESP8266_Reset(void) { GPIO_WriteBit(ESP8266_RESET_GPIO_PORT, ESP8266_RESET_PIN, Bit_RESET); HAL_Delay(10); GPIO_WriteBit(ESP8266_RESET_GPIO_PORT, ESP8266_RESET_PIN, Bit_SET); HAL_Delay(1000); } int main(void) { HAL_Init(); ESP8266_USART_Init(); ESP8266_Reset(); ESP8266_SendData("AT+CWJAP=\"SSID\",\"Password\"\r\n"); // Replace with your SSID and password ESP8266_SendData("AT+CIPSTART=\"TCP\",\"192.168.0.1\",80\r\n"); // Replace with your server IP address ESP8266_SendData("AT+CIPSEND=12\r\n"); ESP8266_SendData("Hello World!"); ESP8266_SendData("AT+CIPCLOSE\r\n"); while(1) { } } ``` 在这个示例代码中,首先初始化了USART和RESET引脚,然后使用ESP8266_Reset函数将esp8266复位,然后使用ESP8266_SendData函数发送AT指令。你可以使用AT指令来连接WiFi热点,连接到服务器,发送数据等。发送数据时,需要先发送AT+CIPSEND指令,然后再发送数据。最后,使用AT+CIPCLOSE指令关闭连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值