2016-06-07 22:46:27 +01:00
|
|
|
.. currentmodule:: machine
|
2017-04-18 06:27:37 +01:00
|
|
|
.. _machine.UART:
|
2015-10-14 11:32:01 +01:00
|
|
|
|
|
|
|
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
|
|
|
|
|
2017-05-29 08:08:14 +01:00
|
|
|
Supported parameters differ on a board:
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2017-06-25 11:30:29 +01:00
|
|
|
Pyboard: Bits can be 7, 8 or 9. Stop can be 1 or 2. With *parity=None*,
|
2017-04-08 22:25:27 +01:00
|
|
|
only 8 and 9 bits are supported. With parity enabled, only 7 and 8 bits
|
|
|
|
are supported.
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2017-04-08 22:25:27 +01:00
|
|
|
WiPy/CC3200: Bits can be 5, 6, 7, 8. Stop can be 1 or 2.
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2017-12-04 16:36:20 +00:00
|
|
|
A UART object acts like a `stream` object and reading and writing is done
|
2015-10-14 11:32:01 +01:00
|
|
|
using the standard stream methods::
|
|
|
|
|
|
|
|
uart.read(10) # read 10 characters, returns a bytes object
|
2016-11-14 12:31:40 +00:00
|
|
|
uart.read() # read all available characters
|
2015-10-14 11:32:01 +01:00
|
|
|
uart.readline() # read a line
|
|
|
|
uart.readinto(buf) # read and store into the given buffer
|
|
|
|
uart.write('abc') # write the 3 characters
|
|
|
|
|
|
|
|
Constructors
|
|
|
|
------------
|
|
|
|
|
2017-04-08 22:25:27 +01:00
|
|
|
.. class:: UART(id, ...)
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2017-04-08 22:25:27 +01:00
|
|
|
Construct a UART object of the given id.
|
2015-10-14 11:32:01 +01:00
|
|
|
|
|
|
|
Methods
|
|
|
|
-------
|
|
|
|
|
|
|
|
.. only:: port_wipy
|
|
|
|
|
2016-06-07 23:33:49 +01:00
|
|
|
.. method:: UART.init(baudrate=9600, bits=8, parity=None, stop=1, \*, pins=(TX, RX, RTS, CTS))
|
2015-10-14 11:32:01 +01:00
|
|
|
|
|
|
|
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.
|
2017-04-08 22:25:27 +01:00
|
|
|
- ``parity`` is the parity, ``None``, 0 (even) or 1 (odd).
|
2015-10-14 11:32:01 +01:00
|
|
|
- ``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.
|
|
|
|
|
2017-04-16 07:54:55 +01:00
|
|
|
.. method:: UART.deinit()
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2017-04-16 07:54:55 +01:00
|
|
|
Turn off the UART bus.
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2017-04-16 07:54:55 +01:00
|
|
|
.. method:: UART.any()
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2017-05-17 08:24:59 +01:00
|
|
|
Returns an integer counting the number of characters that can be read without
|
|
|
|
blocking. It will return 0 if there are no characters available and a positive
|
|
|
|
number if there are characters. The method may return 1 even if there is more
|
|
|
|
than one character available for reading.
|
|
|
|
|
|
|
|
For more sophisticated querying of available characters use select.poll::
|
|
|
|
|
|
|
|
poll = select.poll()
|
|
|
|
poll.register(uart, select.POLLIN)
|
|
|
|
poll.poll(timeout)
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2016-06-07 23:33:49 +01:00
|
|
|
.. method:: UART.read([nbytes])
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2016-11-14 12:31:40 +00:00
|
|
|
Read characters. If ``nbytes`` is specified then read at most that many bytes,
|
|
|
|
otherwise read as much data as possible.
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2015-10-24 20:35:11 +01:00
|
|
|
Return value: a bytes object containing the bytes read in. Returns ``None``
|
2015-10-14 11:32:01 +01:00
|
|
|
on timeout.
|
|
|
|
|
2016-06-07 23:33:49 +01:00
|
|
|
.. method:: UART.readinto(buf[, nbytes])
|
2015-10-14 11:32:01 +01:00
|
|
|
|
|
|
|
Read bytes into the ``buf``. If ``nbytes`` is specified then read at most
|
|
|
|
that many bytes. Otherwise, read at most ``len(buf)`` bytes.
|
|
|
|
|
2015-10-24 20:35:11 +01:00
|
|
|
Return value: number of bytes read and stored into ``buf`` or ``None`` on
|
|
|
|
timeout.
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2016-06-07 23:33:49 +01:00
|
|
|
.. method:: UART.readline()
|
2015-10-14 11:32:01 +01:00
|
|
|
|
|
|
|
Read a line, ending in a newline character.
|
|
|
|
|
2015-10-24 20:35:11 +01:00
|
|
|
Return value: the line read or ``None`` on timeout.
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2016-06-07 23:33:49 +01:00
|
|
|
.. method:: UART.write(buf)
|
2015-10-14 11:32:01 +01:00
|
|
|
|
|
|
|
Write the buffer of bytes to the bus.
|
|
|
|
|
2015-10-24 20:35:11 +01:00
|
|
|
Return value: number of bytes written or ``None`` on timeout.
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2017-04-16 07:54:55 +01:00
|
|
|
.. method:: UART.sendbreak()
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2017-04-16 07:54:55 +01:00
|
|
|
Send a break condition on the bus. This drives the bus low for a duration
|
|
|
|
longer than required for a normal transmission of a character.
|
2015-10-14 11:32:01 +01:00
|
|
|
|
|
|
|
.. only:: port_wipy
|
|
|
|
|
2016-06-07 23:33:49 +01:00
|
|
|
.. method:: UART.irq(trigger, priority=1, handler=None, wake=machine.IDLE)
|
2015-10-14 11:32:01 +01:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
2015-10-20 15:24:25 +01:00
|
|
|
Returns an irq object.
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2016-05-07 14:46:30 +01:00
|
|
|
Constants
|
|
|
|
---------
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2016-05-07 14:46:30 +01:00
|
|
|
.. data:: UART.RX_ANY
|
2015-10-14 11:32:01 +01:00
|
|
|
|
2016-05-07 14:46:30 +01:00
|
|
|
IRQ trigger sources
|