快速开始¶
本指南将帮助您创建第一个 Nexus 应用程序 - 一个简单的 LED 闪烁程序。
前提条件¶
请确保您已完成 安装 指南。
创建新项目¶
创建项目目录:
mkdir my_blinky
cd my_blinky
Create
CMakeLists.txt:
cmake_minimum_required(VERSION 3.16)
project(my_blinky C)
# Add Nexus as subdirectory
add_subdirectory(nexus)
# Create application
add_executable(blinky main.c)
target_link_libraries(blinky PRIVATE nexus_hal nexus_platform)
Create
main.c:
#include "hal/nx_hal.h"
#define LED_PORT 0 /* Port A */
#define LED_PIN 5 /* Pin 5 */
int main(void)
{
/* Initialize HAL */
nx_hal_init();
/* Configure GPIO */
nx_gpio_config_t cfg = {
.mode = NX_GPIO_MODE_OUTPUT_PP,
.pull = NX_GPIO_PULL_NONE,
.speed = NX_GPIO_SPEED_LOW,
};
/* Get GPIO device */
nx_gpio_t* led = nx_factory_gpio_with_config(LED_PORT, LED_PIN, &cfg);
if (!led) {
return -1;
}
/* Blink loop */
while (1) {
led->toggle(led);
/* Platform-specific delay */
for (volatile int i = 0; i < 1000000; i++);
}
/* Cleanup (never reached) */
nx_factory_gpio_release(led);
nx_hal_deinit();
return 0;
}
构建本地版本(测试)¶
# Configure for native platform
cmake -B build -DNEXUS_PLATFORM=native
# Build
cmake --build build
# Run
./build/blinky
构建 STM32F4 版本¶
# Configure for STM32F4
cmake -B build-stm32f4 \
-DCMAKE_TOOLCHAIN_FILE=nexus/cmake/toolchains/arm-none-eabi.cmake \
-DNEXUS_PLATFORM=stm32f4
# Build
cmake --build build-stm32f4
# Flash (using OpenOCD)
openocd -f interface/stlink.cfg -f target/stm32f4x.cfg \
-c "program build-stm32f4/blinky.elf verify reset exit"
理解代码¶
HAL Initialization:
nx_hal_init(); /* Initialize HAL subsystem */
这将初始化 HAL 子系统,包括平台特定硬件、资源管理器和设备注册表。
GPIO Configuration:
nx_gpio_config_t cfg = {
.mode = NX_GPIO_MODE_OUTPUT_PP, /* Push-pull output */
.pull = NX_GPIO_PULL_NONE, /* No pull-up/down */
.speed = NX_GPIO_SPEED_LOW, /* Low speed */
};
nx_gpio_t* led = nx_factory_gpio_with_config(LED_PORT, LED_PIN, &cfg);
工厂函数使用指定的配置创建 GPIO 设备实例。它返回指向 GPIO 接口的指针。
GPIO Operations:
led->toggle(led); /* Toggle pin state */
led->write(led, 1); /* Set high */
led->write(led, 0); /* Set low */
uint8_t state = led->read(led); /* Read state */
GPIO 接口提供基本 I/O 操作的方法。
Resource Cleanup:
nx_factory_gpio_release(led); /* Release GPIO device */
nx_hal_deinit(); /* Deinitialize HAL */
使用完毕后务必释放设备以释放资源。
添加 UART 输出¶
为您的应用程序添加串口输出:
#include "hal/nx_hal.h"
#include <string.h>
int main(void)
{
nx_hal_init();
/* Configure UART */
nx_uart_config_t uart_cfg = {
.baudrate = 115200,
.word_length = 8,
.stop_bits = 1,
.parity = 0,
};
nx_uart_t* uart = nx_factory_uart_with_config(0, &uart_cfg);
if (!uart) {
return -1;
}
/* Get synchronous TX interface */
nx_tx_sync_t* tx = uart->get_tx_sync(uart);
/* Send message */
const char* msg = "Hello, Nexus!\r\n";
tx->send(tx, (uint8_t*)msg, strlen(msg), 1000);
/* Cleanup */
nx_factory_uart_release(uart);
nx_hal_deinit();
return 0;
}
下一步¶
硬件抽象层 (HAL) - 了解更多 HAL 接口
操作系统抽象层 (OSAL) - 使用 OSAL 添加多任务
日志框架 - 为应用程序添加日志
浏览
applications/目录中的示例应用程序