BlueNRG-2 是意法半导体面向低成本 IoT 场景推出的 BLE 5.2 低功耗蓝牙 SoC,在实际产品开发中,常被用作主控芯片,通过 GPIO 输出高低电平控制外设开关、使能信号等。不少开发者都会遇到同一个问题:芯片进入低功耗模式后,GPIO 端口能不能保持固定输出电平?该如何配置?
本文严格依据 ST 官方 LAT1220 应用笔记,把端口保持的可用引脚、控制逻辑、配置方式一次性讲清楚,帮你避开调试坑。
资料获取:【应用笔记】LAT1220 关于BlueNRG-2在低功耗模式下端口保持的问题
1. 核心结论:只有 3 个 GPIO 支持低功耗保持
BlueNRG-2 并非所有 GPIO 都能在低功耗下维持输出状态,仅有 3 个引脚具备该能力,这是芯片硬件架构决定的:
- GPIO9
- GPIO10
- GPIO11
只有将这 3 个引脚配置为输出模式,才能在正常运行与低功耗两种状态下,都保持预设的高低电平;其余 GPIO 进入低功耗后无法锁定电平,不适合用于需要持续控制的外设链路。
2. 关键设计:两种模式由两套寄存器独立控制
GPIO9/10/11 在不同工作状态下,电平由完全独立的寄存器组控制,互不干扰,这也是端口能稳定保持的核心原因:
- 正常工作模式:由标准GPIO 模块寄存器控制,对应常规 GPIO 初始化、电平翻转等操作逻辑。
- 低功耗模式:由系统控制寄存器中SLEEPIO_XX 专用组控制,关键寄存器如下:
- SLEEPIO_OEN:低功耗模式 GPIO 输出使能
- SLEEPIO_OUT:低功耗模式输出电平值
- SLEEPIO_PE:低功耗模式上拉使能
3. 工程实现:直接调用官方 API,不用手动配寄存器
官方 SDK 已做好封装,不用手动操作寄存器地址,降低配置门槛:
- 配置文件路径:
BlueNRG1_gpio.c - 文件内已提供正常模式 + 低功耗模式的 GPIO 状态设置 API 函数,直接调用即可完成两种模式下的电平配置,适配工程编译与批量调试。
4. 项目选型建议:复杂场景推荐升级芯片
BlueNRG-2 定位低成本、轻量级、小资源IoT 应用,外设与 GPIO 能力有限。如果你的产品有以下需求,不建议强行适配:
- 需要更多支持低功耗保持的 GPIO
- 需用芯片承担复杂主控逻辑
- 对外设扩展性、接口数量要求高
官方推荐升级方案:
- 第三代 BlueNRG-LP/LPS(BlueNRG 系列迭代款)
- STM32WB 系列蓝牙 MCU
两款芯片功能更强、外设更丰富,低功耗 GPIO 控制更灵活,能覆盖更多商用场景。
5. 要点速记(直接拿去用)
- 低功耗输出保持 → 仅限GPIO9、GPIO10、GPIO11
- 控制逻辑分离 → 正常模式用 GPIO 寄存器,低功耗用 SLEEPIO 寄存器
- 代码配置 → 直接调用
BlueNRG1_gpio.c官方 API - 复杂项目 → 优先选 BlueNRG-LP/LPS 或 STM32WB
156