mothercup/mcm-ddc-ble/docs/开发日志.md

3.8 KiB
Raw Blame History

mcm-ddc-ble 开发日志

独立 BLE 工程:从 0x01000000 直接起跑(无 bootloader、无 OTA),用于在单镜像环境下 验证 BLE 功能与后续功能开发。


日期:2026-09-02

1. 工程创建(基于 SDK rdtss 例程)

1.1 选型

以 nations-tec/N32WB03x_SDK_V2.0.0/projects/n32wb03x_EVAL/ble/rdtss 为蓝本: BLE 原始数据透传服务(128-bit UUID,下行写 + 上行 notify),与 mcm-ddc-04 的自定义 GATT 透传服务(CLS)形态最接近,适合作为手机 APP 通信协议的载体。heart_rate 是标准 profile,不适合做数据通道。

1.2 移植方式

  • 整目录复制 src/、inc/、MDK-ARM/ 到 mcm-ddc-ble/,工程改名 mcm-ddc-ble, 输出 bin/mcm-ddc-ble.bin。
  • uvprojx/uvoptx 中 268+11 处 SDK 相对路径由 ..\..\..\..\..\ 重定向为 ..\..\nations-tec\N32WB03x_SDK_V2.0.0\(新工程深度不同); 另有 11+3 处 ..\..\..\dfu\common 指向 SDK 的 projects/n32wb03x_EVAL/dfu/common。 nations-tec/ 只读,未做任何修改。
  • 只使用第一个 target N32WB03x(IROM 0x01000000/0x40000);OTA_IMG_1/OTA_IMG_2 两个 target 未适配(其 after-build 脚本会写 SDK 目录),不要构建。

1.3 引脚核对(重点:避开 SWD)

  • SWD 调试管脚:SWCLK=PA4 / SWDIO=PA5,全工程无任何占用。
  • LED1=PB0、LED2=PA6(与 mcm-ddc-04、STB 板一致)。
  • USART1 透传通道:TX=PB6 / RX=PB7(AF4,115200 8N1),与我们板子一致。
  • 日志 LPUART:TX=PB1(NS_LOG)。
  • app_usart.h 里的 PIN_4/PIN_5 是被注释掉的 USART2 备选(PB4/PB5),无影响。

1.4 保 SWD:禁止睡眠

例程主循环会进 deep sleep,SWD 随之断开(readme 也提示需 RESET 时机烧录)。 在 main.c 主循环前调用 ns_sleep_lock_acquire() 永久锁睡眠,SWD 全程可调试; 代价是功耗偏高(仅调试阶段,后续做低功耗时再评估)。

1.5 构建

UV4 -b mcm-ddc-ble.uvprojx -t "N32WB03x":0 Error / 0 Warning, Code=23340 RO-data=3352 RW-data=1876 ZI-data=6052,bin 28224B。


日期:2026-09-02

2. 接入 FreeRTOS + 点灯任务

2.1 内容

  • 内核:SDK 自带 FreeRTOS V9(middlewares/Third_Party/FreeRTOS),工程新增 FREERTOS 组: tasks/queue/list/timers.c + heap_4.c + port.c(RVDS/ARM_CM0),只加进 N32WB03x target。
  • inc/FreeRTOSConfig.h:从 mcm-ddc-04 移植,heap 缩为 8KB(本工程仅 3 个任务); SVC/PendSV/SysTick 由 port 接管(宏映射),本工程无 n32wb03x_it.c,无重复定义问题。
  • main.c 任务化:
    • ble_schedule_task(512 字栈,优先级 2):rwip_schedule() + 1ms 延时, 替代裸机 while 循环(rwip 只允许单上下文运行)。
    • led_task(128 字栈,优先级 1):LED1(PB0) 每 500ms 翻转做运行指示; LED2(PA6) 仍由 app_ble.c 驱动作连接状态指示。
    • 睡眠保持锁定(deep sleep 与 RTOS tick 冲突,且保 SWD)。
  • 串口透传路径为事件驱动(usart_forward_to_ble_loop 由 profile 回调触发、 app_usart_tx_process 由 BLE 消息处理触发),rwip_schedule 进任务后行为不变。

2.2 踩坑记录

脚本往 uvprojx 写路径时 \t 被 Python 解释成制表符(Source\tasks.c → Source<TAB>asks.c), Keil 报 cannot create command input file 'source tasks.__i';另外 <FileName> 必须写纯文件名 (带路径会被 Keil 当成对象名,同样报此错)。修正后全量重建通过。

2.3 构建

0 Error / 0 Warning,Code=24736 RO-data=3352 RW-data=1964 ZI-data=14484; bin ≈ 27.4KB,RAM(RW+ZI)≈ 16.1KB / 48KB(含 8KB FreeRTOS heap)。

2.4 上板预期

LED1 每 500ms 闪烁;手机可搜到并连接 NS_RDTSS,连接后 LED2 亮; 串口(PB6/PB7,115200)与手机 BLE 互发透传。