drewpol
drewpol

Reputation: 697

Zephyr-RTOS logging with DMA on STM32L432KC

I'm trying to run Zephyr Logging by using DMA on UART on STM32L432KC.

That's simple main loop:

#include <zephyr/kernel.h>
#include <zephyr/logging/log.h>

LOG_MODULE_REGISTER(example, LOG_LEVEL_DBG);

int main(void)
{
    while (1) {
        LOG_INF("main loop");
        k_msleep(1000);
    }
}

That's full configuration:

CONFIG_SOC_SERIES_STM32L4X=y
CONFIG_SOC_STM32L432XX=y

# Enable MPU
CONFIG_ARM_MPU=y

# Enable HW stack protection
CONFIG_HW_STACK_PROTECTION=y

# enable uart driver
CONFIG_SERIAL=y

# enable GPIO
CONFIG_GPIO=y

# Enable Clocks
CONFIG_CLOCK_CONTROL=y

# console
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
CONFIG_UART_ASYNC_API=y

# enable DMA
CONFIG_DMA=y

# enable pin controller
CONFIG_PINCTRL=y

# config logging
CONFIG_LOG=y
CONFIG_LOG_BACKEND_UART_ASYNC=y
CONFIG_LOG_MODE_IMMEDIATE=y

Then build it and flash:

west flash -b nucleo_l432kc

In logs I see following output:

*** Booting Zephyr OS build zephyr-v3.2.0-863-g78809549ee4c  ***
[00:00:01.001,000] <inf> example: main loop

When I change CONFIG_LOG_MODE_IMMEDIATE=y to CONFIG_LOG_MODE_DEFERRED=y it prints log every second like I expect.

I discovered that code stops here on k_sem_take(&sem, K_FOREVER) and this uart_callback is never called to release this mutex.

Also discovered when following options are enabled it's working fine with CONFIG_LOG_MODE_DEFERRED=y option:

CONFIG_LOG_PROCESS_THREAD=y
CONFIG_LOG_PROCESS_THREAD_SLEEP_MS=100

But that makes me wondering why another thread must be created? DMA is no blocking. Really confusing.

What am I missing? I would like to delegate all logging to DMA buffer with Logging subsystem features, without additional threads and buffering. Is there someone experienced who can point what is wrong?

Upvotes: 0

Views: 1226

Answers (1)

rhssk
rhssk

Reputation: 21

You probably need to configure console UART to use DMA in the device tree, as described in https://docs.zephyrproject.org/latest/build/dts/api/bindings/dma/st,stm32-dma-v2.html

Upvotes: 0

Related Questions