ESP8266 UART學習

前言

串口是一個非常強大的外設,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參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章