4. SDK 目录结构
本章按 Nsing.N32G41x_Library.1.1.0 的实际文件树说明各目录与文件的作用,只写随包存在的目录与文件。文中路径均相对于 SDK 根目录;器件支持包、量产工具等资料包之外的支持文件归“资料与工具导航”一章。
4.1 顶层结构
- 📁 以
/结尾的为目录 - 📄 其余为文件
Nsing.N32G41x_Library.1.1.0/
├── .vscode/
│ ├── launch.json
│ ├── settings.json
│ └── tasks.json
├── firmware/
│ ├── CMSIS/
│ └── n32g41x_std_periph_driver/
├── jlink/
│ └── flash.jlink
├── Middlewares/
│ └── FreeRTOSv202604.01-LTS/
├── projects/
│ └── n32g41x_EVAL/
└── readme.txt
| 相对路径 | 作用 |
|---|---|
firmware/ |
固件库:CMSIS 内核与器件支持文件、标准外设驱动库 |
Middlewares/ |
FreeRTOS 内核源码,供 FreeRTOS 示例工程引用 |
projects/n32g41x_EVAL/ |
评估板工程:板级支持、外设示例与应用工程 |
jlink/flash.jlink |
J-Link Commander 下载脚本,供 GCC 工程的 download 目标调用 |
.vscode/ |
VS Code 的 GDB 调试、构建任务与编辑器配置 |
readme.txt |
SDK 版本记录与各版本改动说明 |
4.2 Firmware 固件库
📁 firmware/CMSIS
core/ 为 Arm CMSIS-Core 头文件,Cortex-M4 工程使用其中的 core_cm4.h;device/ 为 N32G41x 器件支持文件与三套启动文件。
CMSIS/
├── core/
│ ├── cmsis_armcc.h
│ ├── cmsis_armclang.h
│ ├── cmsis_armclang_ltm.h
│ ├── cmsis_compiler.h
│ ├── cmsis_gcc.h
│ ├── cmsis_iccarm.h
│ ├── cmsis_version.h
│ ├── core_armv81mml.h
│ ├── core_armv8mbl.h
│ ├── core_armv8mml.h
│ ├── core_cm0.h
│ ├── core_cm0plus.h
│ ├── core_cm1.h
│ ├── core_cm23.h
│ ├── core_cm3.h
│ ├── core_cm33.h
│ ├── core_cm35p.h
│ ├── core_cm4.h
│ ├── core_cm7.h
│ ├── core_sc000.h
│ ├── core_sc300.h
│ ├── mpu_armv7.h
│ ├── mpu_armv8.h
│ └── tz_context.h
└── device/
├── startup/
│ ├── startup_n32g41x.s
│ ├── startup_n32g41x_EWARM.S
│ └── startup_n32g41x_gcc.s
├── n32g41x.h
├── n32g41x_conf.h
├── n32g41x_flash.ld
├── system_n32g41x.c
└── system_n32g41x.h
📁 firmware/n32g41x_std_periph_driver
标准外设驱动库:inc/ 存放驱动头文件,src/ 存放同名实现文件,每个驱动模块一对。
n32g41x_std_periph_driver/
├── inc/
│ ├── misc.h
│ ├── n32g41x_adc.h
│ ├── n32g41x_can.h
│ ├── n32g41x_comp.h
│ ├── n32g41x_crc.h
│ ├── n32g41x_dbg.h
│ ├── n32g41x_dma.h
│ ├── n32g41x_exti.h
│ ├── n32g41x_flash.h
│ ├── n32g41x_gpio.h
│ ├── n32g41x_i2c.h
│ ├── n32g41x_iwdg.h
│ ├── n32g41x_opamp.h
│ ├── n32g41x_pwr.h
│ ├── n32g41x_rcc.h
│ ├── n32g41x_rtc.h
│ ├── n32g41x_spi.h
│ ├── n32g41x_tim.h
│ ├── n32g41x_usart.h
│ └── n32g41x_wwdg.h
└── src/
├── misc.c
├── n32g41x_adc.c
├── n32g41x_can.c
├── n32g41x_comp.c
├── n32g41x_crc.c
├── n32g41x_dbg.c
├── n32g41x_dma.c
├── n32g41x_exti.c
├── n32g41x_flash.c
├── n32g41x_gpio.c
├── n32g41x_i2c.c
├── n32g41x_iwdg.c
├── n32g41x_opamp.c
├── n32g41x_pwr.c
├── n32g41x_rcc.c
├── n32g41x_rtc.c
├── n32g41x_spi.c
├── n32g41x_tim.c
├── n32g41x_usart.c
└── n32g41x_wwdg.c
| 相对路径 | 作用 |
|---|---|
firmware/CMSIS/device/n32g41x.h |
器件头文件:外设寄存器结构、基地址与中断号 |
firmware/CMSIS/device/system_n32g41x.c |
系统时钟初始化; 要求定义 N32G412 或 N32G415 之一,默认 HSI 经 PLL 输出 80 MHz(N32G412)或 96 MHz(N32G415) |
firmware/CMSIS/device/system_n32g41x.h |
SYSCLK_SRC、SYSCLK_FREQ 等系统时钟配置宏与可选档位 |
firmware/CMSIS/device/n32g41x_conf.h |
汇总包含全部驱动头文件,并定义 assert_param |
firmware/CMSIS/device/startup/startup_n32g41x.s |
Keil MDK-ARM 启动文件 |
firmware/CMSIS/device/startup/startup_n32g41x_EWARM.S |
IAR EWARM 启动文件 |
firmware/CMSIS/device/startup/startup_n32g41x_gcc.s |
GCC 启动文件 |
firmware/CMSIS/device/n32g41x_flash.ld |
GCC 链接脚本 |
firmware/n32g41x_std_periph_driver/inc/misc.h |
NVIC 与 SysTick 配置函数,对应第 5 章的 NVIC 模块 |
firmware/n32g41x_std_periph_driver/inc/n32g41x_spi.h |
SPI 与 I2S 共用的驱动头文件 |
4.3 Projects 工程目录
projects/ 下只有 n32g41x_EVAL/ 一个评估板工程目录,包含板级支持、外设示例与应用工程三部分。
📁 projects/n32g41x_EVAL/bsp
板级支持代码,示例工程通过 bsp/inc 头文件路径引用。
bsp/
├── inc/
│ ├── delay.h
│ ├── log.h
│ └── n32g41x_stb.h
└── src/
├── delay.c
├── log.c
└── print_remap.c
📁 projects/n32g41x_EVAL/examples
外设示例,按外设分类分目录,每个分类下为若干示例工程。
examples/
├── ADC/
├── bxCAN/
├── COMP/
├── Cortex-M4/
├── CRC/
├── DMA/
├── EXTI/
├── Flash/
├── FreeRTOS/
├── GPIO/
├── I2C/
├── I2S/
├── IWDG/
├── NVIC/
├── OPAMP/
├── PWR/
├── RCC/
├── RTC/
├── SPI/
├── TIM/
├── USART/
└── WWDG/
📁 projects/n32g41x_EVAL/applications
应用工程,演示示例目录之外的完整使用场景。
applications/
├── BOOT_As_ExtFLASH/
│ ├── inc/
│ │ ├── main.h
│ │ └── n32g41x_it.h
│ ├── MDK-ARM/
│ │ ├── BOOT_As_ExtFLASH.uvoptx
│ │ └── BOOT_As_ExtFLASH.uvprojx
│ └── src/
│ ├── main.c
│ └── n32g41x_it.c
├── GCC_demo/
│ ├── GCC/
│ │ └── Makefile
│ ├── inc/
│ │ ├── main.h
│ │ └── n32g41x_it.h
│ └── src/
│ ├── main.c
│ └── n32g41x_it.c
└── JumpToBOOT/
├── inc/
│ ├── main.h
│ └── n32g41x_it.h
├── MDK-ARM/
│ ├── project.uvoptx
│ └── project.uvprojx
└── src/
├── main.c
└── n32g41x_it.c
| 相对路径 | 作用 |
|---|---|
projects/n32g41x_EVAL/bsp/inc/n32g41x_stb.h |
LED1 至 LED3、KEY1 至 KEY3 与 WKUP 按键的端口、引脚、时钟与有效电平宏 |
projects/n32g41x_EVAL/bsp/src/log.c |
日志串口初始化 log_init:USART1,TX 为 PA9、RX 为 PA10,115200 bps |
projects/n32g41x_EVAL/bsp/inc/log.h |
log_info、log_warning、log_error、log_debug 宏,由 LOG_ENABLE 与 LOG_LEVEL 控制输出 |
projects/n32g41x_EVAL/bsp/inc/delay.h |
SysTick 延时函数 SysTick_Delay_Us、SysTick_Delay_Ms |
projects/n32g41x_EVAL/bsp/src/print_remap.c |
标准输入输出重定向函数 _write、_read |
projects/n32g41x_EVAL/applications/BOOT_As_ExtFLASH/ |
把 BOOT 区域作为扩展 Flash 编程:BOOT 区域处于写保护时按下 PA4 按键经选项字节解除写保护并复位,否则擦除 0x1FFF0000 起的一页、写入数据后逐字校验,结果从日志串口输出;只提供 Keil 工程 |
projects/n32g41x_EVAL/applications/GCC_demo/ |
LED 闪烁的 GCC 工程:Makefile 定义 N32G412,使用 startup_n32g41x_gcc.s 与 n32g41x_flash.ld,提供 all、clean、download、debug 目标 |
projects/n32g41x_EVAL/applications/JumpToBOOT/ |
从应用程序跳转到 BOOT:按下 WKUP 按键后读取 0x1FFF0000 处的栈顶地址与 0x1FFF0004 处的复位向量并跳转;只提供 Keil 工程 |
4.4 单个示例的标准结构
每个示例目录包含源码、头文件、Keil 与 IAR 工程以及说明文件。以 examples/GPIO/LedBlink/ 为例:
LedBlink/
├── EWARM/
│ ├── project.ewd
│ ├── project.ewp
│ └── project.eww
├── inc/
│ ├── main.h
│ └── n32g41x_it.h
├── MDK-ARM/
│ ├── project.uvoptx
│ └── project.uvprojx
├── src/
│ ├── main.c
│ └── n32g41x_it.c
└── readme.txt
| 相对路径 | 作用 |
|---|---|
src/main.c |
示例主程序:外设初始化与主循环 |
src/n32g41x_it.c |
中断服务函数 |
inc/main.h、inc/n32g41x_it.h |
示例头文件与中断函数声明 |
MDK-ARM/project.uvprojx |
Keil 工程,含 N32G412(器件 N32G412RBL7)与 N32G415(器件 N32G415RBL7)两个目标,分别定义同名编译宏与 USE_STDPERIPH_DRIVER |
EWARM/project.eww |
IAR 工作区,含 N32G412 与 N32G415 两个配置 |
readme.txt |
中英文说明:功能说明、使用环境(开发环境与支持芯片)、使用说明(系统配置与使用方法)、注意事项 |
示例目录中的工程文件统一命名为 project.uvprojx / project.uvoptx 与 project.eww / project.ewp / project.ewd,示例目录中没有 GCC 工程。以下情况与标准结构不同:
| 情况 | 示例 | 结构 |
|---|---|---|
| 成对子工程共用说明文件 | SPI/SPI_9Bit/ |
父目录放 readme.txt,SPI_9Bit_Master/ 与 SPI_9Bit_Slave/ 各自包含完整的 src/、inc/、MDK-ARM/、EWARM/ |
| 共享代码目录 | RTC/Common/ |
只有 inc/User_RTC_Config.h 与 src/User_RTC_Config.c,没有工程文件 |
| 辅助源文件 | bxCAN/CAN_LoopBack/、I2C/EEPROM_Polling/、SPI/SPI_FLASH/ |
src/ 与 inc/ 中另有 can_config.c、i2c_eeprom.c、spi_flash.c 等辅助驱动 |
示例工程通过相对路径引用 firmware/ 与 bsp/,复制示例时保持其在 projects/n32g41x_EVAL/examples/<分类>/ 下的目录层级,否则需要同步修改工程中的头文件路径与源文件路径。
4.5 开发辅助资源
| 相对路径 | 作用 |
|---|---|
jlink/flash.jlink |
J-Link Commander 脚本:复位、加载 build/output.hex、复位、运行、退出 |
.vscode/launch.json |
gdb-arm 调试配置:使用 arm-none-eabi-gdb 连接 localhost:2331 的 GDB 服务,加载程序、复位并在 main 处设置断点 |
.vscode/tasks.json |
make_debug 构建任务,在 GCC 工程目录执行 make debug |
.vscode/settings.json |
编辑器设置与文件关联 |
projects/n32g41x_EVAL/applications/GCC_demo/GCC/Makefile |
GCC 构建脚本:all 生成 build/output.elf、.hex、.bin;download 调用 JLink.exe 执行 jlink/flash.jlink;debug 启动 JLinkGDBServer.exe |
.vscode/tasks.json 中的工作目录写为 projects/n32h41x_EVAL/applications/GCC_demo/GCC,与实际目录 projects/n32g41x_EVAL 不一致,直接执行该任务会找不到工程。.vscode/launch.json 用固定路径加载 ELF 文件与 GDB 程序,Makefile 中的 GCC 工具链路径与 J-Link 安装路径也是固定值。使用前请按本机环境修改这些路径。
以下支持资源不在 SDK 根目录内,需从官网下载中心获取,名称与版本见“资料与工具导航”一章:
| 资源 | 作用 |
|---|---|
Nsingtech.N32G41x_DFP |
Keil 器件支持包:.pack 安装文件、.pdsc 器件描述、Flash/N32G41x_64.FLM 与 Flash/N32G41x_128.FLM 编程算法、器件寄存器描述文件 |
N32G41x_Keil_FLASH_Programming_Algorithm |
Keil Flash 编程算法源代码工程,编译生成上述两个编程算法 |
Nations_Device_PACK_Add_To_IAR_Tool |
IAR 型号补丁安装程序,为 IAR 添加 N32G41x 器件型号 |
JLink_tool_adds_Nations_chip |
J-Link 型号补丁,为 J-Link 添加 N32G41x 器件型号 |