98 lines
2.6 KiB
ReStructuredText
98 lines
2.6 KiB
ReStructuredText
.. zephyr:code-sample:: blinky
|
|
:name: Blinky
|
|
:relevant-api: gpio_interface
|
|
|
|
Blink an LED forever using the GPIO API.
|
|
|
|
Overview
|
|
********
|
|
|
|
The Blinky sample blinks an LED forever using the :ref:`GPIO API <gpio_api>`.
|
|
|
|
The source code shows how to:
|
|
|
|
#. Get a pin specification from the :ref:`devicetree <dt-guide>` as a
|
|
:c:struct:`gpio_dt_spec`
|
|
#. Configure the GPIO pin as an output
|
|
#. Toggle the pin forever
|
|
|
|
See :zephyr:code-sample:`pwm-blinky` for a similar sample that uses the PWM API instead.
|
|
|
|
.. _blinky-sample-requirements:
|
|
|
|
Requirements
|
|
************
|
|
|
|
Your board must:
|
|
|
|
#. Have an LED connected via a GPIO pin (these are called "User LEDs" on many of
|
|
Zephyr's :ref:`boards`).
|
|
#. Have the LED configured using the ``led0`` devicetree alias.
|
|
|
|
Building and Running
|
|
********************
|
|
|
|
Build and flash Blinky as follows, changing ``reel_board`` for your board:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/basic/blinky
|
|
:board: reel_board
|
|
:goals: build flash
|
|
:compact:
|
|
|
|
After flashing, the LED starts to blink and messages with the current LED state
|
|
are printed on the console. If a runtime error occurs, the sample exits without
|
|
printing to the console.
|
|
|
|
Build errors
|
|
************
|
|
|
|
You will see a build error at the source code line defining the ``struct
|
|
gpio_dt_spec led`` variable if you try to build Blinky for an unsupported
|
|
board.
|
|
|
|
On GCC-based toolchains, the error looks like this:
|
|
|
|
.. code-block:: none
|
|
|
|
error: '__device_dts_ord_DT_N_ALIAS_led_P_gpios_IDX_0_PH_ORD' undeclared here (not in a function)
|
|
|
|
Adding board support
|
|
********************
|
|
|
|
To add support for your board, add something like this to your devicetree:
|
|
|
|
.. code-block:: DTS
|
|
|
|
/ {
|
|
aliases {
|
|
led0 = &myled0;
|
|
};
|
|
|
|
leds {
|
|
compatible = "gpio-leds";
|
|
myled0: led_0 {
|
|
gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
|
|
};
|
|
};
|
|
};
|
|
|
|
The above sets your board's ``led0`` alias to use pin 13 on GPIO controller
|
|
``gpio0``. The pin flags :c:macro:`GPIO_ACTIVE_HIGH` mean the LED is on when
|
|
the pin is set to its high state, and off when the pin is in its low state.
|
|
|
|
Tips:
|
|
|
|
- See :dtcompatible:`gpio-leds` for more information on defining GPIO-based LEDs
|
|
in devicetree.
|
|
|
|
- If you're not sure what to do, check the devicetrees for supported boards which
|
|
use the same SoC as your target. See :ref:`get-devicetree-outputs` for details.
|
|
|
|
- See :zephyr_file:`include/zephyr/dt-bindings/gpio/gpio.h` for the flags you can use
|
|
in devicetree.
|
|
|
|
- If the LED is built in to your board hardware, the alias should be defined in
|
|
your :ref:`BOARD.dts file <devicetree-in-out-files>`. Otherwise, you can
|
|
define one in a :ref:`devicetree overlay <set-devicetree-overlays>`.
|