ESP8266 UART 使用说明
1. 配置属性参数
UART0:U0TXD: pin26(U0TXD)U0RXD: pin25(U0RXD)U0CTS: pin12(MTCK)U0RTS: pin13(MTDO)
UART1:U1TXD: pin14(GPIO2)
发送FIFO的基本工作过程:只要有数据填充到发送 FIFO 里,就会立即启动发送过程。由于发送本身相对缓慢的过程,因此在发送的同
时其他需要发送的数据还可以继续填充到发送FIFO里。当发送 FIFO 被填满时就不能再继续填充了,否则会造成
数据丢失,此时只能等待。发送FIFO会按照填入数据的先后顺序把数据一个个发送出去,直到发送 FIFO 全空时
为止。已发送完毕的数据会被自动清除,在发送 FIFO 里同时会多出一个空位。
接收FIFO的基本工作过程:当硬件逻辑接收到数据时,就会往接收 FIFO 里填充接收到的数据。程序应当及时取走这些数据,数据被取
走也是在接收 FIFO 里被自动删除的过程,因此在接收 FIFO 里同时会多出一个空位。如果在接收 FIFO 里的数
据未被及时取走而造成接收 FIFO 已满,则以后再接收到数据时因无空位可以填充而造成数据丢失。
应用场景:
USART0 作为数据通信接口,UART1作为debug信息的打印。
UART0 默认情况会在上电booting期间输出一些打印,此器件打印内容的波特率与所用的外部晶振频率有关。使用
40MHz晶振时,该段打印波特率为115200。使用26MHz晶振时,该段打印波特率为74880。
2. 配置属性参数
UART0 和 UART1 各有一个长度为 128Byte 的硬件 FIFO,读写 FIFO 都在同一个地址操作。
两个 UART 模块的硬件寄存器相同,通过 UART0/UART1 的宏定义来区分。
3. 参数配置
UART属性参数都在UART_CONF0定义的寄存器中,可以在uart_register.h中找到。修改该寄存器下的不同对应
位,可以配置UART属性。3.1 波特率ESP8266 的串口波特率范围从300到115200*40都可以支持。接口:void UART_SetBaudrate(uint8 uart_no, uint32 baud_rate);3.2 校验位#define UART_PARITY_EN (BIT(1)) 校验使能:1:enable; 0:diable#define UART_PARITY (BIT(0)) 校验类型设置 1:奇校验;0:偶校验接口:void UART_SetParity(uint8 uart_no, UartParityMode Parity_mode);3.3 数据位#define UART_BIT_NUM 0x00000003 //数据位长度占用两个bit设置这两个bit可以配置数据长度0:5bit; 1:6bit;2:7bit;3:8bit#define UART_BIT_NUM_S 2 //寄存器偏移为2(第2bit开始)接口:void UART_SetWordLength(uint8 uart_no, UartBitsNum4Char len);3.4 停止位#define UART_STOP_BIT_NUM 0x00000003 //数据位长度占用两个bit设置这两个bit可以配置停止位长度 1:1bit;2:1.5bit;3:2bit#define UART_STOP_BIT_NUM_S 4 // 寄存器偏移为4(第4bit开始)接口: void UART_SetStopBits(uint8 uart_no, UartStopBitsNum bit_num);3.5 反相UART 各个信号输入与输出信号,可在内部进行反向配置#define UART_DTR_INV (BIT(24))#define UART_RTS_INV (BIT(23))#define UART_TXD_INV (BIT(22))#define UART_DSR_INV (BIT(21))#define UART_CTS_INV (BIT(20))#define UART_RXD_INV (BIT(19))将对应寄存器置位,可以将对应信号线反向输出/输入。接口:void UART_SetLineInverse(uint8 uart_no, UART_LineLevelInverse inverse_mask);3.6 切换打印函数输出端口默认情况下,系统打印函数 os_printf 从 uart0 口输出内容,通过以下接口可以设置从 uart0 或者
uart1 口输出打印。void UART_SetPrintPort(uint8 uartz_no);3.7 读取 tx/rx 队列内当前剩余的字节数Tx fifo length:(READ_PERI_REG(UART_STATUS(uart_no))>>UART_TXFIFO_CNT_S) & UART_TXFIFO_CNT;接口:TX_FIFO_LEN(uart_no);Rx fifo length:(READ_PERI_REG(UART_STATUS(UART0))>>UART_RXDFIFO_CNT_S) & UART_RXFIFO_CNT;接口:RF_FIFO_LEN(uart_no)3.8 回环操作(loop-back)在 UART_CONF0 寄存器中,配置后,uart tx/rx 在内部短接。#define UART_LOOPBACK (BIT(14)) // 回环使能位, 1:enable; 0:diableENABLE:SET_PERI_REG_MASK(UART_CONF0(UART0), UART_LOOPBACK);接口: ENABLE_LOOP_BACK(uart_no)DIABLE: CLEAR_PERI_REG_MASK(UART_CONF0(UART0), UART_LOOPBACK);接口:DIABLE_LOOP_BACK(uart_no)3.9 线中止信号要产生线上中止信号,可以将UART_TXD_BRK置1,这样在uart发送队列发送完成后,输出一个break信号
(tx输出低电平),需要停止输出将该位置0.#define UART_TXD_BRK (BIT(8)) // 线中止信号,1:enable; 0:disable3.10 流量控制配置过程:a. 先配置uart0的pin12,pin13脚复用为U0CTS,和U0RTS功能。#define FUNC_U0RTS 4#define FUNC_U0CTS 4PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_U0RTS);PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_U0CTS);b. 接收方向的硬件流控可以配置阀值,当 rx fifo 中的长度大于所设的阀值, U0RTS脚就会拉高,阻
止对方发送。配置接收流控制阀:阀值相关的配置一般都在UART_CONF1定义的寄存器中#define UART_RX_FLOW_EN (BIT(23)) // 第23bit使能接收流控: 0:disable; 1:enable#define UART_RX_FLOW_THRHD 0x0000007F // 门限值,占用7bit,范围0~127#define UART_RX_FLOW_THRHD_S 16 // 寄存器偏移为16 (第16bit开始)c. 发送方向的流控只需配置使能,该寄存器在UART_CONF0中:#define UART_TX_FLOW_EN (BIT(15)) // 使能发送流控: 0:diable; 1:enabled. 接口void UART_SetFlowCtrl(uint8 uart_no, UART_HwFlowCtrl flow_ctrl, uint8 rx_thresh);e. demo 板硬件连接:需要将 J68 (U0CTS) 与 J63 (U0RTS) 的跳线接上。3.11 其他接口TX_FIFO_LEN(uart_no) // 宏定义,发送队列当前长度RX_FIFO-len(uart_no) // 宏定义,接收队列当前长度
4. 配置中断
由于所有中断事件在发送到中断控制器之前会一起进行”或运算“操作,所以任意时刻 UART 只能向中断产生一个
中断请求。通过查询中断状态函数 UART_INT_ST(uart_no),软件可以在同一个中断服务函数里处理多个中断事件
(多个并列的if语句)。
4.1 中断寄存器Uart 的中断寄存器有:UART_INT_RAW 中断原始状态寄存器UART_INT_ENA 中断使能寄存器:表示当前使能的uart中断UART_INT_ST 中断状态寄存器:表示当前有效的中断状态UART_INT_CLR 清除中断寄存器:置对应位来清除中断状态寄存器4.2 接口打开中断使能:UART_ENABLE_INTR_MASK(uart_no, ena_mask);关闭中断使能:UART_DISABLE_INTR_MASK(uart_no, disable_mask);清除中断状态:UART_CLR_INTR_STATUS_MASK(uart_no, clr_mask);获取中断状态:UART_GET_INTR_STATUS(uart_no);
4.3 中断类型1. 接收full中断中断状态位:UART_RXFIFO_FULL_INT_ST定义:当配置阀值并使能中断后,当 rx fifo 中的数据长度大于阀值后,触发该中断应用:比较多用于处理uart接收的数据,配合流量控制,直接处理或者post出消息,或者转存入buffer。
比如,配置阀值为100,并使能full中断,当串口收到100字节后,会触发full中断。配置阀值:full中断阀值(或门限值)在UART_CONF1寄存器#define UART_RXFIFO_FULL_THRHD 0x0000007F // 门限值mask,7bit长,范围0-127#define UART_RXFIFO_FULL_THRHD_S 0 // 寄存器偏移为0 (第0bit开始)设置中断使能:在 UART_INT_ENA 寄存器#define UART_RXFIFO_FULL_INT_ENA (BIT(0)) // full中断使能位,1:enable; 0:disable清除中断状态:对于full中断比较特殊,需要先将接收fifo中的数据全部读空,然后写清楚中断状态寄存器。否则推出后
中断状态位还是会被置上。2. 接收溢出中断中断状态位:UART_RXFIFO_OVF_INT_ST定义:当使能接收溢出中断后,当接收队列的长度大于队列总长度(128bytes)时,会触发该中断信号。触发场景:一般只在没有设置流控的情况下,因为有流量控制时候不会发生溢出。区别于full中断,full
中断是人为设置阀值并且数据不会丢失。溢出中断触发则一般都会存在数据丢失。可用于程序调试与验错。设置中断使能:在UART_INT_ENA寄存器#define UART_RXFIFO_OVF_INT_ENA (BIT(4)) // 溢出中断使能位:1:enable; 0:disable清除中断状态:读取队列值,使队列长度小于128,然后置清除中断状态寄存器即可。3. 接收超时中断tout中断状态位:UART_RXFIFO_TOUT_INT_ST定义:当配置tout阀值并使能中断后,当uart开始接收数据后,停止传输的时间超过所设定的门限值,就
会触发tout中断。应用: 较多用于处理串口指令或者数据,直接处理数据或者post出消息,或者转存入buffer。配置阀值与功能使能:tout中断阀值(或门限值)在UART_CONF1寄存器中。Tout阀值的单位为8个uart数据比特的时间(近似一个byte)#define UART_RX_TOUT_EN (BIT(31)) // 超时功能使能位:1:enable;0:disable#define UART_RX_TOUT_THRHD 0x0000007F // 超时阀值配置位,共7位,范围0-127#define UART_RX_TOUT_THRHD_S 24 // 寄存器偏移为24 (第24bit开始)设置中断使能:在UART_INT_ENA寄存器#define UART_RXFIFO_TOUT_INT_ENA (BIT(8)) tout // 中断使能位,1:enable;0:disable 清除中断状态:与full中断类似,tout中断也需要先将接收fifo中的数据全部读空,然后写清除中断状态寄存器,否则退出后中断状态还是会被置上。
ESP8266 UART 使用说明相关推荐
- 苹果手机IAP2协议Lightning转串口uart使用说明
这个是之前做的一个demo板子,利用IAP2协议,实现app和外设的USB数据传输. Lightning转uart使用说明 功能简介 此功能板通过IAP2协议实现了ios外部配件与app的双向数据通讯 ...
- 蓝牙BLE之DA1469x的应用
文章目录 0 DA1469x系列资源简览 1 低功耗管理 1.1 进入休眠与退出休眠的总概览 1.2 FreeRTOS低功耗管理分析 1.2.1 Tickless 具体实现 1.2.2 空闲任务具体实 ...
- Esp8266 进阶之路25【高级篇】深聊下esp8266的串口 Uart 通讯中断编程,为您准备好了 NONOS 版本 和 RTOS 系统的串口驱动文件。(附带Demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...
- 【ESP32_8266_WiFi (十四)】ESP8266多任务处理 – Ticker库使用说明
文章目录 ESP8266多任务处理 – Ticker库使用说明 1 Ticker库基本操作 2 停止定时执行函数 3 向定时调用函数传递参数 4 利用多个Ticker对象让ESP8266处理多任务 5 ...
- 【ESP32_8266_WiFi (十三)】ESP8266自动配网 – WiFiManager库使用说明
文章目录 ESP8266自动配网 – WiFiManager库使用说明 1 WiFiManager库使用说明 1.1 WiFi配置流程 1.2 WiFi配置示例程序 1.2.1 预备程序 – 清理ES ...
- ESP8266 WIFI 模块使用说明
ESP8266是ai-thinker公司推出的一款无线WIFI模块,可以通过配置,和单片机上的串口进行通信,利用WIFI传输数据. 1.AT指令简介 同许多通信模块一样,我们需要对WIFI模块利用AT ...
- Esp8266进阶之路11 企业者的福音之8266接入阿里智能,点亮一盏LED灯,期待天猫精灵语音控制的不约而至!
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...
- 基于STM32与ESP8266的太空人WiFi天气时钟(代码开源)
前言:本文为手把手教学ESP8266著名开源项目--太空人WiFi天气时钟,不同的是本次项目采用的是STM32作为MCU.两者开发过程中有因为各自芯片的特点(时钟频率,内存大小等),导致开发程序大不相 ...
- ESP8266学习笔记(1)——搭建环境、编译烧写(NONOS SDK)
RTOS SDK环境搭建参看 ESP8266学习笔记(17)--搭建环境.编译烧写(RTOS SDK) 一.搭建环境 1.1 ESP8266 SDK 入门指南 官网下载:https://www.esp ...
最新文章
- 释放变量所指向的内存_C++动态内存分配(学习笔记:第6章 15)
- Java多线程复习:2(线程的创建和使用)
- element-ui 搜索框组件:监听input键盘事件 - 代码篇
- Python基础-ConfigParser模块
- AnalyserNode
- FOSRestBundle功能包:概述
- Nginx学习笔记:基础
- 故事到此为止了,谢谢遇见,让我成长。
- ai里怎么做阴影效果_使用ai制作出文字阴影效果的详细方法
- fydeos 安装linux程序,FydeOS安装教程-电脑系统安装手册
- python 模拟键盘输入组合键_Python Selenium keys快捷键和键盘操作|send_keys输入按键,SHIFT,CTRL+组合键...
- conda创建虚拟环境后文件夹中只有conda-meta文件夹,无法将环境添加到pycharm中
- MongoDB 3.2.7 for rhel6.4 副本集-分片集群部署
- 平板系统win10 Android,Pad变PC:将Win10装入Android平板
- python0为真还是假_python 中对象真和假的概念是什么
- 05.局域网_NAT
- 无人机与视觉结合项目
- 数字图像的一阶微分和二阶微分
- 财务自由之路——我的投资史
- Oracle cursor 游标详解
热门文章
- 外企, 私企和国企, 不同的软件开发流程感受
- python3.6安装库_python3.6怎么安装库
- 支付宝即时到帐功能接入--解决sign和mysign不等的坑爹旅程
- 招聘|蔚来汽车招感知算法工程师(Intern)
- 原生js实现歌词滚动以及卡拉OK效果
- 调用开放接口(多个系统间的数据传输)
- 某商场为了促销,采用了打折的优惠活动。每位顾客一次购物达到500元以上,给予95%的优惠;达到1000元以上,给予90%的优惠;结果保留两位小数。
- uniapp用户设置字体大小
- 小学计算机设备管理 维护制度,信息化各种设备使用、管理及维护制度
- 向量距离、随机变量相关性与概率分布的差异度量