我是跟着杰理官方文档去做的,很详细
https://doc.zh-jieli.com/AC63/zh-cn/master/getting_started/preparation/index.html
先把这个搭建环境记录一下吧,以下是我总结的:
根据官方"开发环境安装说明",推荐在Windows 系统下使用 Code::Blocks + 杰理 Windows 工具链进行开发。
主要步骤为:
- 安装 Code::Blocks
- 安装完成后第一次打开 Code::Blocks,然后关闭 ------ 这是为了让 Code::Blocks 生成一些基础设置信息/配置。
- 安装/配置 杰理 Windows 工具链
-
在确认 Code::Blocks 安装成功后,下载杰理官方提供的 Windows 工具链(如
win-toolchain),双击安装即可。新版工具链不再需要申请或导入 license,安装完即可直接使用。 -
这个工具链就是后续编译 SDK 和你的应用代码的关键。
- 确认工具链更新 / 版本兼容性
-
如果你之前安装过较旧版本工具链,建议升级到官方推荐的版本 ------ 官方文档里把"安装 / 更新工具链"都归入"开发环境安装说明"里。
-
工具链版本是决定能否顺利编译 SDK + 应用代码的关键,不匹配的话可能编译失败或运行异常。
完成上述步骤后,就可以打开官方 SDK 提供的工程,进行编译/构建/调试。官方文档说明这是"可以进行编译开发"的基本环境。
接下来就是我们到熟悉架构的最重要的一步了,将杰理官方提供的SDK文件树进行说明。
SDK 顶层目录总览(从宏观到微观)
在刚 clone 下来的 SDK 里,你会看到类似下图结构
.gitee/ .github/ .vscode/ apps/ cpu/ doc/ include_lib/ patch_release/ sdk_tools/ tools/ .gitignoreLICENSEMakefileREADME.mddefault.workspace
下面开始逐个解析。
目录结构完整解读
apps ------ 示例工程
这是最重要的目录之一。你的项目基本从这里复制一个 Demo 改出新工程。
apps/ 下的典型子目录:
apps/common/内部结构示例
audio/ // 音频解码、音量、混音 bt_common/ // 蓝牙共通逻辑(配对、广播、协议封装) cJSON/ // JSON库 device/ // 传感器与设备抽象(I2C、ADC、触摸、RTC) music/ // 音频播放 demo debug/ // log 打印、断言、调试模块 update/ // OTA / U盘升级逻辑 config/ // 配置头文件 include/ // 公共头文件
实战提示
-
想做 BLE 透传 / 蓝牙控制:从 spp_and_le 复制一份工程出来
-
想做 HID 遥控器:从 hid/ 工程出发
-
想纯 BLE:删掉 spp 的部分即可
cpu------ CPU/Board 支持包(BSP)
这里是 MCU 的底层支撑,包括:
-
启动代码(Reset、堆栈、C 运行时初始化)
-
链接脚本(.ld)
-
外设底层驱动适配
-
GPIO/I2C/SPI/UART/ADC 等引脚定义
-
各芯片型号(BR23、BR30、AC63X 等)专用驱动
典型结构:
cpu/ ├── ac63x/ │ ├── startup/ │ ├── board_config/ │ ├── driver/ │ ├── linker/ │ └── chip_reg.h ├── br23/ ├── br25/ ├── br30/ ...
其中最常修改的是:
-
board_config/
设置 GPIO、I2C、UART、PWM、按键、电源管理配置
-
linker/
调整 Flash 分区、OTA 位置等(慎改)
include_lib------ 功能库 / 蓝牙协议栈 / 驱动层
这是 SDK 的核心库集合,是真正"能让系统跑起来"的地方。
include_lib/ 下常见子目录:
后面我会对**driver/**再深入讲一次。
doc------ 官方文档
包括:
-
快速上手指南
-
蓝牙协议使用说明
-
工具链文档
-
FMR(功能模块说明)
-
芯片硬件手册
-
OTA 文档
你文章可以放几张 pdf 目录截图(很加分)。
sdk_tools------ 构建/升级工具
这里包含:
-
fw_upgrade tool
-
download tool
-
build_autoconfig 工具
-
json 配置工具(UI工具使用)
在量产时用得最多,例如批量烧录。
tools------ 通用脚本
make_prompt.bat pack_download.bat autobuild.py project_generator/ resource_packer/
主要用于:
-
工程生成
-
资源打包(如音乐、图片)
-
自动构建脚本
3.7 patch_release ------ 官方补丁
存放:
-
已知 bug 修复
-
版本更新的增量包
不要轻易删除。
五、重点深入讲解(源代码级)
apps/spp_and_le ------ BLE/经典蓝牙透传示例(深度解析)
该示例是做常用的"BLE控制 + APP通讯"的最佳工程基础。
目录结构如下:
apps/spp_and_le/ ├── app_spp_le.c ├── app_spp_le.h ├── app_config.c ├── app_config.h ├── bt_ble.c ├── bt_spp.c ├── makefile ├── project.cbp └── README.md
(1)app_spp_le.c ------ 主业务逻辑(重点)
核心职责:
典型关键函数(你可贴截图):
voidble_app_start(){ ble_app_init(); le_adv_start();}voidble_data_recieve_cb(att_data_t *data){printf("BLE RX: %s", data->buf);// 在这里加入你护眼仪的控制逻辑,比如开/关、模式调节}
(2)bt_ble.c ------ BLE 广播、GATT、连接管理
包含:
-
广播参数设置(interval、data、flag)
-
GATT service/characteristic 配置
-
BLE 状态机(INIT → ADV → CONN)
常用函数:
le_adv_set_data()le_adv_set_param()le_att_server_init()
(3)bt_spp.c ------ 经典蓝牙 SPP 数据透传
如果你需要兼容 Android 旧版本设备或 PC 工具,这部分会派上用场。
-
SPP server 创建
-
SPP 数据 send/recv 回调
-
串口透传实现(UART to BT)
(4)app_config.c/h ------ 工程全局配置
项目里常见修改点:
-
项目名称
-
蓝牙名称
-
是否打开 log
-
功能宏开关(宏多,需要按需关闭多余模块减小 ROM)
实战总结
-
广播包(设备名、UUID)在 bt_ble.c 调整
-
控制命令解析写在 app_spp_le.c 的 BLE 回调
-
配置需求(如是否需要 SPP)写在 app_config.h
4.2 include_lib/driver ------ 驱动层解析(GPIO/UART/PWM 级)
目录结构示例:
driver/ ├── gpio/ │ ├── gpio.c │ ├── gpio.h ├── uart/ │ ├── uart.c │ ├── uart.h ├── iic/ │ ├── soft_i2c.c │ ├── hw_i2c.c ├── pwm/ │ ├── pwm.c │ ├── pwm.h ├── adc/ │ ├── adc_api.c │ ├── adc_api.h └── usb/
GPIO 示例(gpio.c)
voidgpio_set_direction(gpio_tpin,intdir) voidgpio_set_pull_up(gpio_tpin,intenable) voidgpio_write(gpio_tpin,intvalue)
适用于:
-
控制按键
-
控制马达驱动脚
-
控制 LED 灯(例如不同模式的指示灯)
UART 示例(uart.c)
voiduart_init(uart_port_tport,intbaud) intuart_send_byte(uart_port_tport, u8 byte)
可用于:
-
外接传感器
-
调试信息输出
-
串口转蓝牙透传
PWM 示例(pwm.c)
用于你的护眼仪马达、气泵、震动模块控制:
voidpwm_init(u8 ch) voidpwm_set_duty(u8 ch,intduty) voidpwm_set_freq(u8 ch,intfreq)
驱动层调试提示
-
修改 IO 时不要直接改驱动,去cpu/xxx/board_config
-
驱动层非常稳定,尽量不要改源码
-
建议通过 apps 层调用 API,而不是直接写寄存器
我都不知道后面怎么继续了,先混着说实话到这一步了,然后自己对操作系统也不熟悉,里面的代码看着揪心