在 ALIENTEK 阿波罗STM32F429开发板上使用 openvela 点亮 LED(一)(精简版 )
本指南介绍了在ALIENTEK阿波罗STM32F429开发板上使用openvela实时操作系统实现LED闪烁的步骤。
在 ALIENTEK 阿波罗STM32F429开发板上使用 openvela 点亮 LED(一)(精简版 )
文章目录
一、概述
本指南(参考在STM32F411 上使用 openvela 点亮 LED)将引导您在 ALIENTEK 阿波罗STM32F429开发板上,基于 openvela 实时操作系统,完成一个基础的 LED 闪烁示例。
二、准备工作
在开始之前,请确保您已完成以下准备工作:
- 获取源码:参考文档快速入门下载最新代码。
- 了解
openvela架构:建议您预先阅读 openvela 架构以理解其分层设计。 - 查阅系统启动流程文档,获取更详细的启动时序和函数调用关系图。
- 准备好硬件及配套软件。
- 已完成前期的移植验证操作。
三、配置
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 示例
-
重新打开 minicom,连接成功后,在 Minicom 终端中按回车,您会看到
nsh>提示符。 -
运行 LED 示例,请输入以下命令:
leds -
您将看到开发板上的用户 LED 开始闪烁,同时串口终端会输出运行日志。
leds_new
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

所有评论(0)