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 使用说明相关推荐

  1. 苹果手机IAP2协议Lightning转串口uart使用说明

    这个是之前做的一个demo板子,利用IAP2协议,实现app和外设的USB数据传输. Lightning转uart使用说明 功能简介 此功能板通过IAP2协议实现了ios外部配件与app的双向数据通讯 ...

  2. 蓝牙BLE之DA1469x的应用

    文章目录 0 DA1469x系列资源简览 1 低功耗管理 1.1 进入休眠与退出休眠的总概览 1.2 FreeRTOS低功耗管理分析 1.2.1 Tickless 具体实现 1.2.2 空闲任务具体实 ...

  3. Esp8266 进阶之路25【高级篇】深聊下esp8266的串口 Uart 通讯中断编程,为您准备好了 NONOS 版本 和 RTOS 系统的串口驱动文件。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  4. 【ESP32_8266_WiFi (十四)】ESP8266多任务处理 – Ticker库使用说明

    文章目录 ESP8266多任务处理 – Ticker库使用说明 1 Ticker库基本操作 2 停止定时执行函数 3 向定时调用函数传递参数 4 利用多个Ticker对象让ESP8266处理多任务 5 ...

  5. 【ESP32_8266_WiFi (十三)】ESP8266自动配网 – WiFiManager库使用说明

    文章目录 ESP8266自动配网 – WiFiManager库使用说明 1 WiFiManager库使用说明 1.1 WiFi配置流程 1.2 WiFi配置示例程序 1.2.1 预备程序 – 清理ES ...

  6. ESP8266 WIFI 模块使用说明

    ESP8266是ai-thinker公司推出的一款无线WIFI模块,可以通过配置,和单片机上的串口进行通信,利用WIFI传输数据. 1.AT指令简介 同许多通信模块一样,我们需要对WIFI模块利用AT ...

  7. Esp8266进阶之路11 企业者的福音之8266接入阿里智能,点亮一盏LED灯,期待天猫精灵语音控制的不约而至!

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  8. 基于STM32与ESP8266的太空人WiFi天气时钟(代码开源)

    前言:本文为手把手教学ESP8266著名开源项目--太空人WiFi天气时钟,不同的是本次项目采用的是STM32作为MCU.两者开发过程中有因为各自芯片的特点(时钟频率,内存大小等),导致开发程序大不相 ...

  9. ESP8266学习笔记(1)——搭建环境、编译烧写(NONOS SDK)

    RTOS SDK环境搭建参看 ESP8266学习笔记(17)--搭建环境.编译烧写(RTOS SDK) 一.搭建环境 1.1 ESP8266 SDK 入门指南 官网下载:https://www.esp ...

最新文章

  1. 释放变量所指向的内存_C++动态内存分配(学习笔记:第6章 15)
  2. Java多线程复习:2(线程的创建和使用)
  3. element-ui 搜索框组件:监听input键盘事件 - 代码篇
  4. Python基础-ConfigParser模块
  5. AnalyserNode
  6. FOSRestBundle功能包:概述
  7. Nginx学习笔记:基础
  8. 故事到此为止了,谢谢遇见,让我成长。
  9. ai里怎么做阴影效果_使用ai制作出文字阴影效果的详细方法
  10. fydeos 安装linux程序,FydeOS安装教程-电脑系统安装手册
  11. python 模拟键盘输入组合键_Python Selenium keys快捷键和键盘操作|send_keys输入按键,SHIFT,CTRL+组合键...
  12. conda创建虚拟环境后文件夹中只有conda-meta文件夹,无法将环境添加到pycharm中
  13. MongoDB 3.2.7 for rhel6.4 副本集-分片集群部署
  14. 平板系统win10 Android,Pad变PC:将Win10装入Android平板
  15. python0为真还是假_python 中对象真和假的概念是什么
  16. 05.局域网_NAT
  17. 无人机与视觉结合项目
  18. 数字图像的一阶微分和二阶微分
  19. 财务自由之路——我的投资史
  20. Oracle cursor 游标详解

热门文章

  1. 外企, 私企和国企, 不同的软件开发流程感受
  2. python3.6安装库_python3.6怎么安装库
  3. 支付宝即时到帐功能接入--解决sign和mysign不等的坑爹旅程
  4. 招聘|蔚来汽车招感知算法工程师(Intern)
  5. 原生js实现歌词滚动以及卡拉OK效果
  6. 调用开放接口(多个系统间的数据传输)
  7. 某商场为了促销,采用了打折的优惠活动。每位顾客一次购物达到500元以上,给予95%的优惠;达到1000元以上,给予90%的优惠;结果保留两位小数。
  8. uniapp用户设置字体大小
  9. 小学计算机设备管理 维护制度,信息化各种设备使用、管理及维护制度
  10. 向量距离、随机变量相关性与概率分布的差异度量