ESP8266 UART学习

原创 2016年08月16日 11:10:51

前言

串口是一个非常强大的外设,ESP8266EX有两个UART分别是UART0和UART1,其中UART0可以正常通行,而UART1只支持数据发送功能。需要注意的是UART0在上电时会输出一些打印信息,如果想要禁用此功能需要在ESP8266上电期间将U0TXD、U0RXD与U0RTS、U0CTS交换(相关资料可查阅ESP8266官方手册)。

一、UART引脚介绍

串口名称 引脚功能 对应引脚
UART0 TXD GPIO_Pin_26
- RXD GPIO_Pin_25
- CTS GPIO_Pin_12
- RTS GPIO_Pin_13
UART1 TXD GPIO_Pin_14

二、UART介绍

ESP8266的UART0和UART1各有一个长度为128Byte的FIFO,读写FIFO时在同一个地址操作。

发送FIFO的基本工作过程:
只要有数据填充到发送FIFO里,就会立即启动发送过程。甶于发送本身是个相对缓慢的过程,因此在发送的同时其它需要发送的数据还可以继续填充到发送FIFO里。当发送FIFO被填满时就不能再继续填充了,否则会造成数据丢失,此时只能等待。发送FIFO会按照填入数据的先后顺序把数据一个个发送出去,直到发送FIFO全空时为止。已发送完毕的数据会被自动清除,在发送FIFO里同时会多出一个空位。

接收FIFO的基本工作过程:
当硬件逻辑接收到数据时,就会往接收FIFO里填充接收到的数据。程序应当及时取走这些数据,数据被取走也是在接收FIFO里被自动删除的过程,因此在接收FIFO里同时会多出一个空位。如果在接收FIFO里的数据未被及时取走而造成接收FIFO已满,则以后再接收到数据时因无空位可以填充而造成数据丢失。

2.1 UART初始化操作

功能介绍 双UART模式,初始化两个UART的波特率 -
函数原型 void uart_init(UartBautRate uart0_br,UartBautRate uart1_br); -
参数介绍 uart0_br UART0的波特率
- uart1_br UART1的波特率
参数枚举 BIT_RATE_9600 9600bps
- BIT_RATE_19200 19200bps
- BIT_RATE_38400 38400bps
- BIT_RATE_57600 57600bps
- BIT_RATE_74800 74800bps
- BIT_RATE_115200 115200bps
- BIT_RATE_230400 230400bps
- BIT_RATE_460800 460800bps
- BIT_RATE_921600 921600bps
示例 uart_init(BIT_RATE_9600, BIT_RATE_9600); 配置UART0的波特率为9600bps,UART1的波特率为9600bps

2.2 UART0发送字符串函数

功能介绍 UART0发送字符串函数 -
函数原型 void uart0_sendStr(const char *str); -
参数介绍 *str 发送的字符串
示例 uart0_sendStr(“Hello World! \r\n”); UART0发送字符串

2.3 UART0发送数据

功能介绍 UART0发送数据 -
函数原型 void uart0_tx_buffer(uint8 *buf, uint16 len); -
参数介绍 *buf 发送的数据缓冲区
- len 发送的数据长度

2.4 UART接收中断使能函数

功能介绍 UART接收中断使能函数 -
函数原型 void uart_rx_intr_enable(uint8 uart_no); -
参数介绍 uart_no 使能接收中断的UART端口
参数枚举 uart0 -
- uart1 -

2.5 UART接收中断禁用函数

功能介绍 UART接收中断禁用函数 -
函数原型 void uart_rx_intr_disable(uint8 uart_no); -
参数介绍 uart_no 禁用能接收中断的UART端口(前面有介绍)

2.6 UART的参数配置

2.6.1 UART波特率配置

功能介绍 设置UART的波特率 -
函数原型 void UART_SetBaudrate(uint8 uart_no,uint32 baud_rate); -
参数介绍 uart_no 需要设置的UART端口(前面有介绍)
- baud_rate 设置的波特率(波特率可设置的范围为300bps-4608Kbps))

2.6.2 UART校验模式配置

功能介绍 设置UART的校验模式 -
函数原型 void UART_SetParity(uint8 uart_no, UartParityMode Parity_mode); -
参数介绍 uart_no 需要设置的UART端口(前面有介绍)
- Parity_mode 设置UART的校验模式
参数枚举 NONE_BITS(0x02) 无校验
- ODD_BITS(0x01) 奇校验
- EVEN_BITS(0x00) 偶校验

2.6.3 UART数据字长设置

