在 ALIENTEK 阿波罗STM32F429开发板上使用 openvela 点亮 LED(一)(精简版 )

一、概述

本指南(参考在STM32F411 上使用 openvela 点亮 LED)将引导您在 ALIENTEK 阿波罗STM32F429开发板上,基于 openvela 实时操作系统,完成一个基础的 LED 闪烁示例。

二、准备工作

在开始之前,请确保您已完成以下准备工作:

  1. 获取源码:参考文档快速入门下载最新代码。
  2. 了解 openvela 架构:建议您预先阅读 openvela 架构以理解其分层设计。
  3. 查阅系统启动流程文档,获取更详细的启动时序和函数调用关系图。
  4. 准备好硬件及配套软件
  5. 已完成前期的移植验证操作。

三、配置

1、创建新的配置

为ALIENTEK 阿波罗STM32F429开发板移植openvela :: 二、代码实现步骤 :: 1.创建代码目录结构 为基础,在nuttx/boards/arm/stm32/apollo-stm32f429i/configs目录下,创建一个名为 led的新目录,并在此目录中创建LED示例的默认配置文件deconfig。更新后的nuttx/boards/arm/stm32/apollo-stm32f429i/代码目录结构如下:

apollo-stm32f429i
├── CMakeLists.txt
├── configs                           # defconfig 配置路径
│   └── nsh
│       └── defconfig                 # NuttShell (NSH) 的默认配置
│	└── led
│       └── defconfig                 # LED 示例的默认配置
├── include
│   └── board.h                       # 板级硬件配置头文件
├── Kconfig                           # 板级 Kconfig 配置文件
├── scripts                           # 链接脚本
│   ├── ld.script                     # 链接器脚本
│   └── Make.defs                     # 板级 Make 定义
└── src
    ├── CMakeLists.txt
    ├── Make.defs
    ├── stm32_appinit.c               # 实现 board_app_initialize
    ├── stm32_autoleds.c              # 实现系统状态 LED 控制
    ├── stm32_boot.c                  # 实现 stm32_boardinitialize
    ├── stm32_bringup.c               # 实现驱动初始化
    ├── apollo-stm32f429i.h           # 板级私有头文件,定义 GPIO
    └── stm32_userleds.c              # 实现用户层 LED 驱动接口

创建nuttx/boards/arm/stm32/apollo-stm32f429i/configs/led/deconfig 如下:

#
# This file is autogenerated: PLEASE DO NOT EDIT IT.
#
# You can use "make menuconfig" to make any modifications to the installed .config file.
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
# modifications.
#
# CONFIG_ARCH_FPU is not set
# CONFIG_ARCH_LEDS is not set
# CONFIG_NSH_ARGCAT is not set
# CONFIG_NSH_CMDOPT_HEXDUMP is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="apollo-stm32f429i"
CONFIG_ARCH_BOARD_APOLLO_STM32F429I=y
CONFIG_ARCH_BUTTONS=y
CONFIG_ARCH_CHIP="stm32"
CONFIG_ARCH_CHIP_STM32=y
CONFIG_ARCH_CHIP_STM32F429I=y
CONFIG_ARCH_STACKDUMP=y
CONFIG_BOARD_LATE_INITIALIZE=y
CONFIG_BOARD_LOOPSPERMSEC=13984
CONFIG_BUILTIN=y
CONFIG_DEBUG_SYMBOLS=y
CONFIG_EXAMPLES_LEDS=y
CONFIG_FS_PROCFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INTELHEX_BINARY=y
CONFIG_MM_REGIONS=2
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_FILEIOSIZE=512
CONFIG_NSH_READLINE=y
CONFIG_PREALLOC_TIMERS=4
CONFIG_RAM_SIZE=114688
CONFIG_RAM_START=0x20000000
CONFIG_RAW_BINARY=y
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_WAITPID=y
CONFIG_START_DAY=6
CONFIG_START_MONTH=12
CONFIG_START_YEAR=2011
CONFIG_STM32_DISABLE_IDLE_SLEEP_DURING_DEBUG=y
CONFIG_STM32_JTAG_SW_ENABLE=y
CONFIG_STM32_PWR=y
CONFIG_STM32_USART1=y
CONFIG_SYSTEM_NSH=y
CONFIG_TASK_NAME_SIZE=0
CONFIG_USART1_SERIAL_CONSOLE=y
CONFIG_USERLED=y
CONFIG_USERLED_LOWER=y

