串口增加DMA发送与RX中断,主动打印开关(默认关),新增CLI命令框架(独立任务,支持\r\n/\n\r/\r/\n结束符)

This commit is contained in:
evan.liu 2026-09-01 20:28:03 +08:00
parent f4c87f538d
commit 41ff7fb52a
38 changed files with 3575 additions and 1516 deletions

100
AGENTS.md Normal file
View File

@ -0,0 +1,100 @@
# AGENTS.md
## 项目概述
本仓库是基于国民技术(Nations)**N32WB031 BLE SoC** 的嵌入式固件工程集合。N32WB031 是一颗 Cortex-M0 内核的低功耗蓝牙芯片(64MHz HSI,Flash 256KB,RAM 48KB)。
当前唯一的活跃工程是 **`mcm-ddc-04/`**:一个基于 N32WB03x SDK V2.0.0 从零搭建的裸工程,演示 UART 串口打印(printf 重定向 + DMA 发送 + RX 中断)、CLI 命令框架、FreeRTOS 多任务、GPIO 点灯。目标硬件为 **N32WB031_STB_V1.3 开发板**(NS-LINK 调试器,SWD 下载)。
仓库顶层目录:
- `mcm-ddc-04/` — 主工程(应用代码、MDK 工程文件、开发日志)
- `nations-tec/` — 厂商资源:SDK V2.0.0、DFP 器件包、STB 开发板资料(原理图/BOM/PCB)、官方 PDF 文档。**这些内容为只读参考资料,不要修改。**
- `app/`、`Boot/`、`docs/` — 顶层空目录,为后续规划预留的占位(当前无内容)
关键参考路径(相对仓库根):
- SDK:`nations-tec/N32WB03x_SDK_V2.0.0`(固件库 `firmware/`、中间件 `middlewares/Nationstech/ble_library` 与 `middlewares/Third_Party/FreeRTOS`、官方例程 `projects/n32wb03x_EVAL/`、DFU 工具 `utilities/dfu`)
- 官方例程:USART printf `projects/n32wb03x_EVAL/peripheral/USART/Printf`、点灯 `peripheral/GPIO/LedBlink`、FreeRTOS `application/FreeRTOS/FreeRTOS_ThreadCreation`
- 开发日志与详细设计决策:`mcm-ddc-04/docs/开发日志.md`
## 工程结构(mcm-ddc-04)
```
mcm-ddc-04/
├── app/
│ ├── main.c # 入口:SystemCoreClockUpdate → USART 初始化+banner → LED 初始化 → 建队列/任务/CLI → vTaskStartScheduler
│ ├── bsp_usart.c/.h # USART1 初始化(PB6/PB7,115200 8N1)+ fputc 重定向('\n' 前自动补 '\r')+ DMA TX(CH1,轮询完成)+ RXDNE 中断字节队列 + TX 互斥锁
│ ├── bsp_led.c/.h # LED1(PB0)/LED2(PA6) 初始化、on/off/toggle
│ ├── app_tasks.c/.h # 3 个 FreeRTOS 任务 + 日志队列(生产者-消费者模型)+ 主动打印开关(默认关)
│ ├── app_cli.c/.h # CLI 独立任务:行接收/解析/执行/应答(应答走 DMA TX),命令表驱动
│ ├── n32wb03x_it.c/.h # NMI / HardFault 异常处理 + USART1_IRQHandler(转发到 bsp_usart_rx_isr_handler)
│ └── FreeRTOSConfig.h # heap 8KB,SVC/PendSV/SysTick 映射给 FreeRTOS port
├── MDK-ARM/
│ ├── embeddedSrc.uvprojx / .uvoptx # Keil µVision5 工程文件
│ ├── Objects/ # 编译产物(embeddedSrc.axf / .hex)
│ ├── bin/ # fromelf 生成的 embeddedSrc.bin
│ └── build.log
└── docs/开发日志.md
```
SDK 源码(固件库、CMSIS、FreeRTOS V9.0.0、启动文件)通过相对路径 `..\..\nations-tec\N32WB03x_SDK_V2.0.0` 被 uvprojx 引用,**不复制进工程**。因此 `mcm-ddc-04` 目录不能脱离仓库根单独移动。
工程配置:器件 `N32WB031`,IROM 0x01000000 / 0x40000,IRAM 0x20000000 / 0xC000,MicroLIB,全局宏 `N32WB03X, USE_STDPERIPH_DRIVER`。
## 构建与烧录
工具链:Keil µVision5(ARMCC V5.06 update 6),安装于 `D:\Keil_v5`。
命令行构建(工作目录必须为 `mcm-ddc-04/MDK-ARM`):
```bash
"D:\Keil_v5\UV4\UV4.exe" -b embeddedSrc.uvprojx -j0 -o build.log
```
构建成功后自动执行 `fromelf --bin --output=.\bin\embeddedSrc.bin .\Objects\embeddedSrc.axf`。
当前基线结果:**0 Error(s), 0 Warning(s)**,体积 `Code=14712 RO-data=944 RW-data=112 ZI-data=10696`。
烧录与运行:
1. Keil 打开 `MDK-ARM/embeddedSrc.uvprojx`,F7 编译
2. NS-LINK 接 SWD(PA4/PA5),F8 下载
3. 串口助手接 PB6(TX)/PB7(RX),115200 8N1,复位后应看到启动 banner 与 `n32> ` CLI 提示符(输入 `help` 查看命令;LED 滚动日志默认关闭,用 `log on` 打开)
注意:本工程当前尚未在真实硬件上实测(见开发日志第 8、9、10 节)。
## 硬件引脚约束(重要)
- **SWD 调试管脚 SWCLK=PA4 / SWDIO=PA5:应用程序绝对禁止占用**,否则下载/调试失效。
- 板载 LED:LED1=PB0(跳线 J21)、LED2=PA6(跳线 J22),蓝色,4.7K 限流。
- USART1:TX=PB6 / RX=PB7,复用 AF4,经排针 J3 引出。
- PB8/PB9 默认接 32.768K 晶振;PB3 有下拉注意事项(用户手册 5.2.4)。
## 实时架构约定
- 使用 FreeRTOS V9.0.0 原生 API(`xTaskCreate` / `vTaskDelay` / `xQueue`),**不使用 cmsis_os 封装**。
- 任务模型:LedTask(LED1,500ms)、LedTask2(LED2,1000ms)为生产者,只向日志队列投递 `LogMsg_t`;PrintTask(优先级 3,栈 256 字)消费队列并 printf。**主动日志打印由 `AppTasks_SetLogEnabled()` 控制,默认关闭**(CLI 命令 `log on|off` 切换)。新增需要打印的任务时沿用此生产者-消费者模式,不要在中断或多个任务里直接 `printf`。
- CLI 任务(优先级 3,栈 256 字,见 `app_cli.c`):从 USART1 RXDNE 中断的字节队列取输入,行结束符 `\r\n` / `\n\r` / `\r` / `\n` 均识别;解析-执行-应答一体化,应答走 `bsp_usart_write_dma`(DMA_CH1)。新命令在 `s_cmds[]` 命令表中注册。
- 串口输出并发:PrintTask 的整条 printf 与 CLI 的整段应答分别持有 `bsp_usart_tx_lock()` 互斥锁,避免字节级交错;调度器启动前该锁为空操作。
- SysTick 由 FreeRTOS port 接管(`FreeRTOSConfig.h` 中 `xPortSysTickHandler → SysTick_Handler` 映射):`main` 中不要手动 `SysTick_Config`,`n32wb03x_it.c` 中不要重复定义 SVC/PendSV/SysTick_Handler。
- USART1_IRQn 中断优先级为 3(最低),因 ISR 内调用 FreeRTOS FromISR API,必须 ≥ `configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY`(=3)。
- `configTOTAL_HEAP_SIZE = 8*1024`,使用 heap_4。
## 代码风格
- 语言为 C(ARMCC,C 库 MicroLIB),文件头与函数头使用 Doxygen 风格注释(`@file` / `@brief`),注释用英文。
- 命名:BSP 层函数 `bsp_<module>_<action>`;应用层聚合函数 `AppTasks_*` / `AppCli_*`;引脚/时钟等硬件参数集中在头文件顶部宏定义。
- 使用 SDK 标准外设库 API(如 `RCC_EnableAPB2PeriphClk`、`GPIO_InitPeripheral`、`USART_Init`),不要直接操作寄存器。
- 新增 GPIO 前必须核对开发日志第 4 节引脚分配表,避开 PA4/PA5。
## 测试策略
无自动化测试框架;验证方式为:
1. Keil 命令行构建必须保持 0 Error / 0 Warning;
2. 烧录后通过串口输出与 LED 行为人工确认。
## 其他注意事项
- `nations-tec/` 下的 SDK、器件包与 PDF 为第三方只读资料,改动应只发生在 `mcm-ddc-04/`(或新增工程目录)内。
- BLE 协议栈(`middlewares/Nationstech/ble_library`)尚未接入;官方 BLE 例程基于裸机 `rwip_schedule` 调度,与 FreeRTOS 整合需要专门设计(见开发日志第 9 节)。

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,46 @@
.\objects\app_cli.o: ..\app\app_cli.c
.\objects\app_cli.o: ..\app\app_cli.h
.\objects\app_cli.o: ..\app\bsp_usart.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h
.\objects\app_cli.o: D:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmInstr.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmFunc.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\system_n32wb03x.h
.\objects\app_cli.o: D:\Keil_v5\ARM\ARMCC\Bin\..\include\stdbool.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x_conf.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_adc.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_crc.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_dma.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_exti.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_gpio.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_i2c.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_iwdg.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_pwr.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rcc.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rtc.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_spi.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_tim.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_usart.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_lpuart.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_wwdg.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_irgen.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h
.\objects\app_cli.o: ..\app\bsp_led.h
.\objects\app_cli.o: ..\app\app_tasks.h
.\objects\app_cli.o: D:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
.\objects\app_cli.o: D:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
.\objects\app_cli.o: D:\Keil_v5\ARM\ARMCC\Bin\..\include\stdarg.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h
.\objects\app_cli.o: D:\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h
.\objects\app_cli.o: ..\app\FreeRTOSConfig.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\portable.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0\portmacro.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\task.h
.\objects\app_cli.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\list.h

