UART
UART(通用異步收發傳輸器)的簡稱,在單片機和嵌入式系統中,串口(UART)一直都是非常重要的外設。雖然串口的速度並不快,但是因為它使用簡單(串口可能是兩個芯片之間傳輸數據最簡單的方式),占用軟件和硬件資源少,所以在通信、控制、數據傳輸、仿真調試等許多方面有非常廣泛應用。很多設備或者模塊甚至都會提供專用的串口接口用於通信和控制,如GPRS模塊、藍牙/WiFi透傳模塊等。UART使用一個GPIO做發送,一個GPIO做接收,沒有單獨的時鍾信號。收發雙方需要先約定好相同的波特率、數據位、校驗位、停止位等參數才能正常通信,所以也叫做異步串行總線。
1.獲取UART類的方法
>>> from pyb import UART >>> help(pyb.UART) object <class 'UART'> is of type type init -- <function> deinit -- <function> any -- <function> read -- <function> readline -- <function> readinto -- <function> write -- <function> irq -- <function> writechar -- <function> readchar -- <function> sendbreak -- <function> RTS -- 256 CTS -- 512 IRQ_RXIDLE -- 16 >>>
2. 在MicroPython中,操作串口和使用GPIO一樣簡單。我們先看看串口的常用函數,從這里就可以看出串口的基本使用方法。
串口的基本使用方式是,首先定義使用的串口,再設置串口參數(最主要就是設置波特率),然后通過 write()函數發送緩沖區或者字符串。或者用 any()函數判斷是否接收到數據,再用read()函數讀取數據。
UART的函數如下:
(1)class pyb.UART(bus,...)
bus:1-6,或者‘XA’,‘XB’,‘YA’,‘YB’。
在PYB V10上,串口對應的GPIO是:
(2)uart.init(baudrate,bits=8,parity=None,stop=1,timeout=1000,flow=None,timeout_char=0,read_buf_len=64)
串口初始化。
◆baudrate:波特率
◆bits:數據位,可以是7/8/9
◆parity:奇偶校驗位,可以設置為None,0 (even)或1 (odd),默認無校驗
◆stop:停止位,1/2
◆flow:流量控制,可以是None,UART.RTS,UART.CTS或UART.RTS|UART.CTS,默認None(無流量控制)
◆timeout:讀取一個字節的超時時間(ms)
◆timeout_char:讀或寫時兩個字節之間的等待時間
◆read_buf_len:讀緩存的長度,0代表禁用緩沖區
(3)uart.deinit()
關閉串口。
(4)uart.any()
返回緩沖區數據個數,大於0代表收到數據。
(5)uart.writechar(char)
寫入一個字節。
(6)uart.read([nbytes])
讀取最多nbytes個字節。如果數據位是9bits,那么一個數據占用兩個字節,並且nbytes必須是偶數。
(7)uart.readall()
讀取所有數據。
(8)uart.readchar()
讀取一個字節。
(9)uart.readinto(buf[,nbytes])
buf:數據緩沖區;
nbytes:最大讀取數量。
(10)uart.readline()
讀取一行。
(11)uart.write(buf)
寫入緩沖區。在9bits模式下,兩個字節算一個數據。
(12)uart.sendbreak()
往總線上發送停止狀態,拉低總線13bits時間。
注:
當設置波特率時,如果波特率的誤差超過5%,將引起一個異常。
當無奇偶校驗時,數據位可以設置為8或9位;而使用奇偶校驗時,數據位只能設置成7或8位。
在9位數據位模式下,無論讀或寫,一個數據都占用2個字節。
目前在MicroPython中,串口還不支持回調函數(中斷),只能通過查詢的方式(any()函數)來判斷是否收到了數據。考慮到串口通信的速度不是太快,在大部分情況下這種方式是能夠滿足性能上的要求的。
在PYB V10上,只有串口2和3支持流量控制功能。