summaryrefslogtreecommitdiffstatshomepage
path: root/docs/library/machine.UART.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/library/machine.UART.rst')
-rw-r--r--docs/library/machine.UART.rst170
1 files changed, 170 insertions, 0 deletions
diff --git a/docs/library/machine.UART.rst b/docs/library/machine.UART.rst
new file mode 100644
index 0000000000..034492717c
--- /dev/null
+++ b/docs/library/machine.UART.rst
@@ -0,0 +1,170 @@
+.. _machine.UART:
+
+class UART -- duplex serial communication bus
+=============================================
+
+UART implements the standard UART/USART duplex serial communications protocol. At
+the physical level it consists of 2 lines: RX and TX. The unit of communication
+is a character (not to be confused with a string character) which can be 8 or 9
+bits wide.
+
+UART objects can be created and initialised using::
+
+ from machine import UART
+
+ uart = UART(1, 9600) # init with given baudrate
+ uart.init(9600, bits=8, parity=None, stop=1) # init with given parameters
+
+.. only:: port_machineoard
+
+ Bits can be 7, 8 or 9. Parity can be None, 0 (even) or 1 (odd). Stop can be 1 or 2.
+
+ *Note:* with parity=None, only 8 and 9 bits are supported. With parity enabled,
+ only 7 and 8 bits are supported.
+
+.. only:: port_wipy
+
+ Bits can be 5, 6, 7, 8. Parity can be ``None``, ``UART.EVEN`` or ``UART.ODD``. Stop can be 1 or 2.
+
+
+A UART object acts like a stream object and reading and writing is done
+using the standard stream methods::
+
+ uart.read(10) # read 10 characters, returns a bytes object
+ uart.readall() # read all available characters
+ uart.readline() # read a line
+ uart.readinto(buf) # read and store into the given buffer
+ uart.write('abc') # write the 3 characters
+
+.. only:: port_machineoard
+
+ Individual characters can be read/written using::
+
+ uart.readchar() # read 1 character and returns it as an integer
+ uart.writechar(42) # write 1 character
+
+ To check if there is anything to be read, use::
+
+ uart.any() # returns True if any characters waiting
+
+ *Note:* The stream functions ``read``, ``write``, etc. are new in MicroPython v1.3.4.
+ Earlier versions use ``uart.send`` and ``uart.recv``.
+
+.. only:: port_wipy
+
+ To check if there is anything to be read, use::
+
+ uart.any() # returns the number of characters available for reading
+
+Constructors
+------------
+
+.. only:: port_wipy
+
+ .. class:: machine.UART(bus, ...)
+
+ Construct a UART object on the given bus. ``bus`` can be 0 or 1.
+ If the bus is not given, the default one will be selected (0) or the selection
+ will be made based on the given pins.
+
+Methods
+-------
+
+.. only:: port_wipy
+
+ .. method:: uart.init(baudrate=9600, bits=8, parity=None, stop=1, \*, pins=(TX, RX, RTS, CTS))
+
+ Initialise the UART bus with the given parameters:
+
+ - ``baudrate`` is the clock rate.
+ - ``bits`` is the number of bits per character, 7, 8 or 9.
+ - ``parity`` is the parity, ``None``, ``UART.EVEN`` or ``UART.ODD``.
+ - ``stop`` is the number of stop bits, 1 or 2.
+ - ``pins`` is a 4 or 2 item list indicating the TX, RX, RTS and CTS pins (in that order).
+ Any of the pins can be None if one wants the UART to operate with limited functionality.
+ If the RTS pin is given the the RX pin must be given as well. The same applies to CTS.
+ When no pins are given, then the default set of TX and RX pins is taken, and hardware
+ flow control will be disabled. If pins=None, no pin assignment will be made.
+
+.. method:: uart.deinit()
+
+ Turn off the UART bus.
+
+.. method:: uart.any()
+
+ Return the number of characters available for reading.
+
+.. method:: uart.read([nbytes])
+
+ Read characters. If ``nbytes`` is specified then read at most that many bytes.
+
+ Return value: a bytes object containing the bytes read in. Returns ``b''``
+ on timeout.
+
+.. method:: uart.readall()
+
+ Read as much data as possible.
+
+ Return value: a bytes object.
+
+.. method:: uart.readinto(buf[, nbytes])
+
+ Read bytes into the ``buf``. If ``nbytes`` is specified then read at most
+ that many bytes. Otherwise, read at most ``len(buf)`` bytes.
+
+ Return value: number of bytes read and stored into ``buf``.
+
+.. method:: uart.readline()
+
+ Read a line, ending in a newline character.
+
+ Return value: the line read.
+
+.. method:: uart.write(buf)
+
+ Write the buffer of bytes to the bus.
+
+ Return value: number of bytes written.
+
+.. method:: uart.sendbreak()
+
+ Send a break condition on the bus. This drives the bus low for a duration
+ of 13 bits.
+ Return value: ``None``.
+
+.. only:: port_wipy
+
+ .. method:: uart.irq(trigger, priority=1, handler=None, wake=machine.IDLE)
+
+ Create a callback to be triggered when data is received on the UART.
+
+ - ``trigger`` can only be ``UART.RX_ANY``
+ - ``priority`` level of the interrupt. Can take values in the range 1-7.
+ Higher values represent higher priorities.
+ - ``handler`` an optional function to be called when new characters arrive.
+ - ``wake`` can only be ``machine.IDLE``.
+
+ .. note::
+
+ The handler will be called whenever any of the following two conditions are met:
+
+ - 8 new characters have been received.
+ - At least 1 new character is waiting in the Rx buffer and the Rx line has been
+ silent for the duration of 1 complete frame.
+
+ This means that when the handler function is called there will be between 1 to 8
+ characters waiting.
+
+ Returns a irq object.
+
+Constants
+---------
+
+.. data:: UART.EVEN
+.. data:: UART.ODD
+
+ parity types (anlong with ``None``)
+
+.. data:: UART.RX_ANY
+
+ IRQ trigger sources