说明:与apollo-stm32f429i/configs/led/deconfig相比:

  • 取消了CONFIG_ARCH_LEDS
  • 增加了CONFIG_BOARD_LATE_INITIALIZE,CONFIG_EXAMPLES_LEDS,CONFIG_USERLED,CONFIG_USERLED_LOWER

2、更新stm32_bringup.c

此文件中的 stm32_bringup() 函数负责初始化并注册所有板载设备的驱动程序。在本例中,我们追加注册用户 LED 驱动。。

/****************************************************************************
 * boards/arm/stm32/apollo-stm32f429i/src/stm32_bringup.c
 ****************************************************************************/

/****************************************************************************
 * Included Files
 ****************************************************************************/

#include <nuttx/config.h>

#include <stdbool.h>
#include <stdio.h>
#include <debug.h>
#include <errno.h>

#include <nuttx/board.h>
#include <nuttx/fs/fs.h>
#include <nuttx/kmalloc.h>

#include "stm32.h"
#include "apollo-stm32f429i.h"

#ifdef CONFIG_USERLED
#  include <nuttx/leds/userled.h>
#endif

/****************************************************************************
 * Public Functions
 ****************************************************************************/

/****************************************************************************
 * Name: stm32_bringup
 *
 * Description:
 *   Perform architecture-specific initialization
 *
 *   CONFIG_BOARD_LATE_INITIALIZE=y :
 *     Called from board_late_initialize().
 *
 *   CONFIG_BOARD_LATE_INITIALIZE=y && CONFIG_BOARDCTL=y :
 *     Called from the NSH library
 *
 ****************************************************************************/

int stm32_bringup(void)
{
  int ret;

#ifdef HAVE_PROC
  /* mount the proc filesystem */

  ret = nx_mount(NULL, CONFIG_NSH_PROC_MOUNTPOINT, "procfs", 0, NULL);
  if (ret < 0)
    {
      syslog(LOG_ERR,
             "ERROR: Failed to mount the PROC filesystem: %d\n", ret);
      return ret;
    }
#endif

#ifdef CONFIG_USERLED
  /* 注册用户 LED 驱动,使其在 /dev/userleds 节点可用 */
  ret = userled_lower_initialize("/dev/userleds");
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: userled_lower_initialize() failed: %d\n", ret);
    }
#endif

  UNUSED(ret);
  return OK;
}

四、运行Demo

1、编译代码

在完成上面的步骤后,按以下流程为 阿波罗STM32F429 开发板生成所需二进制文件:

# 进入 openvela 根目录  

# 编译  
./build.sh apollo-stm32f429i:led -j8

编译完成后,生成的文件位于 nuttx 目录下,包括:

  • nuttx.bin
  • nuttx.hex

2、烧录固件

参考在 STM32F411 上使用 openvela 点亮 LED: : 四、运行Demo::5、烧录固件

3、连接串口

参考在 STM32F411 上使用 openvela 点亮 LED: : 四、运行Demo::6、连接串口

4、运行 LED 示例

  1. 重新打开 minicom,连接成功后,在 Minicom 终端中按回车,您会看到 nsh> 提示符。

  2. 运行 LED 示例,请输入以下命令:

    leds
    
  3. 您将看到开发板上的用户 LED 开始闪烁,同时串口终端会输出运行日志。

leds_new

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