Binary file not shown.

View File

@ -29,6 +29,7 @@
.\objects\app_tasks.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h .\objects\app_tasks.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h
.\objects\app_tasks.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h .\objects\app_tasks.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h
.\objects\app_tasks.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h .\objects\app_tasks.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h
.\objects\app_tasks.o: ..\app\bsp_usart.h
.\objects\app_tasks.o: D:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h .\objects\app_tasks.o: D:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
.\objects\app_tasks.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h .\objects\app_tasks.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h
.\objects\app_tasks.o: D:\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h .\objects\app_tasks.o: D:\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h

View File

@ -29,3 +29,15 @@
.\objects\bsp_usart.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h .\objects\bsp_usart.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h
.\objects\bsp_usart.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h .\objects\bsp_usart.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h
.\objects\bsp_usart.o: D:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h .\objects\bsp_usart.o: D:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
.\objects\bsp_usart.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h
.\objects\bsp_usart.o: D:\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h
.\objects\bsp_usart.o: ..\app\FreeRTOSConfig.h
.\objects\bsp_usart.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h
.\objects\bsp_usart.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\portable.h
.\objects\bsp_usart.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h
.\objects\bsp_usart.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0\portmacro.h
.\objects\bsp_usart.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h
.\objects\bsp_usart.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\task.h
.\objects\bsp_usart.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\list.h
.\objects\bsp_usart.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\queue.h
.\objects\bsp_usart.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\semphr.h

View File

@ -21,31 +21,20 @@ Target DLL: CMSIS_AGDI.dll V1.32.6.0
Dialog DLL: TARMCM1.DLL V1.14.2.0 Dialog DLL: TARMCM1.DLL V1.14.2.0
<h2>Project:</h2> <h2>Project:</h2>
H:\caiic_workspace\mothercup\embeddedSrc\MDK-ARM\embeddedSrc.uvprojx H:\caiic_workspace\mothercup\mcm-ddc-04\MDK-ARM\embeddedSrc.uvprojx
Project File Date: 09/01/2026 Project File Date: 09/01/2026
<h2>Output:</h2> <h2>Output:</h2>
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin' *** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin'
Rebuild target 'N32WB03X' Build target 'N32WB03X'
assembling startup_n32wb03x.s...
compiling list.c...
compiling timers.c...
compiling port.c...
compiling heap_4.c...
compiling queue.c...
compiling tasks.c...
compiling system_n32wb03x.c...
compiling n32wb03x_gpio.c...
compiling n32wb03x_rcc.c...
compiling misc.c...
compiling n32wb03x_usart.c...
compiling main.c...
compiling bsp_usart.c...
compiling bsp_led.c...
compiling app_tasks.c...
compiling n32wb03x_it.c... compiling n32wb03x_it.c...
compiling main.c...
compiling app_tasks.c...
compiling app_cli.c...
compiling n32wb03x_dma.c...
compiling bsp_usart.c...
linking... linking...
Program Size: Code=8248 RO-data=724 RW-data=100 ZI-data=10532 Program Size: Code=14712 RO-data=944 RW-data=112 ZI-data=10696
FromELF: creating hex file... FromELF: creating hex file...
After Build - User command #1: fromelf --bin --output=.\bin\embeddedSrc.bin .\Objects\embeddedSrc.axf After Build - User command #1: fromelf --bin --output=.\bin\embeddedSrc.bin .\Objects\embeddedSrc.axf
".\Objects\embeddedSrc.axf" - 0 Error(s), 0 Warning(s). ".\Objects\embeddedSrc.axf" - 0 Error(s), 0 Warning(s).
@ -61,7 +50,7 @@ Package Vendor: Nationstech
D:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device D:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device
<h2>Collection of Component Files used:</h2> <h2>Collection of Component Files used:</h2>
Build Time Elapsed: 00:00:02 Build Time Elapsed: 00:00:03
</pre> </pre>
</body> </body>
</html> </html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -5,6 +5,7 @@
".\objects\n32wb03x_gpio.o" ".\objects\n32wb03x_gpio.o"
".\objects\n32wb03x_rcc.o" ".\objects\n32wb03x_rcc.o"
".\objects\n32wb03x_usart.o" ".\objects\n32wb03x_usart.o"
".\objects\n32wb03x_dma.o"
".\objects\list.o" ".\objects\list.o"
".\objects\queue.o" ".\objects\queue.o"
".\objects\tasks.o" ".\objects\tasks.o"
@ -15,6 +16,7 @@
".\objects\bsp_usart.o" ".\objects\bsp_usart.o"
".\objects\bsp_led.o" ".\objects\bsp_led.o"
".\objects\app_tasks.o" ".\objects\app_tasks.o"
".\objects\app_cli.o"
".\objects\n32wb03x_it.o" ".\objects\n32wb03x_it.o"
--library_type=microlib --strict --scatter ".\Objects\embeddedSrc.sct" --library_type=microlib --strict --scatter ".\Objects\embeddedSrc.sct"
--summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols --summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols

