2015-06-10 22:29:56 +01:00
|
|
|
:mod:`pyb` --- functions related to the board
|
|
|
|
=============================================
|
2014-10-31 01:37:19 +00:00
|
|
|
|
|
|
|
.. module:: pyb
|
2015-06-10 22:29:56 +01:00
|
|
|
:synopsis: functions related to the board
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2015-06-10 22:29:56 +01:00
|
|
|
The ``pyb`` module contains specific functions related to the board.
|
2014-10-31 01:37:19 +00:00
|
|
|
|
|
|
|
Time related functions
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
.. function:: delay(ms)
|
|
|
|
|
|
|
|
Delay for the given number of milliseconds.
|
|
|
|
|
|
|
|
.. function:: udelay(us)
|
|
|
|
|
|
|
|
Delay for the given number of microseconds.
|
|
|
|
|
|
|
|
.. function:: millis()
|
|
|
|
|
|
|
|
Returns the number of milliseconds since the board was last reset.
|
2019-12-04 04:02:54 +00:00
|
|
|
|
2017-07-15 10:44:15 +01:00
|
|
|
The result is always a MicroPython smallint (31-bit signed number), so
|
2014-10-31 01:37:19 +00:00
|
|
|
after 2^30 milliseconds (about 12.4 days) this will start to return
|
|
|
|
negative numbers.
|
|
|
|
|
2016-01-11 06:48:35 +00:00
|
|
|
Note that if :meth:`pyb.stop()` is issued the hardware counter supporting this
|
|
|
|
function will pause for the duration of the "sleeping" state. This
|
|
|
|
will affect the outcome of :meth:`pyb.elapsed_millis()`.
|
|
|
|
|
2014-10-31 01:37:19 +00:00
|
|
|
.. function:: micros()
|
|
|
|
|
|
|
|
Returns the number of microseconds since the board was last reset.
|
2019-12-04 04:02:54 +00:00
|
|
|
|
2017-07-15 10:44:15 +01:00
|
|
|
The result is always a MicroPython smallint (31-bit signed number), so
|
2014-10-31 01:37:19 +00:00
|
|
|
after 2^30 microseconds (about 17.8 minutes) this will start to return
|
|
|
|
negative numbers.
|
|
|
|
|
2016-01-11 06:48:35 +00:00
|
|
|
Note that if :meth:`pyb.stop()` is issued the hardware counter supporting this
|
|
|
|
function will pause for the duration of the "sleeping" state. This
|
|
|
|
will affect the outcome of :meth:`pyb.elapsed_micros()`.
|
|
|
|
|
2014-10-31 01:37:19 +00:00
|
|
|
.. function:: elapsed_millis(start)
|
|
|
|
|
|
|
|
Returns the number of milliseconds which have elapsed since ``start``.
|
2019-12-04 04:02:54 +00:00
|
|
|
|
2014-10-31 01:37:19 +00:00
|
|
|
This function takes care of counter wrap, and always returns a positive
|
2016-08-01 00:52:00 +01:00
|
|
|
number. This means it can be used to measure periods up to about 12.4 days.
|
2019-12-04 04:02:54 +00:00
|
|
|
|
2014-10-31 01:37:19 +00:00
|
|
|
Example::
|
|
|
|
|
|
|
|
start = pyb.millis()
|
|
|
|
while pyb.elapsed_millis(start) < 1000:
|
|
|
|
# Perform some operation
|
|
|
|
|
|
|
|
.. function:: elapsed_micros(start)
|
|
|
|
|
|
|
|
Returns the number of microseconds which have elapsed since ``start``.
|
2019-12-04 04:02:54 +00:00
|
|
|
|
2014-10-31 01:37:19 +00:00
|
|
|
This function takes care of counter wrap, and always returns a positive
|
2016-08-01 00:52:00 +01:00
|
|
|
number. This means it can be used to measure periods up to about 17.8 minutes.
|
2019-12-04 04:02:54 +00:00
|
|
|
|
2014-10-31 01:37:19 +00:00
|
|
|
Example::
|
|
|
|
|
|
|
|
start = pyb.micros()
|
|
|
|
while pyb.elapsed_micros(start) < 1000:
|
|
|
|
# Perform some operation
|
|
|
|
pass
|
|
|
|
|
|
|
|
Reset related functions
|
|
|
|
-----------------------
|
|
|
|
|
2015-10-14 11:32:01 +01:00
|
|
|
.. function:: hard_reset()
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2015-10-14 11:32:01 +01:00
|
|
|
Resets the pyboard in a manner similar to pushing the external RESET
|
|
|
|
button.
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2015-10-14 11:32:01 +01:00
|
|
|
.. function:: bootloader()
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2015-10-14 11:32:01 +01:00
|
|
|
Activate the bootloader without BOOT\* pins.
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2017-02-06 02:19:52 +00:00
|
|
|
.. function:: fault_debug(value)
|
|
|
|
|
|
|
|
Enable or disable hard-fault debugging. A hard-fault is when there is a fatal
|
|
|
|
error in the underlying system, like an invalid memory access.
|
|
|
|
|
2017-06-26 22:38:05 +01:00
|
|
|
If the *value* argument is ``False`` then the board will automatically reset if
|
2017-02-06 02:19:52 +00:00
|
|
|
there is a hard fault.
|
|
|
|
|
2017-06-26 22:38:05 +01:00
|
|
|
If *value* is ``True`` then, when the board has a hard fault, it will print the
|
2017-02-06 02:19:52 +00:00
|
|
|
registers and the stack trace, and then cycle the LEDs indefinitely.
|
|
|
|
|
|
|
|
The default value is disabled, i.e. to automatically reset.
|
|
|
|
|
2014-10-31 01:37:19 +00:00
|
|
|
Interrupt related functions
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
.. function:: disable_irq()
|
|
|
|
|
|
|
|
Disable interrupt requests.
|
|
|
|
Returns the previous IRQ state: ``False``/``True`` for disabled/enabled IRQs
|
|
|
|
respectively. This return value can be passed to enable_irq to restore
|
|
|
|
the IRQ to its original state.
|
|
|
|
|
|
|
|
.. function:: enable_irq(state=True)
|
|
|
|
|
|
|
|
Enable interrupt requests.
|
|
|
|
If ``state`` is ``True`` (the default value) then IRQs are enabled.
|
|
|
|
If ``state`` is ``False`` then IRQs are disabled. The most common use of
|
|
|
|
this function is to pass it the value returned by ``disable_irq`` to
|
|
|
|
exit a critical section.
|
|
|
|
|
|
|
|
Power related functions
|
|
|
|
-----------------------
|
|
|
|
|
2018-07-18 06:47:44 +01:00
|
|
|
.. function:: freq([sysclk[, hclk[, pclk1[, pclk2]]]])
|
|
|
|
|
|
|
|
If given no arguments, returns a tuple of clock frequencies:
|
|
|
|
(sysclk, hclk, pclk1, pclk2).
|
|
|
|
These correspond to:
|
|
|
|
|
|
|
|
- sysclk: frequency of the CPU
|
|
|
|
- hclk: frequency of the AHB bus, core memory and DMA
|
|
|
|
- pclk1: frequency of the APB1 bus
|
|
|
|
- pclk2: frequency of the APB2 bus
|
|
|
|
|
|
|
|
If given any arguments then the function sets the frequency of the CPU,
|
|
|
|
and the busses if additional arguments are given. Frequencies are given in
|
|
|
|
Hz. Eg freq(120000000) sets sysclk (the CPU frequency) to 120MHz. Note that
|
|
|
|
not all values are supported and the largest supported frequency not greater
|
|
|
|
than the given value will be selected.
|
|
|
|
|
|
|
|
Supported sysclk frequencies are (in MHz): 8, 16, 24, 30, 32, 36, 40, 42, 48,
|
|
|
|
54, 56, 60, 64, 72, 84, 96, 108, 120, 144, 168.
|
|
|
|
|
|
|
|
The maximum frequency of hclk is 168MHz, of pclk1 is 42MHz, and of pclk2 is
|
|
|
|
84MHz. Be sure not to set frequencies above these values.
|
|
|
|
|
|
|
|
The hclk, pclk1 and pclk2 frequencies are derived from the sysclk frequency
|
|
|
|
using a prescaler (divider). Supported prescalers for hclk are: 1, 2, 4, 8,
|
|
|
|
16, 64, 128, 256, 512. Supported prescalers for pclk1 and pclk2 are: 1, 2,
|
|
|
|
4, 8. A prescaler will be chosen to best match the requested frequency.
|
|
|
|
|
|
|
|
A sysclk frequency of
|
|
|
|
8MHz uses the HSE (external crystal) directly and 16MHz uses the HSI
|
|
|
|
(internal oscillator) directly. The higher frequencies use the HSE to
|
|
|
|
drive the PLL (phase locked loop), and then use the output of the PLL.
|
|
|
|
|
|
|
|
Note that if you change the frequency while the USB is enabled then
|
|
|
|
the USB may become unreliable. It is best to change the frequency
|
|
|
|
in boot.py, before the USB peripheral is started. Also note that sysclk
|
|
|
|
frequencies below 36MHz do not allow the USB to function correctly.
|
|
|
|
|
|
|
|
.. function:: wfi()
|
|
|
|
|
|
|
|
Wait for an internal or external interrupt.
|
|
|
|
|
|
|
|
This executes a ``wfi`` instruction which reduces power consumption
|
|
|
|
of the MCU until any interrupt occurs (be it internal or external),
|
|
|
|
at which point execution continues. Note that the system-tick interrupt
|
|
|
|
occurs once every millisecond (1000Hz) so this function will block for
|
|
|
|
at most 1ms.
|
|
|
|
|
|
|
|
.. function:: stop()
|
|
|
|
|
|
|
|
Put the pyboard in a "sleeping" state.
|
|
|
|
|
|
|
|
This reduces power consumption to less than 500 uA. To wake from this
|
|
|
|
sleep state requires an external interrupt or a real-time-clock event.
|
|
|
|
Upon waking execution continues where it left off.
|
|
|
|
|
|
|
|
See :meth:`rtc.wakeup` to configure a real-time-clock wakeup event.
|
|
|
|
|
|
|
|
.. function:: standby()
|
|
|
|
|
|
|
|
Put the pyboard into a "deep sleep" state.
|
|
|
|
|
|
|
|
This reduces power consumption to less than 50 uA. To wake from this
|
|
|
|
sleep state requires a real-time-clock event, or an external interrupt
|
|
|
|
on X1 (PA0=WKUP) or X18 (PC13=TAMP1).
|
|
|
|
Upon waking the system undergoes a hard reset.
|
|
|
|
|
|
|
|
See :meth:`rtc.wakeup` to configure a real-time-clock wakeup event.
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2014-10-31 01:37:19 +00:00
|
|
|
Miscellaneous functions
|
|
|
|
-----------------------
|
|
|
|
|
2018-07-18 06:47:44 +01:00
|
|
|
.. function:: have_cdc()
|
|
|
|
|
|
|
|
Return True if USB is connected as a serial device, False otherwise.
|
|
|
|
|
|
|
|
.. note:: This function is deprecated. Use pyb.USB_VCP().isconnected() instead.
|
|
|
|
|
|
|
|
.. function:: hid((buttons, x, y, z))
|
|
|
|
|
|
|
|
Takes a 4-tuple (or list) and sends it to the USB host (the PC) to
|
|
|
|
signal a HID mouse-motion event.
|
|
|
|
|
|
|
|
.. note:: This function is deprecated. Use :meth:`pyb.USB_HID.send()` instead.
|
|
|
|
|
|
|
|
.. function:: info([dump_alloc_table])
|
|
|
|
|
|
|
|
Print out lots of information about the board.
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2015-04-09 10:08:25 +01:00
|
|
|
.. function:: main(filename)
|
|
|
|
|
|
|
|
Set the filename of the main script to run after boot.py is finished. If
|
|
|
|
this function is not called then the default file main.py will be executed.
|
|
|
|
|
|
|
|
It only makes sense to call this function from within boot.py.
|
|
|
|
|
2018-07-18 06:47:44 +01:00
|
|
|
.. function:: mount(device, mountpoint, \*, readonly=False, mkfs=False)
|
|
|
|
|
2018-09-16 11:56:57 +01:00
|
|
|
.. note:: This function is deprecated. Mounting and unmounting devices should
|
|
|
|
be performed by :meth:`uos.mount` and :meth:`uos.umount` instead.
|
|
|
|
|
2018-07-18 06:47:44 +01:00
|
|
|
Mount a block device and make it available as part of the filesystem.
|
2018-09-16 11:56:57 +01:00
|
|
|
``device`` must be an object that provides the block protocol. (The
|
|
|
|
following is also deprecated. See :class:`uos.AbstractBlockDev` for the
|
|
|
|
correct way to create a block device.)
|
2018-07-18 06:47:44 +01:00
|
|
|
|
|
|
|
- ``readblocks(self, blocknum, buf)``
|
|
|
|
- ``writeblocks(self, blocknum, buf)`` (optional)
|
|
|
|
- ``count(self)``
|
|
|
|
- ``sync(self)`` (optional)
|
|
|
|
|
|
|
|
``readblocks`` and ``writeblocks`` should copy data between ``buf`` and
|
|
|
|
the block device, starting from block number ``blocknum`` on the device.
|
|
|
|
``buf`` will be a bytearray with length a multiple of 512. If
|
|
|
|
``writeblocks`` is not defined then the device is mounted read-only.
|
|
|
|
The return value of these two functions is ignored.
|
|
|
|
|
|
|
|
``count`` should return the number of blocks available on the device.
|
|
|
|
``sync``, if implemented, should sync the data on the device.
|
|
|
|
|
|
|
|
The parameter ``mountpoint`` is the location in the root of the filesystem
|
|
|
|
to mount the device. It must begin with a forward-slash.
|
|
|
|
|
|
|
|
If ``readonly`` is ``True``, then the device is mounted read-only,
|
|
|
|
otherwise it is mounted read-write.
|
|
|
|
|
|
|
|
If ``mkfs`` is ``True``, then a new filesystem is created if one does not
|
|
|
|
already exist.
|
|
|
|
|
2014-10-31 01:37:19 +00:00
|
|
|
.. function:: repl_uart(uart)
|
|
|
|
|
2015-06-11 14:53:31 +01:00
|
|
|
Get or set the UART object where the REPL is repeated on.
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2018-07-18 06:47:44 +01:00
|
|
|
.. function:: rng()
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2018-07-18 06:47:44 +01:00
|
|
|
Return a 30-bit hardware generated random number.
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2014-10-31 01:37:19 +00:00
|
|
|
.. function:: sync()
|
|
|
|
|
|
|
|
Sync all file systems.
|
|
|
|
|
2018-07-18 06:47:44 +01:00
|
|
|
.. function:: unique_id()
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2018-07-18 06:47:44 +01:00
|
|
|
Returns a string of 12 bytes (96 bits), which is the unique ID of the MCU.
|
2015-06-10 22:29:56 +01:00
|
|
|
|
2019-09-10 04:22:35 +01:00
|
|
|
.. function:: usb_mode([modestr], port=-1, vid=0xf055, pid=-1, msc=(), hid=pyb.hid_mouse, high_speed=False)
|
2016-08-28 18:05:40 +01:00
|
|
|
|
|
|
|
If called with no arguments, return the current USB mode as a string.
|
|
|
|
|
2019-09-10 04:22:35 +01:00
|
|
|
If called with *modestr* provided, attempts to configure the USB mode.
|
|
|
|
The following values of *modestr* are understood:
|
2016-08-28 18:05:40 +01:00
|
|
|
|
|
|
|
- ``None``: disables USB
|
|
|
|
- ``'VCP'``: enable with VCP (Virtual COM Port) interface
|
2018-02-01 04:52:49 +00:00
|
|
|
- ``'MSC'``: enable with MSC (mass storage device class) interface
|
|
|
|
- ``'VCP+MSC'``: enable with VCP and MSC
|
2016-08-28 18:05:40 +01:00
|
|
|
- ``'VCP+HID'``: enable with VCP and HID (human interface device)
|
2019-09-11 06:16:19 +01:00
|
|
|
- ``'VCP+MSC+HID'``: enabled with VCP, MSC and HID (only available on PYBD boards)
|
2016-08-28 18:05:40 +01:00
|
|
|
|
|
|
|
For backwards compatibility, ``'CDC'`` is understood to mean
|
|
|
|
``'VCP'`` (and similarly for ``'CDC+MSC'`` and ``'CDC+HID'``).
|
|
|
|
|
2019-09-10 04:22:35 +01:00
|
|
|
The *port* parameter should be an integer (0, 1, ...) and selects which
|
|
|
|
USB port to use if the board supports multiple ports. A value of -1 uses
|
|
|
|
the default or automatically selected port.
|
|
|
|
|
|
|
|
The *vid* and *pid* parameters allow you to specify the VID (vendor id)
|
|
|
|
and PID (product id). A *pid* value of -1 will select a PID based on the
|
|
|
|
value of *modestr*.
|
|
|
|
|
|
|
|
If enabling MSC mode, the *msc* parameter can be used to specify a list
|
|
|
|
of SCSI LUNs to expose on the mass storage interface. For example
|
|
|
|
``msc=(pyb.Flash(), pyb.SDCard())``.
|
2016-08-28 18:05:40 +01:00
|
|
|
|
|
|
|
If enabling HID mode, you may also specify the HID details by
|
2019-09-10 04:22:35 +01:00
|
|
|
passing the *hid* keyword parameter. It takes a tuple of
|
2016-08-28 18:05:40 +01:00
|
|
|
(subclass, protocol, max packet length, polling interval, report
|
|
|
|
descriptor). By default it will set appropriate values for a USB
|
|
|
|
mouse. There is also a ``pyb.hid_keyboard`` constant, which is an
|
|
|
|
appropriate tuple for a USB keyboard.
|
|
|
|
|
2019-09-10 04:22:35 +01:00
|
|
|
The *high_speed* parameter, when set to ``True``, enables USB HS mode if
|
|
|
|
it is supported by the hardware.
|
|
|
|
|
2014-10-31 01:37:19 +00:00
|
|
|
Classes
|
|
|
|
-------
|
|
|
|
|
2018-07-18 06:47:44 +01:00
|
|
|
.. toctree::
|
|
|
|
:maxdepth: 1
|
|
|
|
|
|
|
|
pyb.Accel.rst
|
|
|
|
pyb.ADC.rst
|
|
|
|
pyb.CAN.rst
|
|
|
|
pyb.DAC.rst
|
|
|
|
pyb.ExtInt.rst
|
2019-12-04 02:50:51 +00:00
|
|
|
pyb.Flash.rst
|
2018-07-18 06:47:44 +01:00
|
|
|
pyb.I2C.rst
|
|
|
|
pyb.LCD.rst
|
|
|
|
pyb.LED.rst
|
|
|
|
pyb.Pin.rst
|
|
|
|
pyb.RTC.rst
|
|
|
|
pyb.Servo.rst
|
|
|
|
pyb.SPI.rst
|
|
|
|
pyb.Switch.rst
|
|
|
|
pyb.Timer.rst
|
|
|
|
pyb.UART.rst
|
|
|
|
pyb.USB_HID.rst
|
|
|
|
pyb.USB_VCP.rst
|