功能介绍 UART数据字长设置 -
函数原型 void UART_SetWordLength(uint8 uart_no, UartBitsNum4Char len); -
参数介绍 uart_no 需要设置的UART端口(前面有介绍)
- len 设置UART的数据字长
参数枚举 FIVE_BITS(0x00) 5位字长
- SIX_BITS(0x01) 6位字长
- SEVEN_BITS(0x02) 7位字长
- EIGHT_BITS(0x03) 8位字长

2.6.4 UART停止位设置

功能介绍 UART停止位设置 -
函数原型 void UART_SetStopBits(uint8 uart_no, UartStopBitsNum bit_num); -
参数介绍 uart_no 需要设置的UART端口(前面有介绍)
- len UART的停止位
参数枚举 ONE_STOP_BIT(0x01) 1个停止位
- ONE_HALF_STOP_BIT(0x02) 1.5个停止位
- TWO_STOP_BIT(0x03) 2个停止位

2.6.4 切换系统默认打印端口

功能介绍 切换系统默认打印端口 -
函数原型 void UART_SetPrintPort(uint8 uart_no); -
参数介绍 uart_no 需要切换的UART端口(前面有介绍)

三、示例

#include "ets_sys.h"
#include "osapi.h"
#include "user_interface.h"
#include "uart.h"

static os_timer_t os_timer;

void ESP8266_UART0_Init( void )
{
    /** 初始化串口 设置串口的波特率为9600 */
    uart_init( BIT_RATE_9600, BIT_RATE_9600 );

    /** 配置串口每500ms发送一次数据 */
    os_timer_disarm( &os_timer );
    os_timer_setfn( &os_timer, (os_timer_func_t *) ( uart0_sendStr ),
                    "Hello World!\r\n" );
    os_timer_arm( &os_timer, 500, 1 );
}

void user_init( void )
{
    ESP8266_UART0_Init();
}

参考资料

[1]. ESP8266技术参考
[2]. ESP8266Non-OS SDK API参考

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

esp8266-SDK的串口发送和中断接收

其实用esp8266编写串口程序非常简单,因为它都给我们写好了,只要调用 uart_init(115200,115200);这个函数就可以。 1、发送 调用uart_init(115200...

Uart-WiFi模块ESP8266把玩记

Uart-WiFi模块ESP8266把玩记   由于只是一个模块,并不是完整的开发板,所以需要自己连接外围电路。试用的过程中遇到了很多麻烦,这里统统记录。   1.确认硬件版本 由于ESP8266版本...
  • kangear
  • kangear
  • 2014年10月23日 10:41
  • 106796

ESP8266--学习笔记(八)串口源码分析

我一直对ESP8266的串口传输的机制很好奇,没办法只得好好分析源码了。  ESP8266的中断系统是必须要了解的。我分析的源代码是分配有任务的,所以在任务函数中是无法看到中断的。我的分析如下: 代...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

ESP8266 WiFi串口模块的学习与使用(一)

ESP8266 wifi模块的学习与实验

【ESP8266】NONOS SDK开发,串口发送、接收与中断

ESP8266感觉要成现在物联网的黑马了,集成WiFi功能、能编程,还便宜,确实挺6的。 就是能提供的资料太少,感觉官网上的远远不够用,这个串口收发与中断折腾了我是在太久,在这里小的就分享一下自己的经...

ESP8266--学习笔记(七)UART转发

因为需要使用串口发送数据,而又决定自己写固件,所以就需要完成一项功能: ESP接收串口传来的数据,并判断 将接收的串口数据转发出去  ESP8266给串口发送数据很容易uart_sendString...

ESP8266乱码错误分析、8266综合教程

第一种方式:通过USB转TTL模块来实验 网上已经有很多这方面的教程,我在这贴出链接供大家参考: ESP8266新手入门调试指导(补全) 关于接线方式这里再贴出一种,如下图所示,如果不行,试着把GP...
  • xxxtai
  • xxxtai
  • 2016年09月08日 09:28
  • 5199

关于ESP8266使用总结

2016/1/20 首先,该模块使用了AT指令进行操作,我们要做的,就是将需要的AT指令,以字符串的形式发给模块,即可实现相应的功能。 1.      wifi模块ESP8266的默认波特率是11...

ESP8266模块使用完整教程

在我入门ESP8266小黄板的过程中,过程是艰难的,因为网络上的资料太多太乱,官网上的资料不算太完备,而在技术交流群里面的就更乱了,所以想按自己学习所总结到的经验来分享给大家。资源链接:http://...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ESP8266 UART学习
举报原因:
原因补充:

(最多只允许输入30个字)