View File

@ -142,6 +142,34 @@ I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h)(0x68CD0B36) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30)
F (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\src\n32wb03x_dma.c)(0x68CD0B30)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\app -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0 -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include -ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device -ID:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER -o .\objects\n32wb03x_dma.o --omf_browse .\objects\n32wb03x_dma.crf --depend .\objects\n32wb03x_dma.d)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_dma.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96)
I (D:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5EC775FC)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmInstr.h)(0x5FA56A96)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmFunc.h)(0x5FA56A96)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\system_n32wb03x.h)(0x68CD0B3B)
I (D:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x5EC775F6)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x_conf.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_adc.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_crc.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_exti.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_gpio.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_i2c.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_iwdg.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_pwr.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rcc.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rtc.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_spi.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_tim.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_usart.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_lpuart.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_wwdg.h)(0x68CD0B37)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_irgen.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30)
F (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\list.c)(0x60DC5C76)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\app -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0 -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include -ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device -ID:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER -o .\objects\list.o --omf_browse .\objects\list.crf --depend .\objects\list.d) F (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\list.c)(0x60DC5C76)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\app -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0 -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include -ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device -ID:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER -o .\objects\list.o --omf_browse .\objects\list.crf --depend .\objects\list.d)
I (D:\Keil_v5\ARM\ARMCC\include\stdlib.h)(0x5EC775FC) I (D:\Keil_v5\ARM\ARMCC\include\stdlib.h)(0x5EC775FC)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h)(0x60DC5C77) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h)(0x60DC5C77)
@ -225,7 +253,7 @@ I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h)(0x60DC5C76) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h)(0x60DC5C76)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x60DC5C76) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x60DC5C76)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x60DC5C77) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x60DC5C77)
F (..\app\main.c)(0x6A96BADF)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\app -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0 -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include -ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device -ID:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER -o .\objects\main.o --omf_browse .\objects\main.crf --depend .\objects\main.d) F (..\app\main.c)(0x6A96C3A9)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\app -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0 -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include -ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device -ID:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER -o .\objects\main.o --omf_browse .\objects\main.crf --depend .\objects\main.d)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96)
I (D:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5EC775FC) I (D:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5EC775FC)
@ -264,11 +292,12 @@ I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h)(0x60DC5C76) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h)(0x60DC5C76)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x60DC5C76) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x60DC5C76)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x60DC5C77) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x60DC5C77)
I (..\app\bsp_usart.h)(0x6A96BAAF) I (..\app\bsp_usart.h)(0x6A96C2A9)
I (..\app\bsp_led.h)(0x6A96BAAF) I (..\app\bsp_led.h)(0x6A96BAAF)
I (..\app\app_tasks.h)(0x6A96BADF) I (..\app\app_tasks.h)(0x6A96C2F1)
F (..\app\bsp_usart.c)(0x6A96BAAF)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\app -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0 -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include -ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device -ID:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER -o .\objects\bsp_usart.o --omf_browse .\objects\bsp_usart.crf --depend .\objects\bsp_usart.d) I (..\app\app_cli.h)(0x6A96C353)
I (..\app\bsp_usart.h)(0x6A96BAAF) F (..\app\bsp_usart.c)(0x6A96C2D9)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\app -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0 -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include -ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device -ID:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER -o .\objects\bsp_usart.o --omf_browse .\objects\bsp_usart.crf --depend .\objects\bsp_usart.d)
I (..\app\bsp_usart.h)(0x6A96C2A9)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96)
I (D:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5EC775FC) I (D:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5EC775FC)
@ -297,66 +326,6 @@ I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30)
I (D:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5EC775FC) I (D:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5EC775FC)
F (..\app\bsp_led.c)(0x6A96BAAF)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\app -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0 -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include -ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device -ID:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER -o .\objects\bsp_led.o --omf_browse .\objects\bsp_led.crf --depend .\objects\bsp_led.d)
I (..\app\bsp_led.h)(0x6A96BAAF)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96)
I (D:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5EC775FC)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmInstr.h)(0x5FA56A96)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmFunc.h)(0x5FA56A96)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\system_n32wb03x.h)(0x68CD0B3B)
I (D:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x5EC775F6)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x_conf.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_adc.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_crc.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_dma.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_exti.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_gpio.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_i2c.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_iwdg.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_pwr.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rcc.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rtc.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_spi.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_tim.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_usart.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_lpuart.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_wwdg.h)(0x68CD0B37)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_irgen.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30)
F (..\app\app_tasks.c)(0x6A96BADF)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\app -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0 -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include -ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device -ID:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER -o .\objects\app_tasks.o --omf_browse .\objects\app_tasks.crf --depend .\objects\app_tasks.d)
I (..\app\app_tasks.h)(0x6A96BADF)
I (D:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5EC775FC)
I (..\app\bsp_led.h)(0x6A96BAAF)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmInstr.h)(0x5FA56A96)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmFunc.h)(0x5FA56A96)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\system_n32wb03x.h)(0x68CD0B3B)
I (D:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x5EC775F6)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x_conf.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_adc.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_crc.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_dma.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_exti.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_gpio.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_i2c.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_iwdg.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_pwr.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rcc.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rtc.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_spi.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_tim.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_usart.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_lpuart.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_wwdg.h)(0x68CD0B37)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_irgen.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30)
I (D:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5EC775FC)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h)(0x60DC5C77) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h)(0x60DC5C77)
I (D:\Keil_v5\ARM\ARMCC\include\stddef.h)(0x5EC775FC) I (D:\Keil_v5\ARM\ARMCC\include\stddef.h)(0x5EC775FC)
I (..\app\FreeRTOSConfig.h)(0x6A96BAF9) I (..\app\FreeRTOSConfig.h)(0x6A96BAF9)
@ -368,7 +337,125 @@ I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x60DC5C76) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x60DC5C76)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x60DC5C77) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x60DC5C77)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\queue.h)(0x60DC5C76) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\queue.h)(0x60DC5C76)
F (..\app\n32wb03x_it.c)(0x6A96BADF)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\app -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0 -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include -ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device -ID:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER -o .\objects\n32wb03x_it.o --omf_browse .\objects\n32wb03x_it.crf --depend .\objects\n32wb03x_it.d) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\semphr.h)(0x60DC5C76)
F (..\app\bsp_led.c)(0x6A96BAAF)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\app -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0 -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include -ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device -ID:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER -o .\objects\bsp_led.o --omf_browse .\objects\bsp_led.crf --depend .\objects\bsp_led.d)
I (..\app\bsp_led.h)(0x6A96BAAF)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96)
I (D:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5EC775FC)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmInstr.h)(0x5FA56A96)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmFunc.h)(0x5FA56A96)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\system_n32wb03x.h)(0x68CD0B3B)
I (D:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x5EC775F6)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x_conf.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_adc.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_crc.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_dma.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_exti.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_gpio.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_i2c.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_iwdg.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_pwr.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rcc.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rtc.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_spi.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_tim.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_usart.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_lpuart.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_wwdg.h)(0x68CD0B37)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_irgen.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30)
F (..\app\app_tasks.c)(0x6A96C33A)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\app -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0 -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include -ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device -ID:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER -o .\objects\app_tasks.o --omf_browse .\objects\app_tasks.crf --depend .\objects\app_tasks.d)
I (..\app\app_tasks.h)(0x6A96C2F1)
I (D:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5EC775FC)
I (..\app\bsp_led.h)(0x6A96BAAF)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmInstr.h)(0x5FA56A96)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmFunc.h)(0x5FA56A96)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\system_n32wb03x.h)(0x68CD0B3B)
I (D:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x5EC775F6)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x_conf.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_adc.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_crc.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_dma.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_exti.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_gpio.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_i2c.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_iwdg.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_pwr.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rcc.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rtc.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_spi.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_tim.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_usart.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_lpuart.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_wwdg.h)(0x68CD0B37)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_irgen.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30)
I (..\app\bsp_usart.h)(0x6A96C2A9)
I (D:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5EC775FC)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h)(0x60DC5C77)
I (D:\Keil_v5\ARM\ARMCC\include\stddef.h)(0x5EC775FC)
I (..\app\FreeRTOSConfig.h)(0x6A96BAF9)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h)(0x60DC5C76)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\portable.h)(0x60DC5C76)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h)(0x60DC5C77)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0\portmacro.h)(0x60DC5C76)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h)(0x60DC5C76)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x60DC5C76)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x60DC5C77)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\queue.h)(0x60DC5C76)
F (..\app\app_cli.c)(0x6A96C393)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\app -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0 -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include -ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device -ID:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER -o .\objects\app_cli.o --omf_browse .\objects\app_cli.crf --depend .\objects\app_cli.d)
I (..\app\app_cli.h)(0x6A96C353)
I (..\app\bsp_usart.h)(0x6A96C2A9)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96)
I (D:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x5EC775FC)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmInstr.h)(0x5FA56A96)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmFunc.h)(0x5FA56A96)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\system_n32wb03x.h)(0x68CD0B3B)
I (D:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x5EC775F6)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x_conf.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_adc.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_crc.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_dma.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_exti.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_gpio.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_i2c.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_iwdg.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_pwr.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rcc.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rtc.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_spi.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_tim.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_usart.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_lpuart.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_wwdg.h)(0x68CD0B37)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_irgen.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30)
I (..\app\bsp_led.h)(0x6A96BAAF)
I (..\app\app_tasks.h)(0x6A96C2F1)
I (D:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x5EC775FC)
I (D:\Keil_v5\ARM\ARMCC\include\string.h)(0x5EC77604)
I (D:\Keil_v5\ARM\ARMCC\include\stdarg.h)(0x5EC775FC)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h)(0x60DC5C77)
I (D:\Keil_v5\ARM\ARMCC\include\stddef.h)(0x5EC775FC)
I (..\app\FreeRTOSConfig.h)(0x6A96BAF9)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h)(0x60DC5C76)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\portable.h)(0x60DC5C76)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h)(0x60DC5C77)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0\portmacro.h)(0x60DC5C76)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h)(0x60DC5C76)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\task.h)(0x60DC5C76)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include\list.h)(0x60DC5C77)
F (..\app\n32wb03x_it.c)(0x6A96C2FC)(--c99 -c --cpu Cortex-M0 -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\app -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM0 -I ..\..\nations-tec\N32WB03x_SDK_V2.0.0\middlewares\Third_Party\FreeRTOS\Source\include -ID:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device -ID:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="531" -DN32WB03x -DUSE_STDPERIPH_DRIVER -DN32WB03X -DUSE_STDPERIPH_DRIVER -o .\objects\n32wb03x_it.o --omf_browse .\objects\n32wb03x_it.crf --depend .\objects\n32wb03x_it.d)
I (..\app\n32wb03x_it.h)(0x6A96BADF) I (..\app\n32wb03x_it.h)(0x6A96BADF)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h)(0x68CD0B30)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h)(0x5FA56A96)
@ -397,3 +484,4 @@ I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h)(0x68CD0B36) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h)(0x68CD0B36)
I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30) I (..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h)(0x68CD0B30)
I (..\app\bsp_usart.h)(0x6A96C2A9)

