|
套件概述 / Q2 q- _. Q1 L* k$ B2 U# c 在嵌入式蓝牙开发中,特别是针对STM32WB系列,修改或配置蓝牙设备地址是常见的需求。不论是为了实现特定的测试、满足隐私要求,还是为了区分开发和生产设备,对蓝牙地址的定制化处理都是至关重要的。本文将重点介绍如何利用aci_hal_write_config_data函数来成功地修改STM32WB的蓝牙地址。我们会详细探讨该函数的工作原理、所需的参数以及实际操作步骤,确保读者能够快速、高效地完成相关任务。
选择芯片型号 ; d5 ?+ k8 Q" C) C6 ^3 X" d
' V; D f" g/ i$ |! _5 S1 n) e 配置时钟源 9 s: a: |! w9 K HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用外置的时钟源,故都选择Crystal/Ceramic Resonator选项,如下所示:9 \$ K/ ^ ?. F
配置时钟树 & ~; Z( E3 p4 _
RTC时钟配置 4 C4 R5 U. B& K3 ^4 d
RFWKP时钟配置
查看开启STM32_WPAN条件 / K5 T% o2 `8 O8 f1 L! V* | 可以看到,需要开启RF、RTC、RCC、IPCC、HSEM。
! {0 ]6 ~/ Q$ L5 F K$ A3 t 配置HSEM 硬件信号量(HSEM)模块用于管理多个进程之间共享的访问权限和资源同步。- W1 J; W/ x) o ^# R5 A% S1 }1 s. e 开启HSEM如下。* O) l; ^8 B9 Q x ) S2 g& ~8 o2 A0 G5 R& g6 [% p
配置IPCC. a" k j4 n) b7 \; [ 通信控制器(IPCC)模块的主要用于cpu之间的信号消息交换。 开启如下所示。( o7 W: V8 z; q 9 U% q* `/ q# j
6 x- s7 ^6 c+ G8 a1 ~: \& v 配置RTC $ X* \2 d( f7 T. h& Z( p 1 f0 J. u0 S& O1 Q0 N
! d7 x% Q0 `% q1 e% `; ^ 启动RF
% s2 Y) L7 m$ U: d# D: m 开启蓝牙 ! I& m5 ~0 N6 Q1 ]- K # l4 i& F. [. Z: g
% ? y% g$ y# U- p' S! `8 [) V, C 配置为自定义模板。
. j( b2 D! \# ^2 c . w" h5 M" l0 V 命名设备名8 y4 E! f8 t8 ^' G8 ~* v
1 X% o" h2 n Z6 U; m5 ` 配置BLE GATT/ ]2 B2 Q4 Q# L- e2 B% f) T, v8 Q , z4 Y) t! p! C# B' B9 [
5 O O7 U; O/ d 配置SVC& L& n) X$ Z% ~9 v# n H# j# t; T' l4 q0 x3 Q+ t
设置工程信息
工程文件设置 8 d) F) y1 W$ c" c% d & q& L! v1 P' ^' C* @' v & u: X7 b/ e+ i& s! ` 工程文件设置 ; K" ?7 @! ?4 u" J- \) s 设置公共地址的ACI命令为: tBleStatus aci_hal_write_config_data(uint8_t offset, uint8_t len, const uint8_t *val).! z- B- {5 m/ c( N/ R3 }
( Z/ k4 K0 T# F 修改方式如下所示。 ' k8 G5 {9 x" Z7 s9 Q/ E( C
Ble_Hci_Gap_Gatt_Init 0 i' m7 N# h( |. h) @( ? 这段代码主要用于初始化STM32WB系列的蓝牙(BLE)相关功能。; h' n0 d. {" N0 I
# @2 S0 N( K: d1 B 下面选中的函数可以修改BLE设备公共地址。. b% T l' o5 Q9 h% ~- N 6 Y9 P( ]9 u' e$ q1 d. }, H) W# S 设置BLE公共地址:首先,获取BLE默认地址BleGetBdAddress,然后通过aci_hal_write_config_data函数使用预定义的地址(0xFF, 0xEE, 0**, 0xCC, 0xBB, 0xAA)覆盖它。 / E5 i7 V8 P, v7 Q0 n$ G 生成/设置静态随机地址:根据条件编译标志来确定是使用预定义的静态随机地址还是使用随机数生成器产生的地址。设置了正确的格式后,通过aci_hal_write_config_data将随机地址写入BLE控制器。 ; G' N: _( O9 n Y: Y% M0 U3 g
4 {* G0 @8 {5 x& y) I7 q! K4 g uint8_t bdaddr[] = {0xFF, 0xEE, 0**, 0xCC, 0xBB, 0xAA}; ret = aci_hal_write_config_data(CONFIG_DATA_PUBADDR_OFFSET, CONFIG_DATA_PUBADDR_LEN, bdaddr);$ d; P" q8 q8 r ; T$ e" a8 L2 s2 L+ {3 | 结果演示 通过手机和STM32WB建立连接和断开连接可以查看到BLE地址如下。 # V9 b! g! l+ b" t# U3 w1 n7 n
6 t# L) F5 R; D8 h" Q) t5 Y# @3 Z1 { 转载自: 记帖 - p3 f8 Y0 b5 y, l- e 如有侵权请联系删除 + M: a" d& {: c/ I |
低功耗蓝牙无线升级:STM32WB OTA 固件更新技术解析
STM32WB Zigbee 自定义集群开发实战:AN5491 应用笔记深度解读
吃透:STM32WB 上 Zigbee 睡眠终端设备开发攻略
STM32 无线 MCU HSE 频率与启动时间精确调谐实战指南
深度解读:STM32WB 2.4GHz 低成本 PCB 蛇形天线设计实战指南
经验分享 | STM32WB 双核无线 MCU 开发全流程实战指南
STM32WB 基于 Custom Template 实现 BLE 私有协议 实操开发指南
详解STM32单片机的堆栈
STM32单片机进行除零运算,为何程序不崩溃?
从照明到楼宇:STM32WBx5 BLE Mesh 落地指南
微信公众号
手机版