samples/boards: stm32: Add low power blinky sample

This sample demonstrates a low power blinky application.

Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
This commit is contained in:
Erwan Gouriou 2021-03-17 09:18:26 +01:00 committed by Anas Nashif
commit c730603332
5 changed files with 110 additions and 0 deletions

View file

@ -0,0 +1,7 @@
# SPDX-License-Identifier: Apache-2.0
cmake_minimum_required(VERSION 3.13.1)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(stm32_pm_blinky)
target_sources(app PRIVATE src/main.c)

View file

@ -0,0 +1,42 @@
.. _stm32-pm-blinky-sample:
Blinky
######
Overview
********
Blinky is a simple application which blinks an LED forever using the :ref:`GPIO
API <gpio_api>` in low power context.
.. _stm32-pm-blinky-sample-requirements:
Requirements
************
You will see this error if you try to build Blinky for an unsupported board:
.. code-block:: none
Unsupported board: led0 devicetree alias is not defined
The board must have an LED connected via a GPIO pin. These are called "User
LEDs" on many of Zephyr's :ref:`boards`. The LED must be configured using the
``led0`` :ref:`devicetree <dt-guide>` alias. This is usually done in the
:ref:`BOARD.dts file <devicetree-in-out-files>` or a :ref:`devicetree overlay
<set-devicetree-overlays>`.
The board should support enabling PM.
Building and Running
********************
Build and flash Blinky as follows, changing ``nucleo_l476rg`` for your board:
.. zephyr-app-commands::
:zephyr-app: samples/basic/blinky
:board: nucleo_l476rg
:goals: build flash
:compact:
After flashing, the LED starts to blink. Blinky does not print to the console.

View file

@ -0,0 +1,15 @@
CONFIG_GPIO=y
CONFIG_PM=y
CONFIG_PM_DEVICE=y
CONFIG_PM_DEVICE_RUNTIME=y
# Disable debug to enter core low power states
# Warning: requires to erase the device for next flashing actions
CONFIG_DEBUG=y
# FIXME: Early console not supported due to uart init postponed
CONFIG_BOOT_BANNER=n
# Disable serial to ease debug
CONFIG_SERIAL=n

View file

@ -0,0 +1,8 @@
sample:
name: STM32 GPIO Power Management
tests:
sample.boards.stm32.power_mgmt.blinky:
tags: LED power
filter: dt_compat_enabled("zephyr,power-state") and
dt_enabled_alias_with_parent_compat("led0", "gpio-leds")
depends_on: gpio

View file

@ -0,0 +1,38 @@
/*
* Copyright (c) 2021 Linaro Limited
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr.h>
#include <device.h>
#include <devicetree.h>
#include <drivers/gpio.h>
#define SLEEP_TIME_MS 2000
static const struct gpio_dt_spec led =
GPIO_DT_SPEC_GET(DT_ALIAS(led0), gpios);
void main(void)
{
bool led_is_on = true;
__ASSERT_NO_MSG(device_is_ready(led.port));
while (true) {
gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
gpio_pin_set(led.port, led.pin, (int)led_is_on);
if (led_is_on == false) {
/* Release resource to release device clock */
gpio_pin_configure(led.port, led.pin, GPIO_DISCONNECTED);
}
k_msleep(SLEEP_TIME_MS);
if (led_is_on == true) {
/* Release resource to release device clock */
gpio_pin_configure(led.port, led.pin, GPIO_DISCONNECTED);
}
led_is_on = !led_is_on;
}
}