Binary file not shown.

View File

@ -41,3 +41,4 @@
.\objects\main.o: ..\app\bsp_usart.h .\objects\main.o: ..\app\bsp_usart.h
.\objects\main.o: ..\app\bsp_led.h .\objects\main.o: ..\app\bsp_led.h
.\objects\main.o: ..\app\app_tasks.h .\objects\main.o: ..\app\app_tasks.h
.\objects\main.o: ..\app\app_cli.h

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,30 @@
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\src\n32wb03x_dma.c
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_dma.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cm0.h
.\objects\n32wb03x_dma.o: D:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmInstr.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\core\core_cmFunc.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\system_n32wb03x.h
.\objects\n32wb03x_dma.o: D:\Keil_v5\ARM\ARMCC\Bin\..\include\stdbool.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x_conf.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_adc.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\n32wb03x.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_crc.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_dma.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_exti.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_gpio.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_i2c.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_iwdg.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_pwr.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rcc.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_rtc.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_spi.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_tim.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_usart.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_lpuart.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_wwdg.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_irgen.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h
.\objects\n32wb03x_dma.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h

Binary file not shown.

View File

@ -28,3 +28,4 @@
.\objects\n32wb03x_it.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h .\objects\n32wb03x_it.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_keyscan.h
.\objects\n32wb03x_it.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h .\objects\n32wb03x_it.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\n32wb03x_qflash.h
.\objects\n32wb03x_it.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h .\objects\n32wb03x_it.o: ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\inc\misc.h
.\objects\n32wb03x_it.o: ..\app\bsp_usart.h

View File

