ESP8266 UART学习

    xiaoxiao2026-03-18  10

    前言

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

    一、UART引脚介绍

    串口名称引脚功能对应引脚UART0TXDGPIO_Pin_26-RXDGPIO_Pin_25-CTSGPIO_Pin_12-RTSGPIO_Pin_13UART1TXDGPIO_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_brUART0的波特率-uart1_brUART1的波特率参数枚举BIT_RATE_96009600bps-BIT_RATE_1920019200bps-BIT_RATE_3840038400bps-BIT_RATE_5760057600bps-BIT_RATE_7480074800bps-BIT_RATE_115200115200bps-BIT_RATE_230400230400bps-BIT_RATE_460800460800bps-BIT_RATE_921600921600bps示例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端口(前面有介绍)-lenUART的停止位参数枚举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参考

    转载请注明原文地址: https://ju.6miu.com/read-1308072.html
    最新回复(0)