第一次做蓝牙产品,从零开发 嵌入式开发日志(2)AC63NSDK 完整合并版目录说明

我是跟着杰理官方文档去做的,很详细

https://doc.zh-jieli.com/AC63/zh-cn/master/getting_started/preparation/index.html

先把这个搭建环境记录一下吧,以下是我总结的:

根据官方"开发环境安装说明",推荐在Windows 系统下使用 Code::Blocks + 杰理 Windows 工具链进行开发。

主要步骤为:

  1. 安装 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 ------ 主业务逻辑(重点)

核心职责:

  • 初始化 BLE + SPP 双模

  • 注册 GATT 事件回调

  • 处理蓝牙数据接收/发送

  • 设置广播包 / 广播间隔

  • 管理连接/断开状态

典型关键函数(你可贴截图):

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,而不是直接写寄存器

我都不知道后面怎么继续了,先混着说实话到这一步了,然后自己对操作系统也不熟悉,里面的代码看着揪心

相关推荐
SystickInt2 小时前
常见问题整理总结
单片机·嵌入式硬件
亦诚亦心2 小时前
单片机各种驱动简要解释
单片机·嵌入式硬件
阿拉斯攀登2 小时前
51单片机:点灯程序
单片机·嵌入式硬件·51单片机
逐步前行3 小时前
C51_AT24C02 EEPROM
单片机
zhmc3 小时前
单片机ADC内部基准参考电压有那些应用
单片机·嵌入式硬件
阿拉斯攀登4 小时前
51单片机概述
单片机·嵌入式硬件·51单片机
tang_shou4 小时前
STM32CubeMx使用STM32F4系列芯片实现串口DMA接收
c语言·arm开发·stm32·单片机·嵌入式硬件·mcu·stm32cubemx
m0_553210044 小时前
stm32读取rtc年份错误问题,需要指定星期几
stm32·单片机
Jerry丶Li4 小时前
NXP--S32K移植FreeRTOS
嵌入式硬件·rtos·nxp·s32k