@ -1,25 +1,14 @@
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin' *** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin'
Build target 'N32WB03X' Build target 'N32WB03X'
assembling startup_n32wb03x.s...
compiling list.c...
compiling timers.c...
compiling heap_4.c...
compiling misc.c...
compiling queue.c...
compiling tasks.c...
compiling port.c...
compiling n32wb03x_rcc.c...
compiling system_n32wb03x.c...
compiling n32wb03x_gpio.c...
compiling n32wb03x_usart.c...
compiling main.c...
compiling bsp_usart.c...
compiling bsp_led.c...
compiling n32wb03x_it.c... compiling n32wb03x_it.c...
compiling main.c...
compiling app_tasks.c... compiling app_tasks.c...
compiling app_cli.c...
compiling n32wb03x_dma.c...
compiling bsp_usart.c...
linking... linking...
Program Size: Code=8248 RO-data=724 RW-data=100 ZI-data=10532 Program Size: Code=14712 RO-data=944 RW-data=112 ZI-data=10696
FromELF: creating hex file... FromELF: creating hex file...
After Build - User command #1: fromelf --bin --output=.\bin\embeddedSrc.bin .\Objects\embeddedSrc.axf After Build - User command #1: fromelf --bin --output=.\bin\embeddedSrc.bin .\Objects\embeddedSrc.axf
".\Objects\embeddedSrc.axf" - 0 Error(s), 0 Warning(s). ".\Objects\embeddedSrc.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed: 00:00:02 Build Time Elapsed: 00:00:03

View File

@ -423,6 +423,11 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\src\n32wb03x_usart.c</FilePath> <FilePath>..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\src\n32wb03x_usart.c</FilePath>
</File> </File>
<File>
<FileName>n32wb03x_dma.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\n32wb03x_std_periph_driver\src\n32wb03x_dma.c</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
@ -493,6 +498,11 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>..\app\app_tasks.c</FilePath> <FilePath>..\app\app_tasks.c</FilePath>
</File> </File>
<File>
<FileName>app_cli.c</FileName>
<FileType>1</FileType>
<FilePath>..\app\app_cli.c</FilePath>
</File>
<File> <File>
<FileName>n32wb03x_it.c</FileName> <FileName>n32wb03x_it.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>

313
mcm-ddc-04/app/app_cli.c Normal file
View File

@ -0,0 +1,313 @@
/**
* @file app_cli.c
* @brief CLI framework: an independent task receives command lines from the
* USART1 RX interrupt queue, parses and executes them, and answers
* through USART1 DMA TX.
*
* Line terminators: "\r\n", "\n\r", "\r" and "\n" are all accepted.
* Editing: backspace (0x08 / 0x7F) erases the last character.
*/
#include "app_cli.h"
#include "bsp_usart.h"
#include "bsp_led.h"
#include "app_tasks.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include "FreeRTOS.h"
#include "task.h"
#define CLI_TASK_STACK 256 /* in words (printf needs more stack) */
#define CLI_TASK_PRIO 3
#define CLI_LINE_BUF_SIZE 64
#define CLI_TX_BUF_SIZE 96
#define CLI_MAX_ARGS 8
#define CLI_PROMPT "n32> "
typedef void (*CliCmdHandler_t)(int argc, char* argv[]);
typedef struct
{
const char* name;
const char* help;
CliCmdHandler_t handler;
} CliCmd_t;
static char s_txBuf[CLI_TX_BUF_SIZE];
/**
* @brief Send a string through USART1 DMA TX.
* @note Strings must contain explicit "\r\n" (no auto CR like fputc).
*/
static void cli_write(const char* str)
{
bsp_usart_write_dma((const uint8_t*)str, (uint16_t)strlen(str));
}
/**
* @brief Formatted CLI output through USART1 DMA TX.
*/
static void cli_printf(const char* fmt, ...)
{
va_list args;
va_start(args, fmt);
vsnprintf(s_txBuf, CLI_TX_BUF_SIZE, fmt, args);
va_end(args);
s_txBuf[CLI_TX_BUF_SIZE - 1] = '\0';
cli_write(s_txBuf);
}
/* ------------------------------------------------------------------ */
/* Built-in commands */
/* ------------------------------------------------------------------ */
static void CmdHelp(int argc, char* argv[]);
/**
* @brief "version": show firmware and clock info.
*/
static void CmdVersion(int argc, char* argv[])
{
(void)argc;
(void)argv;
cli_write("N32WB031 FreeRTOS + UART(DMA) + LED + CLI demo\r\n");
cli_printf("SystemCoreClock = %lu Hz\r\n", (unsigned long)SystemCoreClock);
}
/**
* @brief "log [on|off]": show or set the active log printing switch.
*/
static void CmdLog(int argc, char* argv[])
{
if (argc < 2)
{
cli_printf("log is %s\r\n", AppTasks_GetLogEnabled() ? "on" : "off");
return;
}
if (strcmp(argv[1], "on") == 0)
{
AppTasks_SetLogEnabled(1);
}
else if (strcmp(argv[1], "off") == 0)
{
AppTasks_SetLogEnabled(0);
}
else
{
cli_write("usage: log [on|off]\r\n");
return;
}
cli_printf("log set to %s\r\n", AppTasks_GetLogEnabled() ? "on" : "off");
}
/**
* @brief "led <1|2> <on|off|toggle>": control a board LED.
*/
static void CmdLed(int argc, char* argv[])
{
GPIO_Module* port;
uint16_t pin;
if (argc < 3)
{
cli_write("usage: led <1|2> <on|off|toggle>\r\n");
return;
}
if (argv[1][0] == '1' && argv[1][1] == '\0')
{
port = LED1_PORT;
pin = LED1_PIN;
}
else if (argv[1][0] == '2' && argv[1][1] == '\0')
{
port = LED2_PORT;
pin = LED2_PIN;
}
else
{
cli_write("usage: led <1|2> <on|off|toggle>\r\n");
return;
}
if (strcmp(argv[2], "on") == 0)
{
bsp_led_on(port, pin);
}
else if (strcmp(argv[2], "off") == 0)
{
bsp_led_off(port, pin);
}
else if (strcmp(argv[2], "toggle") == 0)
{
bsp_led_toggle(port, pin);
}
else
{
cli_write("usage: led <1|2> <on|off|toggle>\r\n");
return;
}
cli_printf("led %s %s done\r\n", argv[1], argv[2]);
}
/* Command table; add new commands here */
static const CliCmd_t s_cmds[] = {
{"help", "list all commands", CmdHelp},
{"version", "show firmware/clock info", CmdVersion},
{"log", "log [on|off]: active printing switch (default off)", CmdLog},
{"led", "led <1|2> <on|off|toggle>: control board LED", CmdLed},
};
#define CLI_CMD_COUNT (sizeof(s_cmds) / sizeof(s_cmds[0]))
/**
* @brief "help": list all registered commands.
*/
static void CmdHelp(int argc, char* argv[])
{
uint32_t i;
(void)argc;
(void)argv;
cli_write("commands:\r\n");
for (i = 0; i < CLI_CMD_COUNT; i++)
{
cli_printf(" %-8s %s\r\n", s_cmds[i].name, s_cmds[i].help);
}
}
/* ------------------------------------------------------------------ */
/* Line parsing / dispatch */
/* ------------------------------------------------------------------ */
/**
* @brief Tokenize a received line in place and run the matching command.
*/
static void cli_dispatch(char* line)
{
char* argv[CLI_MAX_ARGS];
int argc = 0;
char* p = line;
uint32_t i;
/* Split on spaces/tabs */
while (*p != '\0' && argc < CLI_MAX_ARGS)
{
while (*p == ' ' || *p == '\t')
{
p++;
}
if (*p == '\0')
{
break;
}
argv[argc++] = p;
while (*p != '\0' && *p != ' ' && *p != '\t')
{
p++;
}
if (*p != '\0')
{
*p++ = '\0';
}
}
if (argc == 0)
{
return;
}
for (i = 0; i < CLI_CMD_COUNT; i++)
{
if (strcmp(argv[0], s_cmds[i].name) == 0)
{
s_cmds[i].handler(argc, argv);
return;
}
}
cli_printf("unknown command: %s (try 'help')\r\n", argv[0]);
}
/**
* @brief CLI task: receive bytes, edit the line, dispatch on terminator.
*/
static void CliTask(void* argument)
{
static char line[CLI_LINE_BUF_SIZE];
uint16_t len = 0;
uint8_t swallow = 0; /* complementary terminator to swallow once */
uint8_t ch;
(void)argument;
cli_write("\r\nCLI ready. Type 'help' for commands.\r\n" CLI_PROMPT);
for (;;)
{
if (bsp_usart_read_byte(&ch, BSP_USART_WAIT_FOREVER) == 0)
{
continue;
}
/* Swallow the second half of a "\r\n" / "\n\r" pair */
if (swallow != 0)
{
uint8_t exp = swallow;
swallow = 0;
if (ch == exp)
{
continue;
}
}
if (ch == '\r' || ch == '\n')
{
/* Any of "\r", "\n", "\r\n", "\n\r" terminates the line */
swallow = (ch == '\r') ? (uint8_t)'\n' : (uint8_t)'\r';
bsp_usart_tx_lock();
cli_write("\r\n");
line[len] = '\0';
cli_dispatch(line);
cli_write(CLI_PROMPT);
bsp_usart_tx_unlock();
len = 0;
}
else if (ch == '\b' || ch == 0x7F)
{
if (len > 0)
{
len--;
cli_write("\b \b");
}
}
else if (ch >= 0x20 && ch < 0x7F)
{
if (len < CLI_LINE_BUF_SIZE - 1)
{
line[len++] = (char)ch;
bsp_usart_write_dma(&ch, 1); /* echo */
}
else
{
cli_write("\a"); /* line full: bell */
}
}
/* other control characters are ignored */
}
}
/**
* @brief Create the CLI task.
*/
void AppCli_Init(void)
{
xTaskCreate(CliTask, "CLI", CLI_TASK_STACK, NULL, CLI_TASK_PRIO, NULL);
}

