1. 课程导学与开发环境搭建
各位同学好,我是你们这门课的老周。做了十几年嵌入式,从8位机一路折腾到双核无线MCU,踩过的坑能绕深圳湾一圈。今天咱们开始第一讲,先把地基打牢。
这一章的目标很明确:搞清楚BLE到底是个啥,为什么选STM32WB,以及怎么把开发环境跑起来。别急着敲代码,先把这些概念理清楚,后面调优时才不会抓瞎。
1.1 BLE技术概览:它到底省电在哪?
低功耗蓝牙,英文叫Bluetooth Low Energy,简称BLE。很多人以为它就是普通蓝牙的省电版,其实不完全对。BLE是蓝牙技术联盟从4.0开始推的一套全新协议栈,跟经典蓝牙(BR/EDR)在底层设计上就有本质区别。
我刚开始接触BLE时也有个疑惑:都是2.4G频段,凭什么BLE就能用纽扣电池跑几个月?后来啃完协议栈才明白,核心在于三个字——不连续。
- 经典蓝牙:建立连接后持续传输,像打电话,一直占着线。
- 低功耗蓝牙:大部分时间在睡觉,醒来广播一下或者快速传完数据继续睡。像发微信,发完就挂。
BLE的省电逻辑说白了就是:能不干活就不干活,干活时尽量快。它定义了40个信道(37个数据信道+3个广播信道),采用跳频扩频技术,每次通信时间极短,平均功耗可以做到微安级别。
关键指标对比
| 特性 | 经典蓝牙 (BR/EDR) | 低功耗蓝牙 (BLE) |
|---|---|---|
| 信道数 | 79个,1MHz带宽 | 40个,2MHz带宽 |
| 峰值功耗 | ~30mA | ~15mA |
| 待机功耗 | ~1mA | ~1μA |
| 连接建立时间 | ~100ms | ~3ms |
| 应用场景 | 音频流、文件传输 | 传感器、穿戴、IoT |
这里有个坑,我提醒一下:BLE虽然省电,但它的数据吞吐量远不如经典蓝牙。如果你要做音频传输或者大文件推送,别选BLE,那是给自己找麻烦。
1.2 为什么选STM32WB系列?
市面上能做BLE的芯片很多,Nordic、Dialog、TI都有成熟方案。但我个人习惯用ST的片子,原因有三:
- 双核架构:Cortex-M4跑应用,Cortex-M0+专门跑BLE协议栈。应用代码崩了不影响无线连接,这在调试时太香了。
- 生态成熟:STM32CubeMX一键生成工程,HAL库统一,从F系列迁移过来几乎零成本。
- 射频性能稳定:我在项目中做过实测,-96dBm的接收灵敏度,空旷地带50米通信毫无压力。
STM32WB系列目前主流型号是WB55和WB35。WB55带USB和全速OTG,WB35砍了USB但更便宜。咱们课程用的是WB55 Nucleo板,资源最全,方便大家折腾。
选型建议:如果产品对成本敏感且不需要USB,选WB35;如果要做原型验证或者需要OTA升级,直接上WB55,省心。
1.3 硬件平台介绍
咱们课程用的硬件是STM32WB55 Nucleo-64板,外加一块传感器扩展板。我简单说一下核心配置:
- 主控:STM32WB55CGU6,Cortex-M4 @64MHz + Cortex-M0+ @32MHz
- 内存:1MB Flash,256KB SRAM
- 无线:BLE 5.0,支持2Mbps、长距离、广播扩展
- 外设:USB、UART、I2C、SPI、ADC、DAC、RTC
- 传感器扩展板:集成温湿度(HTS221)、气压(LPS22HB)、加速度计(LSM6DSL)、磁力计(LIS3MDL)
这块Nucleo板有个好处——自带ST-Link调试器,插上USB线就能下载和调试,不用额外买工具。我记得第一次用WB55时,从拆包装到点灯只花了10分钟,体验确实不错。
1.4 开发环境搭建:STM32CubeIDE
工欲善其事,必先利其器。咱们用ST官方推荐的STM32CubeIDE,它集成了CubeMX配置工具和Eclipse IDE,一套搞定。
安装步骤很简单,但我还是把关键点列出来:
- 去ST官网下载STM32CubeIDE(建议选最新稳定版,别追beta)
- 安装时勾选所有组件,包括STM32WB系列固件包
- 安装完成后打开,在Help菜单里更新固件包到最新
- 创建新工程,选择STM32WB55RG(Nucleo板对应的型号)
- 在Pinout & Configuration里使能BLE,选择P2P Server模板
注意:安装路径不要有中文和空格,否则编译时可能报一些莫名其妙的错误。我曾经因为这个折腾了一下午,最后发现是路径问题,气得想砸电脑。
工程创建完成后,你会看到两个核心文件:main.c(M4应用代码)和 ble_app.c(BLE协议栈回调)。这两个文件就是咱们后面调优的主战场。
1.5 知识体系总览
为了让大家对本章内容有个整体印象,我画了一张结构图。你看一眼就知道这一章讲了什么,以及各部分之间的关系。
1.6 快速验证:点个灯,跑个BLE广播
环境搭好后,咱们做个快速验证。新建工程,在main.c里加上LED闪烁代码,同时使能BLE广播。代码很简单:
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_BLE_Init();
while (1)
{
HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
HAL_Delay(500);
}
}
编译下载后,用手机打开nRF Connect或者LightBlue,应该能扫描到一个叫"STM32WB_BLE"的设备。能扫到,说明你的环境没问题,BLE协议栈已经跑起来了。
小技巧:如果手机扫不到设备,先检查天线是否接好。Nucleo板默认带天线,但有些开发板需要外接。我遇到过好几次,折腾半天发现是天线没焊,尴尬得很。
好了,这一章的内容就到这里。环境搭好了,板子跑起来了,后面咱们就可以正式开始性能调优的实战了。