套件概述 7 S: P# Z3 y! y ]- I 在嵌入式蓝牙开发中,特别是针对STM32WB系列,修改或配置蓝牙设备地址是常见的需求。不论是为了实现特定的测试、满足隐私要求,还是为了区分开发和生产设备,对蓝牙地址的定制化处理都是至关重要的。本文将重点介绍如何利用aci_hal_write_config_data函数来成功地修改STM32WB的蓝牙地址。我们会详细探讨该函数的工作原理、所需的参数以及实际操作步骤,确保读者能够快速、高效地完成相关任务。 g2 c$ B3 ^; s# E4 I1 j + I! b; B$ p/ a/ M 选择芯片型号 & B; a. |/ }7 O d, f0 h ) m& b! A) v* I7 l; b 配置时钟源 HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用外置的时钟源,故都选择Crystal/Ceramic Resonator选项,如下所示:& j9 o. b) {1 R( S: W1 ~3 g& l 配置时钟树 7 F5 `6 ]% z0 g3 u$ Z4 p RTC时钟配置 ( I" w3 a# M% @; i* x1 c. u 6 M0 ?: b1 D: W n RFWKP时钟配置0 A6 l( m4 n+ h1 Q # W$ F7 Y( T. a 查看开启STM32_WPAN条件 可以看到,需要开启RF、RTC、RCC、IPCC、HSEM。& _/ x+ ?: q8 Q; j& ^ I 3 H& ` y& z# d# U! y h " }' }) k; w7 ] 配置HSEM & @2 E7 w; H/ ]7 e+ \- Q 硬件信号量(HSEM)模块用于管理多个进程之间共享的访问权限和资源同步。0 e; N* U+ S' @7 x/ H% N( k 开启HSEM如下。/ i( e3 r9 W" h$ ?) h' P5 ? 4 c7 |6 b. O7 h: c" R) d! b ' @, l1 d9 `- Q& \3 Q6 t) b# ` 配置IPCC R1 c2 J/ T) g 通信控制器(IPCC)模块的主要用于cpu之间的信号消息交换。* `. O) D5 y% a9 N/ W# n( H" w 开启如下所示。 + A8 z4 n$ w& n; V8 I2 s/ b 配置RTC , U# m- }! i1 B7 V; q 3 C6 }" R" H' n5 Y- G: {1 A' A 启动RF % k$ F! @# B" k. T$ N 5 ^$ a* w: v2 W- E* j. I % S; c# I9 X" I2 H3 S1 I6 u 开启蓝牙 $ |6 R; F! A, R. K . q1 c5 m) m- ^7 N6 k) g 配置为自定义模板。 - z3 A1 j K! W9 q$ |, L3 ` # r5 f! Z; y$ O( ~; S+ P5 _ 命名设备名( v: V8 @; I: Z$ f0 u1 ^. J 6 V* a6 b+ x; ]- V& Z 8 B! W. g3 D2 M! `9 K" J4 q- N 配置BLE GATT, l* k3 ]& T5 m$ B ) {, o% E: N$ @. u2 ^ 配置SVC/ U, }8 Y# ~ p( K' q d; z4 F1 l7 X, D9 ^8 C# T# d' V 设置工程信息 5 x0 D' {& D2 j0 n 工程文件设置 D% X3 S6 U: T+ O5 A 2 U# u& K ~; @5 g/ h" D; H 5 K' o* a4 ^% r9 K; R* k" l 工程文件设置 # X) A+ j& n2 J( K, ]1 S- r3 f 设置公共地址的ACI命令为:( R0 S1 a# d- V tBleStatus aci_hal_write_config_data(uint8_t offset, uint8_t len, const uint8_t *val). / D- q- n/ z* z+ X 修改方式如下所示。8 K8 d3 i# v2 k0 F$ i* q$ m- ^ Ble_Hci_Gap_Gatt_Init 这段代码主要用于初始化STM32WB系列的蓝牙(BLE)相关功能。- p* A% {% C. T9 i C$ i9 D 下面选中的函数可以修改BLE设备公共地址。 设置BLE公共地址:首先,获取BLE默认地址BleGetBdAddress,然后通过aci_hal_write_config_data函数使用预定义的地址(0xFF, 0xEE, 0**, 0xCC, 0xBB, 0xAA)覆盖它。 生成/设置静态随机地址:根据条件编译标志来确定是使用预定义的静态随机地址还是使用随机数生成器产生的地址。设置了正确的格式后,通过aci_hal_write_config_data将随机地址写入BLE控制器。0 h3 d3 g2 T& A9 o uint8_t bdaddr[] = {0xFF, 0xEE, 0**, 0xCC, 0xBB, 0xAA};# q7 o1 b8 s7 c5 d* b/ A9 a ret = aci_hal_write_config_data(CONFIG_DATA_PUBADDR_OFFSET, CONFIG_DATA_PUBADDR_LEN, bdaddr); % w! s1 M* o$ Q 结果演示 % q6 |* R2 S" N; t9 o8 V% G# @ 通过手机和STM32WB建立连接和断开连接可以查看到BLE地址如下。 ( ]! b }1 M- N1 ?4 f/ i 4 p9 Y" u# j# U# A) `/ y 转载自: 记帖[color=rgba(0, 0, 0, 0.9)] 6 h# a0 }/ m# ~7 i' f3 T0 ?# X 如有侵权请联系删除 |
4月25日培训|基于ST 双核多协议STM32WB55的Matter方案开发
实战经验 | 关于STM32WB OTA 速率提升引发的讨论
基于STM32WB55的配置串口打印Debug经验分享
基于创建STM32WBA BLE_Custom工程经验分享
来看直播了,就在明天 | STM32 Matter 解决方案,轻松实现智能家居无缝连接
基于STM32WB55开发之套件概述(1)
基于STM32WB55开发之监测STM32WB连接状态(1)
STM32WB基于Custom Template实现客户定制BLE私有协议
如何基于STM32WB一次性烧写FUS+STACK+APP
【STM32WB55评测】评测四 蓝牙mesh摸索(二)