20
mcm-ddc-04/app/app_cli.h Normal file
View File

@ -0,0 +1,20 @@
/**
* @file app_cli.h
* @brief CLI framework: independent task for command parsing, execution
* and response over USART1.
*/
#ifndef __APP_CLI_H__
#define __APP_CLI_H__
#ifdef __cplusplus
extern "C" {
#endif
/* Create the CLI task. Called once from main() before the scheduler starts. */
void AppCli_Init(void);
#ifdef __cplusplus
}
#endif
#endif /* __APP_CLI_H__ */

View File

@ -5,6 +5,7 @@
*/ */
#include "app_tasks.h" #include "app_tasks.h"
#include "bsp_led.h" #include "bsp_led.h"
#include "bsp_usart.h"
#include <stdio.h> #include <stdio.h>
#include "FreeRTOS.h" #include "FreeRTOS.h"
@ -22,8 +23,28 @@
static QueueHandle_t s_logQueue = NULL; static QueueHandle_t s_logQueue = NULL;
/* Active log printing switch, default off (set via the CLI "log" command) */
static volatile uint8_t s_logEnabled = 0;
/** /**
* @brief Toggle LED1(PB0) every 500 ms, post a log message each time. * @brief Enable/disable active log printing from the LED tasks.
*/
void AppTasks_SetLogEnabled(uint8_t enable)
{
s_logEnabled = (enable != 0) ? 1 : 0;
}
/**
* @brief Return the current log printing switch state.
*/
uint8_t AppTasks_GetLogEnabled(void)
{
return s_logEnabled;
}
/**
* @brief Toggle LED1(PB0) every 500 ms, post a log message each time
* (only when log printing is enabled).
*/ */
static void LedTask(void* argument) static void LedTask(void* argument)
{ {
@ -34,16 +55,20 @@ static void LedTask(void* argument)
{ {
bsp_led_toggle(LED1_PORT, LED1_PIN); bsp_led_toggle(LED1_PORT, LED1_PIN);
msg.led_id = 1; if (AppTasks_GetLogEnabled())
msg.count++; {
xQueueSend(s_logQueue, &msg, 0); msg.led_id = 1;
msg.count++;
xQueueSend(s_logQueue, &msg, 0);
}
vTaskDelay(pdMS_TO_TICKS(LED1_PERIOD_MS)); vTaskDelay(pdMS_TO_TICKS(LED1_PERIOD_MS));
} }
} }
/** /**
* @brief Toggle LED2(PA6) every 1000 ms, post a log message each time. * @brief Toggle LED2(PA6) every 1000 ms, post a log message each time
* (only when log printing is enabled).
*/ */
static void LedTask2(void* argument) static void LedTask2(void* argument)
{ {
@ -54,9 +79,12 @@ static void LedTask2(void* argument)
{ {
bsp_led_toggle(LED2_PORT, LED2_PIN); bsp_led_toggle(LED2_PORT, LED2_PIN);
msg.led_id = 2; if (AppTasks_GetLogEnabled())
msg.count++; {
xQueueSend(s_logQueue, &msg, 0); msg.led_id = 2;
msg.count++;
xQueueSend(s_logQueue, &msg, 0);
}
vTaskDelay(pdMS_TO_TICKS(LED2_PERIOD_MS)); vTaskDelay(pdMS_TO_TICKS(LED2_PERIOD_MS));
} }
@ -74,7 +102,9 @@ static void PrintTask(void* argument)
{ {
if (xQueueReceive(s_logQueue, &msg, portMAX_DELAY) == pdPASS) if (xQueueReceive(s_logQueue, &msg, portMAX_DELAY) == pdPASS)
{ {
bsp_usart_tx_lock();
printf("LED%u toggled, count = %lu\n", (unsigned int)msg.led_id, (unsigned long)msg.count); printf("LED%u toggled, count = %lu\n", (unsigned int)msg.led_id, (unsigned long)msg.count);
bsp_usart_tx_unlock();
} }
} }
} }

View File

