3. 配置串口控制台输出

配置串口控制台输出 学习卡片

任务说明

在MCUboot中启用串口控制台,配置UART引脚与波特率,使bootloader在启动过程中通过串口输出日志信息。本案例以STM32L4系列为目标平台,使用Zephyr RTOS作为MCUboot的运行环境。

实现方案

MCUboot基于Zephyr构建时,串口控制台由Zephyr的UART驱动与日志系统提供。需要完成三部分配置:设备树中使能UART外设并指定引脚、prj.conf中启用控制台与日志后端、以及确认日志级别使启动信息可见。

代码实现

首先在board设备树文件(如boards/arm/olimex_stm32l4_pico/olimex_stm32l4_pico.dts)中确认或添加UART节点配置:

/* 设备树中UART2节点配置(默认已存在于板级dts) */
&usart2 {
    status = "okay";
    pinctrl-0 = &usart2_default_alt;
    pinctrl-names = "default";
    current-speed = <115200>;
};

&pinctrl {
    usart2_default_alt: usart2_default_alt {
        group1 {
            pinmux = <STM32_PINMUX('A', 2, AF7)>, /* TX */
                     <STM32_PINMUX('A', 3, AF7)>; /* RX */
        };
    };
};

然后在MCUboot的Zephyr配置目录中创建或修改prj.conf:

# 启用串口控制台
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
CONFIG_SERIAL=y

# 启用日志系统并输出到串口
CONFIG_LOG=y
CONFIG_LOG_BACKEND_UART=y
CONFIG_LOG_DEFAULT_LEVEL=4  # INFO级别及以上输出

# 确保MCUboot日志可见
CONFIG_MCUBOOT_LOG=y

若需修改波特率,可在设备树中调整current-speed属性,或在prj.conf中通过CONFIG_UART_CONSOLE_BAUDRATE覆盖(需与设备树一致)。

构建与烧录

# 在MCUboot根目录执行
west build -b olimex_stm32l4_pico -d build_zephyr boot/zephyr
west flash -d build_zephyr

验证方法

使用串口调试工具连接板卡UART2对应引脚(PA2-TX, PA3-RX),波特率设为115200。复位板卡后,串口终端应观察到类似以下启动日志:

*** Booting Zephyr OS build v3.5.0 ***
[INF] MCUboot: Starting bootloader
[INF] MCUboot: Primary slot: 0x10000
[INF] MCUboot: Secondary slot: 0x80000
[INF] MCUboot: Image 0 loaded

判定标准:串口终端出现以*** Booting Zephyr OS开头、包含MCUboot:前缀的INFO级别日志即视为通过。若仅有Zephyr启动信息而无MCUboot日志,检查CONFIG_MCUBOOT_LOG是否生效;若无任何输出,检查引脚连接、设备树status及波特率是否匹配。

MCUboot启动流程 Zephyr内核初始化 UART驱动初始化 日志系统挂载串口 MCUboot日志输出 配置映射 CONFIG_SERIAL=y CONFIG_UART_CONSOLE=y → 使能UART CONFIG_LOG=y CONFIG_LOG_BACKEND_UART=y → 日志→串口 CONFIG_MCUBOOT_LOG=y CONFIG_LOG_DEFAULT_LEVEL=4 → 输出级别 current-speed = <115200> pinmux = PA2/PA3 AF7 → 引脚/波特率 配置生效 观测点:串口终端输出 MCUboot: 前缀日志