Platform-Specific 配置 Guide¶
本指南提供 Nexus 嵌入式平台中每个支持平台的详细配置信息。
概述¶
Nexus 平台支持多个硬件平台,每个平台都有独特的特性和配置要求:
Native:用于开发和测试的 PC 仿真平台
STM32F4: ARM Cortex-M4 microcontrollers (STM32F407, STM32F429, STM32F446)
STM32H7: ARM Cortex-M7 microcontrollers (STM32H743, STM32H750)
GD32: GigaDevice microcontrollers (GD32F303, GD32F307)
ESP32:Espressif ESP32 WiFi/蓝牙 SoC
平台 Selection¶
使用选择菜单选择一个平台:
choice
prompt "Target Platform"
default PLATFORM_NATIVE
config PLATFORM_NATIVE
bool "Native Platform (PC Simulation)"
config PLATFORM_STM32
bool "STM32 Platform"
config PLATFORM_GD32
bool "GD32 Platform"
config PLATFORM_ESP32
bool "ESP32 Platform"
config PLATFORM_NRF52
bool "NRF52 Platform"
endchoice
一次只能选择一个平台。
Native 平台¶
概述¶
Native 平台提供无需硬件的 PC 仿真,用于开发和测试。它可在 Windows、Linux 和 macOS 上运行。
Features:
Simulated peripherals (UART, GPIO, SPI, I2C, Timer, ADC)
无需硬件
快速开发迭代
跨平台支持
Debugging with standard tools (GDB, Visual Studio)
快速开始¶
1. Use default configuration:
cp platforms/native/defconfig .config
python scripts/Kconfig/generate_config.py
2. Build:
CMake -B build -DPLATFORM=native
CMake --build build
3. Run:
./build/applications/blinky/blinky
平台 配置¶
Basic configuration:
CONFIG_PLATFORM_NATIVE=y
CONFIG_NATIVE_PLATFORM_NAME="Native Platform (PC Simulation)"
CONFIG_NATIVE_PLATFORM_VERSION="1.0.0"
Platform settings:
# Logging
CONFIG_NATIVE_ENABLE_LOGGING=y
CONFIG_NATIVE_LOG_LEVEL=3 # 0=None, 1=Error, 2=Warning, 3=Info, 4=Debug
# Statistics
CONFIG_NATIVE_ENABLE_STATISTICS=y
# Memory alignment
CONFIG_NATIVE_BUFFER_ALIGNMENT=4
Resource managers:
CONFIG_NATIVE_DMA_CHANNELS=8
CONFIG_NATIVE_ISR_SLOTS=64
支持 Peripherals¶
UART:
CONFIG_NATIVE_UART_ENABLE=y
CONFIG_NATIVE_UART_MAX_INSTANCES=4
CONFIG_INSTANCE_NX_UART_0=y
CONFIG_UART0_BAUDRATE=115200
GPIO:
CONFIG_NATIVE_GPIO_ENABLE=y
CONFIG_INSTANCE_NX_GPIOA=y
CONFIG_INSTANCE_NX_GPIOA_PIN0=y
SPI:
CONFIG_NATIVE_SPI_ENABLE=y
CONFIG_INSTANCE_NX_SPI_0=y
CONFIG_SPI0_MAX_SPEED=1000000
I2C:
CONFIG_NATIVE_I2C_ENABLE=y
CONFIG_INSTANCE_NX_I2C_0=y
CONFIG_NX_I2C0_SPEED_FAST=y
Timer:
CONFIG_NATIVE_TIMER_ENABLE=y
CONFIG_INSTANCE_NX_TIMER_0=y
CONFIG_TIMER0_FREQUENCY=1000000
ADC:
CONFIG_NATIVE_ADC_ENABLE=y
CONFIG_INSTANCE_NX_ADC_0=y
CONFIG_NX_ADC0_RESOLUTION_12=y
OSAL 配置¶
Native OSAL backend:
CONFIG_OSAL_NATIVE=y
CONFIG_OSAL_BACKEND_NAME="native"
CONFIG_OSAL_TICK_RATE_HZ=1000
CONFIG_OSAL_HEAP_SIZE=65536
CONFIG_OSAL_MAIN_STACK_SIZE=4096
Alternative: FreeRTOS on Native:
CONFIG_OSAL_FREERTOS=y
CONFIG_OSAL_BACKEND_NAME="FreeRTOS"
CONFIG_OSAL_TICK_RATE_HZ=1000
CONFIG_OSAL_HEAP_SIZE=32768
限制¶
模拟外设与实际硬件时序不匹配
无真实中断延迟
无电源管理
无硬件特定功能
最佳实践¶
使用本地平台进行算法开发
测试 hardware-independent code
在硬件部署前验证配置
用于 CI/CD 测试
STM32F4 平台¶
概述¶
STM32F4 平台支持 STMicroelectronics STM32F4 系列 ARM Cortex-M4 微控制器。
Supported Variants:
STM32F407:168 MHz,1 MB Flash,192 KB RAM
STM32F429:180 MHz,2 MB Flash,256 KB RAM
STM32F446:180 MHz,512 KB Flash,128 KB RAM
Features:
带 FPU 的 ARM Cortex-M4
最高 180 MHz
丰富的外设集
DMA 支持
低功耗模式
快速开始¶
1. Use default configuration:
cp platforms/STM32/defconfig_stm32f4 .config
python scripts/Kconfig/generate_config.py
2. Build:
CMake -B build -DPLATFORM=STM32 -DCHIP=STM32F407
CMake --build build
3. Flash:
openocd -f interface/stlink.cfg -f target/stm32f4x.cfg \
-c "program build/applications/blinky/blinky.elf verify reset exit"
平台 配置¶
Platform selection:
CONFIG_PLATFORM_STM32=y
CONFIG_STM32_PLATFORM_NAME="STM32 Platform"
CONFIG_STM32_PLATFORM_VERSION="1.0.0"
Chip selection:
# Chip family
CONFIG_STM32F4=y
# Chip variant
CONFIG_STM32F407=y
CONFIG_STM32_CHIP_NAME="STM32F407xx"
Platform settings:
CONFIG_STM32_ENABLE_LOGGING=y
CONFIG_STM32_LOG_LEVEL=3
CONFIG_STM32_ENABLE_STATISTICS=y
CONFIG_STM32_BUFFER_ALIGNMENT=4
Resource managers:
CONFIG_STM32_DMA_CHANNELS=8
CONFIG_STM32_ISR_SLOTS=64
Memory 配置¶
STM32F407 memory layout:
CONFIG_LINKER_RAM_START=0x20000000
CONFIG_LINKER_RAM_SIZE=0x00020000 # 128 KB
CONFIG_LINKER_FLASH_START=0x08000000
CONFIG_LINKER_FLASH_SIZE=0x00100000 # 1 MB
STM32F429 memory layout:
CONFIG_LINKER_RAM_START=0x20000000
CONFIG_LINKER_RAM_SIZE=0x00030000 # 192 KB
CONFIG_LINKER_FLASH_START=0x08000000
CONFIG_LINKER_FLASH_SIZE=0x00200000 # 2 MB
STM32F446 memory layout:
CONFIG_LINKER_RAM_START=0x20000000
CONFIG_LINKER_RAM_SIZE=0x00020000 # 128 KB
CONFIG_LINKER_FLASH_START=0x08000000
CONFIG_LINKER_FLASH_SIZE=0x00080000 # 512 KB
外设 配置¶
UART with DMA:
CONFIG_STM32_UART_ENABLE=y
CONFIG_STM32_UART_MAX_INSTANCES=6
CONFIG_INSTANCE_STM32_UART_1=y
CONFIG_UART1_BAUDRATE=115200
CONFIG_UART1_MODE_DMA=y
CONFIG_UART1_DMA_TX_CHANNEL=4
CONFIG_UART1_DMA_RX_CHANNEL=5
CONFIG_UART1_TX_PIN=9
CONFIG_UART1_RX_PIN=10
CONFIG_UART1_TX_PORT="GPIOA"
CONFIG_UART1_RX_PORT="GPIOA"
GPIO:
CONFIG_STM32_GPIO_ENABLE=y
SPI:
CONFIG_STM32_SPI_ENABLE=y
I2C:
CONFIG_STM32_I2C_ENABLE=y
Timer:
CONFIG_STM32_TIMER_ENABLE=y
OSAL 配置¶
FreeRTOS (recommended):
CONFIG_OSAL_FREERTOS=y
CONFIG_OSAL_BACKEND_NAME="FreeRTOS"
CONFIG_OSAL_TICK_RATE_HZ=1000
CONFIG_OSAL_HEAP_SIZE=32768
CONFIG_OSAL_MAIN_STACK_SIZE=2048
CONFIG_OSAL_MAX_PRIORITIES=32
Bare-metal:
CONFIG_OSAL_BAREMETAL=y
CONFIG_OSAL_BACKEND_NAME="baremetal"
CONFIG_OSAL_HEAP_SIZE=16384
时钟 配置¶
STM32F407 (168 MHz):
HSE:8 MHz 外部晶振
PLL:168 MHz 系统时钟
AHB:168 MHz
APB1:42 MHz
APB2:84 MHz
STM32F429 (180 MHz):
HSE:8 MHz 外部晶振
PLL:180 MHz 系统时钟
AHB:180 MHz
APB1:45 MHz
APB2:90 MHz
开发 Boards¶
STM32F407 Discovery:
STM32F407VGT6
8 MHz HSE
ST-LINK/V2 调试器
PD12-PD15 上的 LED
PA0 上的用户按钮
STM32F429 Discovery:
STM32F429ZIT6
8 MHz HSE
ST-LINK/V2-B 调试器
2.4" LCD 显示屏
PG13-PG14 上的 LED
调试¶
OpenOCD:
openocd -f interface/stlink.cfg -f target/stm32f4x.cfg
GDB:
arm-none-eabi-gdb build/applications/blinky/blinky.elf
(gdb) target remote localhost:3333
(gdb) monitor reset halt
(gdb) load
(gdb) continue
ST-LINK Utility:
使用 ST-LINK Utility 进行烧录
支持批量擦除和选项字节
限制¶
最大 180 MHz 时钟
与 STM32H7 相比 RAM 有限
No cache (except STM32F429)
仅单精度 FPU
最佳实践¶
对高吞吐量外设使用 DMA
为浮点运算启用 FPU
仔细配置时钟树
Use appropriate power modes
Validate pin assignments with datasheet
STM32H7 平台¶
概述¶
STM32H7 平台支持 STMicroelectronics STM32H7 系列 ARM Cortex-M7 微控制器。
Supported Variants:
STM32H743: 480 MHz, 2 MB Flash, 1 MB RAM
STM32H750: 480 MHz, 128 KB Flash, 1 MB RAM (bootloader variant)
Features:
ARM Cortex-M7 with double-precision FPU
Up to 480 MHz
Large RAM (up to 1 MB)
Advanced peripherals
Dual-bank Flash
Hardware crypto accelerator
Cache (I-Cache, D-Cache)
快速开始¶
1. Use default configuration:
cp platforms/STM32/defconfig_stm32h7 .config
python scripts/Kconfig/generate_config.py
2. Build:
CMake -B build -DPLATFORM=STM32 -DCHIP=STM32H743
CMake --build build
3. Flash:
openocd -f interface/stlink.cfg -f target/stm32h7x.cfg \
-c "program build/applications/blinky/blinky.elf verify reset exit"
平台 配置¶
Platform selection:
CONFIG_PLATFORM_STM32=y
CONFIG_STM32_PLATFORM_NAME="STM32 Platform"
CONFIG_STM32_PLATFORM_VERSION="1.0.0"
Chip selection:
# Chip family
CONFIG_STM32H7=y
# Chip variant
CONFIG_STM32H743=y
CONFIG_STM32_CHIP_NAME="STM32H743xx"
Platform settings:
CONFIG_STM32_ENABLE_LOGGING=y
CONFIG_STM32_LOG_LEVEL=3
CONFIG_STM32_ENABLE_STATISTICS=y
CONFIG_STM32_BUFFER_ALIGNMENT=4
Memory 配置¶
STM32H743 memory layout:
# DTCM RAM (64 KB) - fastest, for stack and critical data
CONFIG_LINKER_DTCM_START=0x20000000
CONFIG_LINKER_DTCM_SIZE=0x00010000
# AXI SRAM (512 KB) - main RAM
CONFIG_LINKER_RAM_START=0x24000000
CONFIG_LINKER_RAM_SIZE=0x00080000
# SRAM1 (128 KB)
CONFIG_LINKER_SRAM1_START=0x30000000
CONFIG_LINKER_SRAM1_SIZE=0x00020000
# SRAM2 (128 KB)
CONFIG_LINKER_SRAM2_START=0x30020000
CONFIG_LINKER_SRAM2_SIZE=0x00020000
# SRAM3 (32 KB)
CONFIG_LINKER_SRAM3_START=0x30040000
CONFIG_LINKER_SRAM3_SIZE=0x00008000
# SRAM4 (64 KB) - backup domain
CONFIG_LINKER_SRAM4_START=0x38000000
CONFIG_LINKER_SRAM4_SIZE=0x00010000
# Flash (2 MB, dual-bank)
CONFIG_LINKER_FLASH_START=0x08000000
CONFIG_LINKER_FLASH_SIZE=0x00200000
STM32H750 memory layout:
# Same RAM as STM32H743
CONFIG_LINKER_RAM_START=0x24000000
CONFIG_LINKER_RAM_SIZE=0x00080000
# Smaller Flash (128 KB)
CONFIG_LINKER_FLASH_START=0x08000000
CONFIG_LINKER_FLASH_SIZE=0x00020000
Memory Regions¶
DTCM (Data Tightly Coupled Memory):
64 KB
Zero wait state
Best for stack and frequently accessed data
Not accessible by DMA
AXI SRAM:
512 KB
Main application RAM
Accessible by all masters
Use for general purpose
SRAM1/2/3:
128 KB + 128 KB + 32 KB
Accessible by DMA
Use for DMA buffers
SRAM4:
64 KB
Backup domain
Retained in standby mode
Use for persistent data
外设 配置¶
UART with DMA:
CONFIG_STM32_UART_ENABLE=y
CONFIG_INSTANCE_STM32_UART_1=y
CONFIG_UART1_BAUDRATE=115200
CONFIG_UART1_MODE_DMA=y
CONFIG_UART1_DMA_TX_CHANNEL=4
CONFIG_UART1_DMA_RX_CHANNEL=5
High-speed SPI:
CONFIG_STM32_SPI_ENABLE=y
CONFIG_INSTANCE_STM32_SPI_1=y
CONFIG_SPI1_MAX_SPEED=50000000 # 50 MHz
Fast I2C:
CONFIG_STM32_I2C_ENABLE=y
CONFIG_INSTANCE_STM32_I2C_1=y
CONFIG_NX_I2C1_SPEED_FAST_PLUS=y # 1 MHz
OSAL 配置¶
FreeRTOS (recommended):
CONFIG_OSAL_FREERTOS=y
CONFIG_OSAL_BACKEND_NAME="FreeRTOS"
CONFIG_OSAL_TICK_RATE_HZ=1000
CONFIG_OSAL_HEAP_SIZE=32768
CONFIG_OSAL_MAIN_STACK_SIZE=2048
CONFIG_OSAL_MAX_PRIORITIES=32
时钟 配置¶
STM32H743 (480 MHz):
HSE: 25 MHz external crystal
PLL1: 480 MHz system clock
AHB: 240 MHz (with divider)
APB1: 120 MHz
APB2: 120 MHz
APB3: 120 MHz
APB4: 120 MHz
Clock domains:
sys_ck: 480 MHz (CPU)
hclk: 240 MHz (AHB)
pclk1-4: 120 MHz (APB)
Cache 配置¶
Instruction Cache:
CONFIG_STM32H7_ICACHE_ENABLE=y
Data Cache:
CONFIG_STM32H7_DCACHE_ENABLE=y
Cache coherency:
Use MPU to configure cacheable regions
Mark DMA buffers as non-cacheable
Use cache maintenance operations
开发 Boards¶
NUCLEO-H743ZI:
STM32H743ZIT6
25 MHz HSE
ST-LINK/V2-1 debugger
Arduino Uno V3 connectors
Ethernet PHY
STM32H743I-EVAL:
STM32H743XIH6
Full evaluation board
LCD display
Audio codec
以太网
USB HS/FS
调试¶
OpenOCD:
openocd -f interface/stlink.cfg -f target/stm32h7x.cfg
GDB:
arm-none-eabi-gdb build/applications/blinky/blinky.elf
(gdb) target remote localhost:3333
(gdb) monitor reset halt
(gdb) load
(gdb) continue
性能优化¶
Enable caches:
SCB_EnableICache();
SCB_EnableDCache();
Use DTCM for stack:
__attribute__((section(".dtcm"))) uint8_t stack[4096];
DMA buffers in SRAM1:
__attribute__((section(".sram1"))) uint8_t dma_buffer[1024];
MPU configuration:
Configure Flash as cacheable
Configure RAM as cacheable (except DMA buffers)
Use write-through for shared data
限制¶
Complex clock tree
Multiple RAM regions require careful planning
Cache coherency considerations
Higher power consumption than STM32F4
最佳实践¶
Use DTCM for stack and critical data
Enable caches for performance
Configure MPU for cache coherency
Use appropriate RAM region for each purpose
Validate clock configuration
Test with cache enabled/disabled
GD32 平台¶
概述¶
The GD32 platform supports GigaDevice GD32 series ARM Cortex-M microcontrollers, which are compatible with STM32.
Supported Variants:
GD32F303: Cortex-M4, 120 MHz, 256 KB Flash, 48 KB RAM
GD32F307: Cortex-M4, 120 MHz, 512 KB Flash, 96 KB RAM
Features:
STM32-compatible peripherals
Lower cost alternative
Good peripheral set
DMA 支持
快速开始¶
1. Create configuration:
CONFIG_PLATFORM_GD32=y
CONFIG_GD32F30X=y
CONFIG_GD32F303=y
2. Build:
CMake -B build -DPLATFORM=GD32 -DCHIP=GD32F303
CMake --build build
3. Flash:
openocd -f interface/stlink.cfg -f target/gd32f3x.cfg \
-c "program build/applications/blinky/blinky.elf verify reset exit"
平台 配置¶
Platform selection:
CONFIG_PLATFORM_GD32=y
CONFIG_GD32_PLATFORM_NAME="GD32 Platform"
Chip selection:
CONFIG_GD32F30X=y
CONFIG_GD32F303=y
CONFIG_GD32_CHIP_NAME="GD32F303xx"
Memory 配置¶
GD32F303:
CONFIG_LINKER_RAM_START=0x20000000
CONFIG_LINKER_RAM_SIZE=0x0000C000 # 48 KB
CONFIG_LINKER_FLASH_START=0x08000000
CONFIG_LINKER_FLASH_SIZE=0x00040000 # 256 KB
GD32F307:
CONFIG_LINKER_RAM_START=0x20000000
CONFIG_LINKER_RAM_SIZE=0x00018000 # 96 KB
CONFIG_LINKER_FLASH_START=0x08000000
CONFIG_LINKER_FLASH_SIZE=0x00080000 # 512 KB
外设 配置¶
GD32 peripherals are configured similarly to STM32:
# UART
CONFIG_GD32_UART_ENABLE=y
CONFIG_INSTANCE_GD32_UART_0=y
CONFIG_UART0_BAUDRATE=115200
# GPIO
CONFIG_GD32_GPIO_ENABLE=y
# SPI
CONFIG_GD32_SPI_ENABLE=y
# I2C
CONFIG_GD32_I2C_ENABLE=y
OSAL 配置¶
CONFIG_OSAL_FREERTOS=y
CONFIG_OSAL_TICK_RATE_HZ=1000
CONFIG_OSAL_HEAP_SIZE=16384
与 STM32 的差异¶
Some peripheral register differences
Different USB implementation
Slightly different DMA channels
Check GD32 datasheet for specifics
最佳实践¶
Verify peripheral compatibility
测试 thoroughly
Use GD32-specific documentation
Consider STM32 as reference
ESP32 平台¶
概述¶
The ESP32 platform supports Espressif ESP32 WiFi/Bluetooth SoC.
Features:
Dual-core Xtensa LX6
WiFi 802.11 b/g/n
Bluetooth Classic and BLE
丰富的外设集
Large ecosystem
快速开始¶
1. Create configuration:
CONFIG_PLATFORM_ESP32=y
CONFIG_ESP32_WROOM_32=y
2. Build:
idf.py build
3. Flash:
idf.py flash
平台 配置¶
CONFIG_PLATFORM_ESP32=y
CONFIG_ESP32_PLATFORM_NAME="ESP32 Platform"
Module selection:
CONFIG_ESP32_WROOM_32=y
外设 配置¶
# UART
CONFIG_ESP32_UART_ENABLE=y
# GPIO
CONFIG_ESP32_GPIO_ENABLE=y
# SPI
CONFIG_ESP32_SPI_ENABLE=y
# I2C
CONFIG_ESP32_I2C_ENABLE=y
# WiFi
CONFIG_ESP32_WIFI_ENABLE=y
# Bluetooth
CONFIG_ESP32_BT_ENABLE=y
OSAL 配置¶
ESP32 uses FreeRTOS:
CONFIG_OSAL_FREERTOS=y
CONFIG_OSAL_TICK_RATE_HZ=1000
CONFIG_OSAL_HEAP_SIZE=65536
WiFi 配置¶
CONFIG_ESP32_WIFI_SSID="MyNetwork"
CONFIG_ESP32_WIFI_PASSWORD="MyPassword"
CONFIG_ESP32_WIFI_MODE_STA=y
最佳实践¶
Use ESP-IDF for WiFi/BT
Manage dual-core carefully
Monitor heap usage
Use appropriate power modes
平台 Comparison¶
Feature Comparison¶
Feature |
Native |
STM32F4 |
STM32H7 |
GD32 |
ESP32 |
|---|---|---|---|---|---|
CPU |
x86/ARM |
Cortex-M4 |
Cortex-M7 |
Cortex-M4 |
Xtensa LX6 |
Max Freq |
N/A |
180 MHz |
480 MHz |
120 MHz |
240 MHz |
Flash |
N/A |
Up to 2 MB |
Up to 2 MB |
Up to 512 KB |
Up to 16 MB |
RAM |
N/A |
Up to 256 KB |
Up to 1 MB |
Up to 96 KB |
520 KB |
FPU |
是 |
Single |
Double |
Single |
否 |
WiFi |
否 |
否 |
否 |
否 |
是 |
Cost |
Free |
Low |
Medium |
Very Low |
Low |
用例建议¶
Native:
开发 and testing
Algorithm validation
CI/CD pipelines
跨平台开发
STM32F4:
通用嵌入式应用
Motor control
Industrial automation
成本敏感型项目
STM32H7:
高性能应用
Digital signal processing
Graphics applications
Data acquisition
GD32:
成本敏感型项目
STM32 alternative
Simple applications
ESP32:
IoT applications
WiFi connectivity
Bluetooth devices
Smart home
另请参阅¶
Kconfig 教程 - Kconfig tutorial
外设 配置 Guide - Peripheral configuration
构建系统 - Build system guide
移植指南 - Platform porting guide