@ -20,6 +20,10 @@ typedef struct
void AppTasks_CreateAll(void); void AppTasks_CreateAll(void);
/* Active log printing switch (default: off) */
void AppTasks_SetLogEnabled(uint8_t enable);
uint8_t AppTasks_GetLogEnabled(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -1,17 +1,30 @@
/** /**
* @file bsp_usart.c * @file bsp_usart.c
* @brief USART1 init + printf retarget (fputc) * @brief USART1 init, printf retarget (fputc, polling TX), DMA TX and
* RX interrupt byte queue.
*/ */
#include "bsp_usart.h" #include "bsp_usart.h"
#include <stdio.h> #include <stdio.h>
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"
#define RX_QUEUE_LENGTH 64
static QueueHandle_t s_rxQueue = NULL;
static SemaphoreHandle_t s_txMutex = NULL;
/** /**
* @brief Initialize USART1 (115200 8N1) on PB6(TX)/PB7(RX). * @brief Initialize USART1 (115200 8N1) on PB6(TX)/PB7(RX),
* DMA TX channel and the RX interrupt queue.
*/ */
void bsp_usart_init(void) void bsp_usart_init(void)
{ {
GPIO_InitType GPIO_InitStructure; GPIO_InitType GPIO_InitStructure;
USART_InitType USART_InitStructure; USART_InitType USART_InitStructure;
NVIC_InitType NVIC_InitStructure;
/* Enable GPIOB and USART1 clocks */ /* Enable GPIOB and USART1 clocks */
RCC_EnableAPB2PeriphClk(BSP_USART_GPIO_CLK, ENABLE); RCC_EnableAPB2PeriphClk(BSP_USART_GPIO_CLK, ENABLE);
@ -37,10 +50,131 @@ void bsp_usart_init(void)
USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX; USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX;
USART_Init(BSP_USARTx, &USART_InitStructure); USART_Init(BSP_USARTx, &USART_InitStructure);
/* USART1 TX DMA: CH1 remapped to USART1_TX, configured per transfer */
RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_DMA, ENABLE);
DMA_DeInit(BSP_USART_TX_DMA_CH);
DMA_RequestRemap(BSP_USART_TX_DMA_REMAP, DMA, BSP_USART_TX_DMA_CH, ENABLE);
USART_EnableDMA(BSP_USARTx, USART_DMAREQ_TX, ENABLE);
/* RX byte queue fed by the RXDNE interrupt */
s_rxQueue = xQueueCreate(RX_QUEUE_LENGTH, sizeof(uint8_t));
s_txMutex = xSemaphoreCreateMutex();
USART_ConfigInt(BSP_USARTx, USART_INT_RXDNE, ENABLE);
/* Lowest priority: the ISR calls FreeRTOS FromISR APIs */
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_Enable(BSP_USARTx, ENABLE); USART_Enable(BSP_USARTx, ENABLE);
} }
/* Retarget the C library printf function to USART1 */ /**
* @brief Send a buffer over USART1 TX using DMA, polled completion.
*/
void bsp_usart_write_dma(const uint8_t* data, uint16_t len)
{
DMA_InitType DMA_InitStructure;
if (data == NULL || len == 0)
{
return;
}
DMA_EnableChannel(BSP_USART_TX_DMA_CH, DISABLE);
DMA_ClearFlag(BSP_USART_TX_DMA_TC, DMA);
DMA_InitStructure.PeriphAddr = BSP_USART_DAT_ADDR;
DMA_InitStructure.MemAddr = (uint32_t)data;
DMA_InitStructure.Direction = DMA_DIR_PERIPH_DST;
DMA_InitStructure.BufSize = len;
DMA_InitStructure.PeriphInc = DMA_PERIPH_INC_DISABLE;
DMA_InitStructure.DMA_MemoryInc = DMA_MEM_INC_ENABLE;
DMA_InitStructure.PeriphDataSize = DMA_PERIPH_DATA_SIZE_BYTE;
DMA_InitStructure.MemDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.CircularMode = DMA_MODE_NORMAL;
DMA_InitStructure.Priority = DMA_PRIORITY_VERY_HIGH;
DMA_InitStructure.Mem2Mem = DMA_M2M_DISABLE;
DMA_Init(BSP_USART_TX_DMA_CH, &DMA_InitStructure);
DMA_EnableChannel(BSP_USART_TX_DMA_CH, ENABLE);
while (DMA_GetFlagStatus(BSP_USART_TX_DMA_TC, DMA) == RESET)
{
}
DMA_EnableChannel(BSP_USART_TX_DMA_CH, DISABLE);
DMA_ClearFlag(BSP_USART_TX_DMA_TC, DMA);
/* Wait for the last byte to leave the shift register */
while (USART_GetFlagStatus(BSP_USARTx, USART_FLAG_TXC) == RESET)
{
}
}
/**
* @brief Fetch one byte received by the RX interrupt.
* @param ch output byte
* @param timeout_ms BSP_USART_WAIT_FOREVER or a timeout in ms
* @return 1 on success, 0 on timeout
*/
int bsp_usart_read_byte(uint8_t* ch, uint32_t timeout_ms)
{
TickType_t ticks;
if (s_rxQueue == NULL)
{
return 0;
}
ticks = (timeout_ms == BSP_USART_WAIT_FOREVER) ? portMAX_DELAY : pdMS_TO_TICKS(timeout_ms);
return (xQueueReceive(s_rxQueue, ch, ticks) == pdPASS) ? 1 : 0;
}
/**
* @brief Take the TX mutex (no-op before the scheduler runs).
*/
void bsp_usart_tx_lock(void)
{
if (s_txMutex != NULL && xTaskGetSchedulerState() == taskSCHEDULER_RUNNING)
{
xSemaphoreTake(s_txMutex, portMAX_DELAY);
}
}
/**
* @brief Give the TX mutex.
*/
void bsp_usart_tx_unlock(void)
{
if (s_txMutex != NULL && xTaskGetSchedulerState() == taskSCHEDULER_RUNNING)
{
xSemaphoreGive(s_txMutex);
}
}
/**
* @brief RXDNE interrupt handler, pushes the received byte into the RX queue.
* Called from USART1_IRQHandler (see n32wb03x_it.c).
*/
void bsp_usart_rx_isr_handler(void)
{
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
if (USART_GetIntStatus(BSP_USARTx, USART_INT_RXDNE) != RESET)
{
/* Reading DAT clears the RXDNE flag */
uint8_t ch = (uint8_t)USART_ReceiveData(BSP_USARTx);
if (s_rxQueue != NULL)
{
xQueueSendFromISR(s_rxQueue, &ch, &xHigherPriorityTaskWoken);
}
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
}
/* Retarget the C library printf function to USART1 (polling TX) */
int fputc(int ch, FILE* f) int fputc(int ch, FILE* f)
{ {
/* Send '\r' before '\n' so that serial terminals display correctly */ /* Send '\r' before '\n' so that serial terminals display correctly */

View File

@ -1,6 +1,7 @@
/** /**
* @file bsp_usart.h * @file bsp_usart.h
* @brief USART1 printf support (TX=PB6, RX=PB7, 115200 8N1) * @brief USART1 support: printf retarget (polling TX), DMA TX, RX interrupt queue.
* TX=PB6, RX=PB7, 115200 8N1.
*/ */
#ifndef __BSP_USART_H__ #ifndef __BSP_USART_H__
#define __BSP_USART_H__ #define __BSP_USART_H__
@ -21,8 +22,31 @@ extern "C" {
#define BSP_USART_RX_GPIO_AF GPIO_AF4_USART1 #define BSP_USART_RX_GPIO_AF GPIO_AF4_USART1
#define BSP_USART_BAUDRATE 115200 #define BSP_USART_BAUDRATE 115200
/* USART1 TX DMA channel (remap required on this chip) */
#define BSP_USART_TX_DMA_CH DMA_CH1
#define BSP_USART_TX_DMA_TC DMA_FLAG_TC1
#define BSP_USART_TX_DMA_REMAP DMA_REMAP_USART1_TX
#define BSP_USART_DAT_ADDR (USART1_BASE + 0x04)
/* Pass to bsp_usart_read_byte() to block without timeout */
#define BSP_USART_WAIT_FOREVER 0xFFFFFFFFu
void bsp_usart_init(void); void bsp_usart_init(void);
/* TX: send a buffer through DMA (polled completion) */
void bsp_usart_write_dma(const uint8_t* data, uint16_t len);
/* RX: fetch one byte received by the RXDNE interrupt; returns 1 on success */
int bsp_usart_read_byte(uint8_t* ch, uint32_t timeout_ms);
/* TX mutex so that DMA bursts and polling printf lines do not interleave.
* No-ops while the scheduler is not running. */
void bsp_usart_tx_lock(void);
void bsp_usart_tx_unlock(void);
/* Called from USART1_IRQHandler (see n32wb03x_it.c) */
void bsp_usart_rx_isr_handler(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -11,6 +11,7 @@
#include "bsp_usart.h" #include "bsp_usart.h"
#include "bsp_led.h" #include "bsp_led.h"
#include "app_tasks.h" #include "app_tasks.h"
#include "app_cli.h"
/** /**
* @brief Main program. * @brief Main program.
@ -33,6 +34,9 @@ int main(void)
/* Create log queue and tasks (LedTask, LedTask2, PrintTask) */ /* Create log queue and tasks (LedTask, LedTask2, PrintTask) */
AppTasks_CreateAll(); AppTasks_CreateAll();
/* Create the CLI task (command parsing/execution/response) */
AppCli_Init();
/* Start the FreeRTOS scheduler (port configures SysTick itself) */ /* Start the FreeRTOS scheduler (port configures SysTick itself) */
vTaskStartScheduler(); vTaskStartScheduler();

View File

@ -9,6 +9,7 @@
* xPortSysTickHandler -> SysTick_Handler * xPortSysTickHandler -> SysTick_Handler
*/ */
#include "n32wb03x_it.h" #include "n32wb03x_it.h"
#include "bsp_usart.h"
/******************************************************************************/ /******************************************************************************/
/* Cortex-M0 Processor Exceptions Handlers */ /* Cortex-M0 Processor Exceptions Handlers */
@ -38,3 +39,11 @@ void HardFault_Handler(void)
/* available peripheral interrupt handler's name please refer to the startup */ /* available peripheral interrupt handler's name please refer to the startup */
/* file (startup_n32wb03x.s). */ /* file (startup_n32wb03x.s). */
/******************************************************************************/ /******************************************************************************/
/**
* @brief This function handles USART1 global interrupt (RXDNE -> RX queue).
*/
void USART1_IRQHandler(void)
{
bsp_usart_rx_isr_handler();
}

View File

@ -108,3 +108,52 @@ SDK 源码(固件库、CMSIS、FreeRTOS V9.0.0、启动文件)以相对路
- 板卡实测验证 LED 与串口日志 - 板卡实测验证 LED 与串口日志
- 按需接入 BLE 协议栈(SDK ble 例程为裸机 rwip_schedule 调度,与 FreeRTOS 架构需做整合设计) - 按需接入 BLE 协议栈(SDK ble 例程为裸机 rwip_schedule 调度,与 FreeRTOS 架构需做整合设计)
---
日期:2026-09-01
## 10. UART DMA 发送 + 日志开关 + CLI 命令框架
### 10.1 DMA 可行性结论
N32WB031 具备 DMA 外设(5 通道),固件库支持 `USART_EnableDMA` 与通道重映射
(`DMA_RequestRemap`),USART1_TX 可映射到 DMA_CH1(参考官方例程
`projects/n32wb03x_EVAL/peripheral/USART/DMA_Interrupt`)。**硬件支持,已实现 DMA 发送。**
### 10.2 串口驱动扩展(bsp_usart)
- TX 双通道并存:`fputc` 轮询发送保留给调度器启动前的 banner 与 PrintTask;
新增 `bsp_usart_write_dma(buf, len)` 走 DMA_CH1(每次发送重新 `DMA_Init`,轮询
`DMA_FLAG_TC1` 完成标志 + 等 `USART_FLAG_TXC` 移位寄存器排空),供 CLI 输出使用。
- RX 新增 RXDNE 中断:`USART1_IRQHandler`(n32wb03x_it.c)→ `bsp_usart_rx_isr_handler()`,
字节经 `xQueueSendFromISR` 投递到 64 字节接收队列;应用侧用
`bsp_usart_read_byte(ch, timeout_ms)` 阻塞取字节。NVIC 优先级 = 3(最低,满足
`configMAX_SYSCALL_INTERRUPT_PRIORITY` 约束)。
- 新增 TX 互斥锁 `bsp_usart_tx_lock/unlock`:调度器未运行时为空操作;
PrintTask 的整条 printf 与 CLI 的整段应答各持锁一次,避免 log 开启后两类输出字节级交错。
### 10.3 主动打印开关
`app_tasks` 新增 `AppTasks_SetLogEnabled()/AppTasks_GetLogEnabled()`,**默认关闭**。
LED 任务照常翻转,仅在开关打开时才向日志队列投递消息。运行时通过 CLI
`log on|off` 切换,`log` 无参数查询当前状态。
### 10.4 CLI 框架(app_cli)
- 独立任务 `CliTask`(栈 256 字,优先级 3),独占完成:行接收 → 解析 → 执行 → 应答,
应答全部走 DMA TX(`cli_write`/`cli_printf`,需显式带 `\r\n`)。
- 命令表 `CliCmd_t s_cmds[]`(name/help/handler),新增命令只需在表中加一项。
- 行结束符兼容 **`\r\n`、`\n\r`、`\r`、`\n`** 四种:首个 `\r` 或 `\n` 触发分发,
紧跟的互补字符被吞掉一次。支持退格(0x08/0x7F)编辑,行缓冲 64 字节,超长响铃。
- 内置命令:`help`、`version`、`log [on|off]`、`led <1|2> <on|off|toggle>`。
- 提示符 `n32> `,空行仅重显提示符。
### 10.5 编译验证
- `UV4.exe -b embeddedSrc.uvprojx -j0 -o build.log`:**0 Error(s), 0 Warning(s)**
- 体积:`Code=14712 RO-data=944 RW-data=112 ZI-data=10696`(Flash/RAM 余量仍充足)
- 新增源文件:`app/app_cli.c/.h`;uvprojx 的 FWLB 组加入 `n32wb03x_dma.c`
- 烧录后预期:banner 之后出现 `CLI ready. Type 'help' for commands.` 与 `n32> ` 提示符;
默认无 LED 滚动日志,`log on` 后恢复。
- 注意:尚未上板实测,DMA 与中断路径需硬件验证。