【BLE】STM32WB55+CubeMAX_BLE配置

BLE Applications and Services

BLE Wireless Stack

含义:蓝牙低功耗协议栈的版本/模式配置。

显示值 Full:表示启用完整版蓝牙低功耗协议栈,

支持多种设备角色(如外围设备、中央设备)和复杂功能(如GATT服务器/客户端、广播/扫描等)。

BLE Application Type

含义:蓝牙设备的应用场景类型。

显示值 Server profile:

表示设备作为GATT(通用属性配置文件)服务器角色------

即设备提供"服务(Service)"和"特征(Characteristic)",

供其他"中央设备"(如手机、平板)访问和读写数据。

服务器:存储并提供数据 -从机

客户端:主动请求并读取数据 -主机-手机

Server Mode(服务模式,仅在"Server profile"下生效)

这一部分配置具体要启用哪种类型的"服务器服务"(服务由蓝牙SIG标准定义或自定义)。各选项含义:

BT SIG Beacon

蓝牙SIG定义的信标(Beacon)服务(如iBeacon、Eddystone),

用于广播设备标识信息(不建立连接,仅单向广播)。Disabled 表示不启用信标功能。

BT SIG Blood Pressure Sensor

蓝牙SIG标准的血压计传感器服务,

用于传输血压测量数据(需中央设备连接)。Disabled 表示不启用该服务。

BT SIG Health Thermometer Sensor

蓝牙SIG标准的健康温度计传感器服务,

用于传输体温数据。Disabled 表示不启用。

BT SIG Heart Rate Sensor

蓝牙SIG标准的心率传感器服务

(常见于运动手环、心率带),传输心率数据。Disabled 表示不启用。

Custom P2P Server

自定义点对点(P2P)服务器服务------

开发者可自定义服务UUID、特征等,实现特定数据交互。

Enabled 表示启用自定义P2P服务(这是当前设备的核心服务类型)。

Custom Template

自定义模板(用于快速创建服务的"模板"功能),

Disabled 表示不启用模板生成服务。

BLE Services Configuration(服务配置参数)

这一部分配置设备的角色支持和GATT服务的回调数量,涉及蓝牙低功耗的核心"角色"概念:

The device needs to support the Peripheral Role = 1

Peripheral(外围角色):设备作为"被连接方",通过广播广告数据被中央设备发现,建立连接后作为GATT服务器提供数据(如传感器、智能硬件)。

值 1 表示设备支持"外围角色",即可以作为广播设备,等待中央设备(如手机)发起连接。

The device needs to support the Central Role = 0

Central(中央角色):设备作为"主动方",扫描广播设备、发起连接,连接后作为GATT客户端读写外围设备数据(如手机、平板)。

值 0 表示设备不支持"中央角色",即不会主动扫描/连接其他设备,仅作为"被连接方"。

BLE_CFG_SVC_MAX_NBR_CB = 1

含义:GATT服务(Server角色)最大回调数量。

回调(Callback)是协议栈向应用层通知"服务相关事件"(如特征值被读/写、订阅状态变化)的机制。

值 1 表示最多支持1个服务的回调函数(即仅有一个服务需要处理事件)。

BLE_CFG_CLT_MAX_NBR_CB = 0

含义:GATT客户端(Client角色)最大回调数量。

由于设备不支持"中央角色"(Central Role=0),因此客户端回调数量为 0,表示没有客户端角色相关的事件处理。

P2P Service(点对点服务配置)

P2P_SERVER_NUMBER = P2P_SERVER1

含义:选择自定义P2P服务的编号。

若项目中配置了多个自定义P2P服务,此选项用于指定"当前启用的是哪一个服务配置"(此处选P2P_SERVER1,即"第一个自定义P2P服务")。

Local Name(本地设备名称)

LOCAL_NAME = 810

含义:设备在蓝牙广告数据中广播的"设备名称"。

当手机等设备扫描蓝牙设备时,此名称会显示在设备列表中,用于用户识别(如"810"就是设备在蓝牙列表里的名字)。

LOCAL_NAME LOCAL_NAME Parameter Description: Advertising information, user defined. Max size is 7 charactersL OCAL_NAME LOCAL_NAME 参数说明:广播信息,由用户定义。最大长度为7个字符。

Configuration *** ***

HW Timer Server(硬件定时器服务)

该模块与RTC(实时时钟)定时器相关,用于管理低功耗定时器服务。

CFG_HW_TS_MAX_NBR_CONCURRENT_TIMER

含义:硬件定时器服务器支持的"最大并发定时器数量"。

取值20:表示系统最多同时创建、管理20个独立的定时器实例(例如,多个周期性任务、延时任务等)。

  • 基于硬件定时创建的软件定时器的数量

CFG_HW_TS_NVIC_RTC_WAKEUP_IT_PREEMPTPRIO

含义:RTC唤醒中断在NVIC(嵌套向量中断控制器)中的"抢占优先级"。

原理:STM32的NVIC优先级分为"抢占优先级"和"子优先级",数值越小优先级越高。

取值3:表示RTC唤醒中断的抢占优先级为3

它的核心规则是:数值越小,优先级越高

只有当新中断的抢占优先级比当前正在执行的中断的抢占优先级更高时(即数值更小),抢占才会发生

CFG_HW_TS_NVIC_RTC_WAKEUP_IT_SUBPRIO

含义:RTC唤醒中断在NVIC中的"子优先级"。

原理:"子优先级"在同抢占优先级的中断中起作用(数值越小,响应越快)。

取值0:表示RTC唤醒中断的子优先级为0(同抢占优先级下,优先响应)。

CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION

含义:是否使用PRIMASK寄存器标记"临界区"。

原理:PRIMASK是ARM Cortex-M内核的寄存器,置1时屏蔽所有可屏蔽中断,用于保护"临界区代码"(例如修改共享变量、关键外设寄存器的代码段,需避免中断打断)。

取值1:表示启用PRIMASK保护临界区(即进入临界区时屏蔽中断,退出时恢复)。

/**

*在计时器服务器中定义关键部分

*Timer服务器不支持嵌套API

*申请应:

*a)确保这种情况永远不会发生

*b)定义关键部分

*默认实现是使用PRIMASK位屏蔽所有中断

*TimerServer驱动程序使用关键部分来避免上下文损坏。这是通过宏实现的

*TIMER_ENTER_CRITICAL_SECTION和TIMER_EXIT_CRITICAL_DECTION。设置CFG_HW_TS_USE_PRIMASK_AS_CRITICAL_SECTION时

*所有STM32中断都被CortexM CPU的PRIMASK位屏蔽。可以使用BASEPRI

*CortexM CPU的寄存器允许一些高优先级的中断。在这种情况下,用户应

*重新实施TIMER_ENTER_CRITICAL_SECTION和TIMER_EXIT_CRITICAL_DECTION,并确保没有TimerServer

*当输入TIMER关键部分时调用API

*/

CFG_HW_TS_RTC_HANDLER_MAX_DELAY

含义:硬件定时器处理程序的最大延迟时间(基于RTC时钟计算)。

表达式(10 (LSI_VALUE/1000)):

LSI_VALUE是"低速独立时钟"频率(例如32.768kHz)。

计算逻辑:将RTC时钟周期转换为"延迟计数"(例如LSI=32768Hz时,10(32768/1000)=327.68,表示最大延迟约为327个时钟周期)。

CFG_HW_TS_RTC_WAKEUP_HANDLER_ID

含义:RTC唤醒中断处理程序的标识符。

取值RTC_WKUP_IRQn:对应STM32的"RTC唤醒中断号",用于关联中断向量表与处理函数。

*** HW UART(硬件UART配置)

该模块配置串口外设(LPUART/USART)及DMA传输。

CFG_HW_LPUART1_ENABLED

含义:是否启用LPUART1(低功耗UART1)。

取值Enabled:表示启用LPUART1(LPUART支持低功耗模式下通信,如休眠时唤醒接收数据)。

不开启低功耗串口或者串口 CFG_DEBUG_APP_TRACE 调试功能关闭

不开启串口,调试功能没有办法打开,

CFG_HW_LPUART1_DMA_TX_SUPPORTED

含义:LPUART1是否支持DMA发送。

原理:DMA(直接内存访问)允许数据"不经过CPU"直接传输,降低CPU负载。

取值Disabled:表示不启用LPUART1的DMA发送(数据发送需CPU轮询或中断处理)。

CFG_HW_USART1_ENABLED

含义:是否启用USART1(通用同步异步收发器1)。

取值Disabled:表示不启用USART1(该串口不工作)。

CFG_HW_USART1_DMA_TX_SUPPORTED

含义:USART1是否支持DMA发送。

取值Disabled:表示不启用USART1的DMA发送(即便USART1被启用,DMA发送功能也不生效)。

*** Generic parameters(通用参数)

该模块配置系统级功能(复位、电源、调试、低功耗等)。

CFG_HW_RESET_BY_FW

含义:是否由固件控制"硬件复位"。

原理:固件可通过软件触发复位(如看门狗、自恢复逻辑)。

取值Disabled:表示不启用固件控制的硬件复位(复位仅由外部按键、上电等触发)。

/**

*设置后,这将重置一些硬件资源,以将设备设置为与通电时相同的状态

*固件仅重置可能阻止固件正常运行的寄存器

*

*在最终产品中,该值应设置为0

*

*/

CFG_USE_SMPS

含义:是否使用SMPS(开关模式电源)。

原理:SMPS是板载电源管理模块(如降压、升压DC-DC),用于高效供电。

取值Enabled:表示启用SMPS

SMPS模式:必须在PCB上焊接SMPS所需的外部电感和电容(通常是一个电感和一个或两个电容)。查看STM32WB55的数据手册(Datasheet)和参考设计(Reference Manual)以获取具体的元件参数和布局指导。

LDO模式:无需额外元件,但必须确保不焊接SMPS的电感(或将其替换为0欧姆电阻)。

CFG_USE_SMPS = 1:强烈推荐用于最终产品。这是实现STM32WB系列承诺的超低功耗性能的关键。它会显著降低运行和射频通信时的功耗,延长电池寿命。

CFG_USE_SMPS = 0:主要用于开发调试阶段(如果板子没有安装SMPS元件)或者在极少数对电源纹波极其敏感的应用中。请注意,使用LDO模式会使芯片在发射射频时发热更明显。

CFG_LPM_SUPPORTED

含义:是否支持"低功耗模式"(如睡眠、停止、待机模式)。

取值Enabled:

CFG_DEBUGGER_SUPPORTED

含义:是否支持调试器(如JTAG/SWD)。

取值Disabled:表示不启用调试支持(允许IDE(如Keil/IAR)连接目标板,进行单步、断点调试)。

/**

*当设置为1时,在任何低功耗模式下保持调试器启用

*在生产中应设置为0

*/

CFG_DEBUG_BLE_TRACE

含义:是否启用BLE(蓝牙低功耗)协议的调试追踪。

取值Disabled:表示不输出BLE相关的调试日志(如连接、断开、数据收发等状态)。

CFG_DEBUG_APP_TRACE

含义:是否启用应用层的调试追踪。

取值Enabled:表示启用应用代码的调试日志(如自定义功能的执行状态、变量值等)。

正式版本为 0

CFG_DEBUG_TRACE_LIGHT

含义:是否启用"轻量级调试追踪"。

原理:简化版调试,仅输出关键信息(减少资源占用)。

取值Disabled:表示不启用轻量级调试。

CFG_DEBUG_TRACE_FULL

含义:是否启用"全量调试追踪"。

原理:输出完整调试信息(如所有关键节点、参数、错误日志)。

取值Disabled:表示不启用全量调试(可能因资源占用或日志量过大被禁用)。

/**

*当CFG_DEBUG_TRACE_FULL设置为1时,将使用API名称、文件名和行号输出跟踪

*当CFG_DEBUG_TRACE_LIGHT设置为1时,只输出调试消息

*

*当两者都设置为0时,不输出跟踪

*当两者都设置为1时,将选择CFG_DEBUG_TRACE_FULL

*/

DBG_TRACE_USE_CIRCULAR_QUEUE

含义:调试追踪是否使用"循环队列"存储日志。

原理:循环队列可自动覆盖旧数据,避免内存溢出(适合持续输出日志的场景)。

取值Enabled:表示启用循环队列管理调试日志。

当未设置时,跟踪信息会不断循环通过 UART 发送。

/**

*未设置时,跟踪在通过UART发送跟踪时循环

*/

DBG_TRACE_MSG_QUEUE_SIZE

含义:调试追踪消息队列的"最大容量"。

取值1024:表示队列最多存储1024条消息(1024,需结合具体实现)。

MAX_DBG_TRACE_MSG_SIZE

TRACE 调试的最大长度 1024

/**

*队列数据跟踪的最大缓冲区大小和允许的最大数据跟踪。

*仅在定义了DBG_TRACE_USE_CIRCULAR_QUEUE时使用

*/

*** Application parameters

CFG_TX_POWER

射频发射功率配置 -

含义:设备蓝牙信号的发射功率(单位:dBm)。

功能:

发射功率决定了设备信号的覆盖范围与穿透能力,功率越高(如 0dBm),信号覆盖越远,但功耗也越高;功率越低(如 -15dBm),覆盖范围缩小,但功耗更低。

本例中 -0.15dBm (0x18) 是一个中低功率设置,适用于对功耗敏感且覆盖需求适中的场景(如室内信标)。

CFG_DEBUG_TRACE_UART

调试追踪UART配置 -

含义:调试信息输出的UART接口名称。

功能:

开发过程中,设备会通过该UART接口输出日志(如错误信息、状态提示),便于开发者排查问题。

本例中 hw_lpuart1 表示使用低功耗UART1(LPUART1),该接口通常用于低功耗场景下的调试(如休眠唤醒后输出日志)。

CFG_CONSOLE_MENU

控制台菜单UART配置 -

含义:设备控制台菜单的访问接口(UART)。

功能:

通过UART连接设备(如串口调试工具),可进入设备的"控制台菜单",用于配置参数(如广告间隔、连接参数等)。

本例中提示 No UART selected. You need to activate UART1,表示未配置菜单访问接口,需手动启用UART1才能通过串口进入菜单。

CFG_ADV_BD_ADDRESS

广播BD地址配置 -

含义:蓝牙设备在广播(Advertising)阶段使用的设备地址(BD_ADDR)。

功能:

BD_ADDR是蓝牙设备的唯一标识(类似MAC地址),用于在广告时让其他设备识别到本设备。

本例中 0x7257acd87a6c 是一个静态6字节地址(格式为 XX:XX:XX:XX:XX:XX),用于蓝牙扫描时的设备识别。

CFG_IDENTITY_ADDRESS

身份地址类型配置 -

含义:设备的身份地址类型。

功能:

蓝牙设备建立连接后,使用"身份地址"作为连接标识。

本例中 GAP_PUBLIC_ADDR 表示公共地址(Static Public Address),

是一种静态地址(区别于随机地址),在设备生命周期内保持不变,便于长期识别。

GAP_PUBLIC_ADDR - 公共地址

公共地址的特点:

理论上唯一:由IEEE注册管理机构统一分配,通常已经固化在设备的蓝牙射频芯片中,是全球唯一的。

固定不变:对于给定的设备,其公共地址是永久不变的

CFG_PRIVACY

隐私功能配置 -

含义:蓝牙LE的隐私保护功能是否启用。

功能:

隐私功能通过随机化设备地址,防止设备被长期跟踪(每次广播时地址自动更换)。

本例中 Disabled 表示关闭隐私功能,

设备地址保持静态(如CFG_ADV_BD_ADDRESS设置的地址),适用于不需要匿名的场景(如公开信标)。

CFG_FAST_CONN_ADV_INTERVAL_MIN/MAX

快速连接广播间隔配置(最小/最大) -

含义:设备在快速连接模式下的广告间隔(单位:0.625ms)。

功能:

广播间隔决定了设备"广播自身存在"的频率。

快速连接模式用于需要快速建立连接的场景(如手机靠近设备时立即配对)。

(0x80) = 128

128 * 0.625 = 80ms

(0xA0) = 160

160 * 0.625 = 100ms

CFG_LP_CONN_ADV_INTERVAL_MIN/MAX

低功耗连接广播间隔配置(最小/最大) -

含义:设备在低功耗连接模式下的广告间隔(单位:0.625ms)。

功能:

低功耗模式用于节省功耗,广告频率较低(连接建立速度慢),

适用于对实时性要求不高的场景(如周期性上传数据的传感器)。

(0x640) = 1600

1600 * 0.625 = 1000ms

(0x960) = 2400

2400 * 0.625 = 1500ms

本例中 1000(对应 625ms)和 1500(对应 937.5ms),

表示广播间隔在625ms~937.5ms之间随机切换,大幅降低射频活跃时间,减少功耗。

CFG_IO_CAPABILITY

I/O能力配置 -

含义:设备在蓝牙安全配对(Security Pairing)时的输入/输出能力。

功能:

蓝牙配对时,根据I/O能力选择配对流程(如"数字比较"或"Yes/No确认")。

本例中 Display Yes No (0x01) 表示设备仅能显示"是/否"选项(无数字输入能力),

配对时需用户手动确认(如按按钮选择"Yes")。

CFG_MITM_PROTECTION

MITM

防护配置 -

含义:是否强制要求中间人(MITM)攻击防护。

功能:

MITM防护通过"配对确认"(如CFG_IO_CAPABILITY支持的Yes/No确认)防止黑客在配对过程中篡改密钥。

本例中 MITM protection required (0x01) 表示开启MITM防护,配对时必须用户确认才能建立安全连接(适用于高安全场景,如医疗设备)。

L2CAP_REQUEST_NEW_CONN_PARAM

L2CAP 请求新连接参数 -

含义:L2CAP(逻辑链路控制适配协议)层请求更新连接参数的配置。

功能:

当设备作为从设备(Slave)连接主设备(Master)时,

可通过L2CAP请求调整连接参数(如连接间隔、从机延迟等)。

L2CAP 连接更新请求参数,仅用于与智能手机进行测试。

功能:这行代码是一个开关。当将其定义为 1 时,表示启用在代码中预先编写好的"发起L2CAP连接参数更新请求"的功能。如果将其定义为 0 或其他值,则表示禁用此功能。

本例中 0 表示未启用该功能,设备不会主动请求更新连接参数(使用主设备默认参数)。

CFG_RTCCLK_DIVIDER_CONF

*CFG_RTCCLK_DIVIDER.CONF:

*应设置为0,2,4,8,16

*当设置为2,4,8,16时,支持1Hhz日历

*设置为0时,用户设置自己的配置

CFG_RTCCLK_DIVIDER_CONF 该参数用于配置RTC时钟的分频模式

异步分频器为128-1,同步分频器为256-1,总预分频为(128*256)=32768

CFG_RTCCLK_DIV

该参数是RTC时钟的实际分频系数

决定RTC的计数频率和周期。例如,若RTC时钟源为32.768kHz,分频值为32768,则得到1Hz的计时频率

CFG_RTC_WUCKSEL_DIVIDER

=0 表示唤醒时钟分频系数为0(通常用于调整RTC唤醒间隔)。

CFG_RTC_ASYNCH_PRESCALER

异步预分频器

CFG_RTC_SYNCH_PRESCALER

同步预分频器

预分频器用于进一步分频RTC时钟,生成RTC的计数时钟(影响RTC的"滴答"周期)。

异步预分频器(ASYNCH_PRESCALER=0x0F)异步预分频器用于对RTC的输入时钟源(如LSE或LSI)进行初步分频,降低频率。

同步预分频器(SYNCH_PRESCALER=0x7FFF)同步预分频器对异步分频后的中间频率进一步分频,生成最终的1Hz信号,驱动RTC计数器(如RTC_CNT寄存器)。

通过调整这两个值,可精确控制RTC的计时周期(如每秒中断一次)。

ASYNC_PRESCALER 通常为 7位(0~127)。

SYNC_PRESCALER 通常为 15位(0~32767)

Freq_1Hz = Freq_RTCCLK / [(ASYNCH_PRESCALER + 1) * (SYNCH_PRESCALER + 1)]

0x7F = 127

0Xff = 255

(127+1)(255+1) = 32768

含义:设备同时支持的最大BLE连接数量(包括Central→Peripheral连接、Peripheral→Central连接)。

作用:决定设备的"多连接能力"。例如值为2时,设备可同时与2个对端设备建立BLE连接(如作为Peripheral可连接2个手机,或作为Central连接2个传感器)。

影响:连接数越多,内存占用和功耗越高(需维护多路连接的链路层/GATT上下文)。

2

/**

*设备将支持的最大同时连接数。

*有效值为1到8

*/

CFG_BLE_NUM_GATT_SERVICES

含义:设备GATT服务器中支持的服务数量(GATT服务是BLE功能的逻辑集合,如"心率服务""电池服务")。

作用:限制设备能提供的功能种类。例如值为8时,GATT数据库最多可定义8个服务(每个服务包含多个特性/描述符)。

影响:服务数量越多,GATT数据库越大,内存占用增加;需结合实际产品功能需求配置(如传感器类设备通常只需1-2个服务)。

8

CFG_BLE_NUM_GATT_ATTRIBUTES

含义:设备GATT数据库中的属性总数(属性包括"服务声明、特性声明、描述符"等所有GATT条目)。

作用:决定GATT数据库的"容量"。例如值为68时,GATT数据库最多包含68个属性(如1个服务+5个特性+多个描述符=若干属性)。

影响:属性数量直接影响GATT数据库大小,进而影响内存占用;需根据服务复杂度调整(复杂服务需更多属性)。

68

CFG_BLE_MAX_ATT_MTU

含义:属性协议(ATT)的最大传输单元(每次ATT交互能传输的有效载荷最大字节数,不包含BLE协议头部)。

作用:影响BLE数据传输效率。默认MTU通常为23字节,若协商到更大MTU(如156),可减少数据分包,提升大文件/数据传输效率。

注意:MTU需双方设备协商,取"双方支持的最小值",且受硬件限制(并非配置越大实际协商值越大)。

256

CFG_BLE_ATT_VALUE_ARRAY_SIZE

含义:用于存储"属性值"的缓冲区大小(单位:字节)。

作用:为GATT数据库中的"属性值"(如特性值、长描述符)提供存储空间。例如值为1344时,缓冲区最多可存储1344字节属性值(可支撑多个大特性值,或更多小特性值)。

影响:值越大,能支持的"大属性值"(如长文本、特征值)越多,但内存占用增加。

1344

CFG_BLE_DATA_LENGTH_EXTENSION

含义:数据长度扩展(LE Data Length Extension)功能是否启用。

作用:BLE 4.2+特性,允许增加每个连接事件中可传输的ATT有效载荷大小(从传统27字节提升到硬件支持的最大值,如251字节)。开启后(Enabled),能显著提升大流量数据传输效率(如传感器实时上传数据)。

注意:需双方设备均支持该特性才能协商生效,否则按传统长度传输。

1

CFG_BLE_PERIPHERAL_SCA & CFG_BLE_CENTRAL_SCA

含义:分别配置外围设备(Peripheral) 和 中央设备(Central) 的 SCA(Synchronization Clock Accuracy,同步时钟精度)。

作用:SCA定义设备外部晶振(如32.768kHz TCXO)的精度(单位:ppm,百万分之一),用于LE Secure Connections(安全连接) 的时序同步与配对可靠性。

值500表示500ppm(即±0.05%精度),是消费级设备常见配置(精度越高,连接稳定性/安全性越好,但成本增加)。

区别:PERIPHERAL_SCA针对设备作为Peripheral时的时钟精度;CENTRAL_SCA针对作为Central时的时钟精度。

CFG_BLE_HSE_STARTUP_TIME

含义:外部高速时钟(HSE,如26MHz/40MHz晶振)的启动延迟时间(单位:时钟周期)。

作用:BLE堆栈依赖HSE提供时钟源,该配置告知堆栈"HSE稳定所需的时间"。值0表示使用默认启动时间(由硬件决定,不同芯片默认值不同)。

注意:若配置过小,HSE未稳定时堆栈启动会导致时序混乱;配置过大则增加启动延迟。

CFG_BLE_MAX_CONN_EVENT_LENGTH

含义:单个连接事件的最大持续时间(连接事件是BLE中"主机与从机通信的时间段")。

作用:限制每个连接事件能持续多久(值越大,单次通信时间越长;值越小,连接事件更"碎片化")。

值0xFFFFFFFF表示最大可能时间(受限于硬件/连接间隔),适合大流量传输;但过长会增加功耗(连接事件内设备无法休眠)。

CFG_BLE_VITERBI_MODE

含义:维特比(Viterbi)解码算法是否启用。

作用:维特比算法用于无线信号解码,提升抗干扰能力与接收灵敏度(尤其弱信号环境,如障碍物多、干扰强场景)。开启(Enabled)能改善通信可靠性,但可能轻微增加功耗(现代芯片优化后影响极小)。

CFG_BLE_OPTIONS 及子选项(BLE堆栈初始化标志)

CFG_BLE_OPTIONS 是组合型配置项,通过子选项(如CFG_BLE_OPTIONS_XXX)控制BLE堆栈的细节功能。图中每个子选项对应特定功能:

CFG_BLE_OPTIONS_LL

值:SHCI_C2_BLE_INIT_OPTIONS_LL_HOST

作用:配置链路层(LL)工作在"主机模式",由主机(Host)负责连接建立、维护等链路层逻辑(而非底层控制器接管)。

CFG_BLE_OPTIONS_SVC

值:SHCI_C2_BLE_INIT_OPTIONS_WITH_SVC_CHANGE_DESC

作用:启用"服务变更描述符(Service Changed Characteristic Descriptor)",允许设备在GATT数据库更新后,通知客户端(如手机)"GATT数据库已变更"(需客户端支持该描述符)。

CFG_BLE_OPTIONS_DEVICE_NAME

值:SHCI_C2_BLE_INIT_OPTIONS_DEVICE_NAME_RW

作用:配置设备名属性为"读写权限",客户端(如手机)可读取和修改设备名(若为RO则仅可读)。

RO

CFG_BLE_OPTIONS_EXT_ADV

值:SHCI_C2_BLE_INIT_OPTIONS_NO_EXT_ADV

作用:不支持"扩展广播(Extended Advertising,BLE 5.0+特性)"。扩展广告支持多广告集、高功率广告等,

此处配置为"禁用",设备仅用传统广播(Legacy Advertising)。

CFG_BLE_OPTIONS_CS_ALGO

值:SHCI_C2_BLE_INIT_OPTIONS_NO_CS_ALGO2

作用:不使用"CS算法2(Cycle Shifting Algorithm 2)"(用于BLE跳频时的信道选择优化),可能沿用默认或其他信道算法。

CFG_BLE_OPTIONS_GATTDDB_NVM

→ SHCI_C2_BLE_INIT_OPTIONS_FULL_GATTDDB_NVM

作用:定义GATT数据库(GATTDDB)是否存储在非易失性存储器(NVM)中。

含义:

FULL_GATTDDB_NVM 表示GATT数据库完整存储在NVM(如Flash)。

设备重启后,GATT数据库(如Bonding配对信息、属性值等)不会丢失,可快速恢复状态,适用于需要长期保留配置(如配对关系)的场景。

CFG_BLE_OPTIONS_GATT_CACHING

→ SHCI_C2_BLE_INIT_OPTIONS_GATT_CACHING_NOTUSED

作用:定义是否启用GATT缓存功能。

含义:

GATT_CACHING_NOTUSED 表示不使用GATT缓存。

GATT缓存用于在连接时暂存对端设备的GATT数据库信息(如服务、特征),后续连接时可快速复用缓存,减少"服务发现"耗时。

不启用时,每次连接都需要重新发现服务,节省RAM但可能增加连接初始化时间。

NOTUSED

CFG_BLE_OPTIONS_POWER_CLASS

→ SHCI_C2_BLE_INIT_OPTIONS_POWER_CLASS_2_3

作用:定义BLE发射功率等级(Power Class)。

含义:

POWER_CLASS_2_3 表示选择BLE功率等级2(Class 2,≤+4dBm)和等级3(Class 3,≤+0dBm)。

Class 2:发射功率≤+4dBm,通信距离中等,功耗较低;

Class 3:发射功率≤+0dBm,通信距离较短,功耗更低。

该配置通过限制发射功率,平衡通信距离与功耗(适用于对功耗敏感、通信距离要求不高的场景)。

CFG_BLE_OPTIONS_APPEARANCE

→ SHCI_C2_BLE_INIT_OPTIONS_APPEARANCE_READONLY

作用:定义BLE设备"外观属性(Appearance)"的读写权限。

含义:

APPEARANCE_READONLY 表示外观属性为"只读"。

"外观属性"用于标识设备类型(如手表、心率传感器等),中心设备(如手机)通过该属性识别外设类型。只读属性表示设备启动后,外观属性不可动态修改(常见需求,简化逻辑)。

CFG_BLE_OPTIONS_ENHANCED_ATT

→ SHCI_C2_BLE_INIT_OPTIONS_ENHANCED_ATT_NOTSUPPORTED

作用:定义是否支持"增强型属性协议(Enhanced ATT)"。

含义:

ENHANCED_ATT_NOTSUPPORTED 表示不支持增强型ATT。

增强型ATT是BLE 4.2+引入的特性,支持"可靠写(Reliable Write)"、"读多属性(Read Multiple Variables)"等,提升ATT协议的可靠性和效率。

不启用时,协议栈仅支持BLE 4.0~4.1的基础ATT功能,简化协议栈复杂度(适用于无需高级特性的场景)。

CFG_BLE_MAX_COC_INITIATOR_NBR

含义:BLE 连接导向信道(Connection-Oriented Channels, COC) 作为"发起者(Initiator)"时,能同时建立的最大连接数量。

COC 是 L2CAP 层的可靠数据传输通道(类似传统蓝牙的 L2CAP 通道),用于大文件传输、可靠消息等场景。

数值 32 的意义:设备最多可作为 32 个 COC 连接的发起端(对应接收端是"响应者 Responder"),数值越大代表并发 COC 连接能力越强,但会消耗更多资源。

CFG_BLE_MIN_TX_POWER & CFG_BLE_MAX_TX_POWER

含义:BLE 发射功率(Transmission Power) 的最小值和最大值(单位:dBm,表示功率相对 1mW 的对数值)。

发射功率直接影响通信距离(功率越高,距离越远)和功耗(功率越高,功耗越大)。

数值 0 的意义:

实际中,0 通常表示使用芯片默认的最小/最大发射功率(不同芯片默认值不同,例如某芯片最小功率可能为 -40dBm,最大为 +10dBm)。

若需自定义,可通过该配置限制功率范围(例如弱信号环境降低功率减少干扰,或延长电池寿命)。

#define CFG_BLE_MIN_TX_POWER (-40)

#define CFG_BLE_MAX_TX_POWER (6)

CFG_BLE_MAX_ADD_EATT_BEARERS

含义:额外 EATT(Enhanced ATT)承载的数量。

EATT 是 BLE 5.0+ 引入的"增强属性协议承载",用于提升 ATT(Attribute Protocol) 的吞吐量(传统 ATT 是单工,EATT 支持全双工 + 多承载)。

数值 0 的意义:

0 表示不启用额外 EATT 承载(或使用默认配置,0 可能代表"无额外承载")。

若需高性能 ATT 传输(如高数据率场景),可配置为大于 0 的数值,提升连接设备的 ATT 吞吐量。

4

CFG_BLE_RX_MODEL_CONFIG

CFG_BLE_RX_MODEL_CONFIG 是用于配置 BLE 接收(Rx)模型的配置标志,核心是选择自动增益控制(AGC)与 RSSI(接收信号强度指示)模型的工作模式,具体通过以下内容解析:

  1. 配置选项的宏定义
    配置通过两个宏实现语义区分:
    SCHI_C2_BLE_INIT_RX_MODEL_AGC_RSSI_LEGACY:表示选择 传统(Legacy)的 AGC_RSSI 模型。
    SCHI_C2_BLE_INIT_RX_MODEL_AGC_RSSI_BLOCKER:表示选择 改进型 AGC_RSSI 模型,该模型对"RF blockers(射频阻塞干扰)"有更好的抵抗能力。
  2. 位(bit)配置逻辑
    这些配置标志最终会设置硬件/固件中的"配置位",关键逻辑聚焦在 bit 0:
    若 bit 0 = 1 → 触发"改进型 AGC_RSSI 模型"(抗射频阻塞);
    若 bit 0 = 0 → 触发"传统 AGC_RSSI 模型";

其他位(如 bit 1 及以上)为保留位,必须强制设置为 0,不能自定义其他值。

  1. 场景化理解

传统模型(LEGACY):可能是早期兼容性更好的方案,适用于"无射频阻塞干扰"的常规场景。

改进型模型(BLOCKER):针对"存在强射频干扰(如其他无线信号阻塞 BLE 信号)"的场景优化,通过 AGC 与 RSSI 的调整逻辑提升抗干扰能力。

总结:该配置项通过"bit 0 的开关状态",在传统信号处理模型与抗干扰增强模型间切换,其他位需保留为 0 以保证兼容性/稳定性。

CFG_BLE_MAX_ADV_SET_NBR

含义:最大广播集(Advertising Set)数量。

BLE 5.0+ 支持"扩展广告(Extended Advertising)",允许设备同时配置多个独立的广告集(每个广告集可自定义广告数据、广告间隔、广告类型)。

数值 3 的意义:设备最多可同时运行 3 个广告集,例如:

集 1 用于"可连接广告(ADV_IND)",用于建立连接;

集 2 用于"不可连接广告(ADV_NONCONN_IND)",广播公开数据;

集 3 用于"扫描响应(SCAN_RSP)",回复扫描请求。

CFG_BLE_MAX_ADV_DATA_LEN

含义:广播数据长度(单位:字节)。

CFG BLE最大ADV数据长度

CFG_BLE_MAX_ADV_DATA_LEN必须介于31和1650之间。

参数说明:

最大广告数据长度(字节)

范围:31。1650,有限制:

此参数链接到CFG_BLE_MAX_ADV_SET_NBR,例如两者都符合根据支持的最大扩展广告配置计算的分配的总内存。

当CFG_BLE_OPTIONS设置了SHCI_C2_BLE_INIT_OPTIONS_EXT_ADV标志时,CPU2会考虑此参数

CFG_BLE_TX_PATH_COMPENS & CFG_BLE_RX_PATH_COMPENS

含义:发射/接收路径补偿(Path Compensation)。

用于校准硬件路径(如 PCB 走线、滤波器)引入的信号衰减,提升功率精度和信号强度准确性。

数值 0 的意义:无补偿或使用默认值(即依赖芯片出厂校准)。

若需精细调校(例如严苛射频环境),可配置具体补偿值(单位通常为 0.1dB 或 dB,需参考芯片文档)。

0

CFG_BLE_CORE_VERSION

含义:BLE 核心规范版本。

通过宏定义 SHCI_C2_BLE_INIT_BLE_CORE_5_3 指定,代表支持蓝牙 5.3 版本。

版本意义:

BLE 5.0+ 支持 2Mbps、LE Coded(长距离)、扩展广告等特性;

5.1+ 支持 AoA/AoD 定位;5.2+ 支持 LE Power Control、同步通道(Isochronous Channels);5.3/5.4 进一步优化性能和稳定性。

CFG_TLBLE_EVT_QUEUE_LENGTH

含义:BLE 传输层(Transport Layer)事件队列长度。

事件队列用于缓存"BLE 事件"(如连接建立、数据接收、断开连接等),当应用程序未及时处理时,事件会排队等待。

数值 5 的意义:队列最多同时存储 5 个未处理事件,若队列满时产生新事件,可能触发"队列溢出"处理机制(例如丢弃事件、触发中断)。

/**

*BLE事件的队列长度

*此参数定义了在HCI层中可以存储的异步事件的数量

*向应用程序报告。当向BLE核心协处理器发送命令时,HCI层

*正在等待Num_HCI_Command_Packets设置为1的事件。接收队列应很大

*足以存储其间接收到的所有异步事件。

*当CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE设置为27时,这允许存储三个255字节长的异步事件

*HCI命令与其事件之间。

*此参数取决于给定给CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE的值。当队列大小太小时,

*如果队列中充满了异步事件,并且HCI层仍在等待,则系统可能会挂起

*对于CC/CS事件,在这种情况下,将调用通知TL_BLE_HCI_ToNot()来指示

*HCI命令在30秒内未收到其命令事件(默认HCI超时)。

*/

CFG_TLBLE_MOST_EVENT_PAYLOAD_SIZE

含义:BLE 传输层事件有效载荷的最大尺寸(单位:字节)。

即"单个事件中携带的数据最大长度"(例如接收到的应用数据、连接参数等)。

数值 255 的意义:单个事件的数据负载最多 255 字节,影响事件能传递的信息量(数值越大,单次事件可传输的数据越多,但需平衡内存和处理效率)。

CFG_BONDING_MODE(配对绑定模式)

含义:决定设备配对后是否建立长期绑定关系(Bonding,即配对后保存长期密钥,后续连接自动加密)。

允许设备在配对过程中存储长期安全信息(如LTK, Long Term Key),以便后续连接时直接使用,无需重新配对。

CFG粘接方式

CFG粘接方式

参数说明:

定义绑定模式

可能值:

-无绑定模式(0x00)

-键合模式(0x01)

CFG_USED_FIXED_PIN(是否启用固定PIN码)

含义:决定配对时是否使用固定PIN码(Legacy Pairing,蓝牙2.1及更早的配对方式,依赖6位PIN协商链接密钥)。

取值:Use a fixed pin (0x00)

表示启用固定PIN码,配对时使用后续参数CFG_FIXED_PIN定义的固定值(6位)。

CFG_FIXED_PIN(固定PIN码)

含义:当CFG_USED_FIXED_PIN启用时,此参数定义固定PIN的数值(需为6位,Legacy Pairing要求)。

取值:111111

配对时设备会使用6个1 作为固定PIN,用于协商链接密钥(Link Key)。

CFG_ENCRYPTION_KEY_SIZE_MAX(加密密钥最大长度)

含义:定义蓝牙配对后生成的加密密钥(Encryption Key)的最大长度(单位:字节)。蓝牙协议规定加密密钥长度为816字节(64128位),长度越长安全性越高。

取值:16

表示允许的最大加密密钥长度为16字节(128位),是蓝牙协议允许的上限。

CFG_ENCRYPTION_KEY_SIZE_MIN(加密密钥最小长度)

含义:定义蓝牙配对后生成的加密密钥(Encryption Key)的最小长度(单位:字节),避免过短密钥导致的安全风险。

取值:8

表示允许的最小加密密钥长度为8字节(64位),是蓝牙协议要求的下限。

CFG_SC_SUPPORT(Secure Connections 支持)

含义:定义是否支持Secure Connections(安全连接)配对(蓝牙4.2+引入的新配对机制,比Legacy Pairing更安全,支持椭圆曲线加密)。

取值:Secure Connections Pairing supported but optional (0x01)

表示设备支持Secure Connections配对,但不是强制启用(可与旧设备兼容Legacy Pairing,也可与新设备用Secure Connections)。

0x00 不支持安全连接配对(Secure Connections Paring not supported)

此时系统完全禁用该安全特性,无法使用相关功能。

0x01 支持安全连接配对,但为"可选项"(Secure Connections Paring supported but optional)

系统具备该功能,但实际配对时允许用户/设备选择是否启用安全连接模式。

0x02 支持安全连接配对,且为"强制项"(Secure Connections Paring supported and mandatory)

系统强制启用安全连接配对,配对过程必须走该安全流程,不允许绕过。

CFG_BLE_IR(BLE 初始化方解析列表 - IR)

含义:用于BLE隐私地址解析的身份解析密钥(IRK,Identity Resolving Key),对应初始化设备(Initiator) 的解析列表。

BLE隐私地址允许设备周期性更换随机地址,IRK是用于将"随机地址"解析回"真实设备身份"的密钥。

取值:12, 34, 56, 78, 9A, BC, DE, F0, 12, 34, 56, 78, 9A, BC, DE, F0

这是一组16字节(128位)的IRK(十六进制表示),用于解析"初始化方"收到的隐私地址。

CFG_BLE_ER(BLE 响应方解析列表 - ER)

含义:用于BLE隐私地址解析的身份解析密钥(IRK),对应响应设备(Responder) 的解析列表。

取值:FE, DC, BA, 09, 87, 65, 43, 21, FE, DC, BA, 09, 87, 65, 43, 21

这是一组16字节(128位)的IRK,用于解析"响应方"收到的隐私地址。

CFG_KEYPRESS_NOTIFICATION_SUPPORT(按键通知支持)

含义:决定配对过程中是否支持"按键通知"(例如,在"数字比较"配对方式中,显示用户输入数字时的按键反馈)。

取值:Keypress notification not supported (0x00)

表示不支持按键通知,配对时不会发送按键事件的提示。

BLE_DBG_APP_EN(应用层调试使能)

含义:控制 BLE应用层 调试功能的开关。应用层是开发者编写业务逻辑的层级(如自定义BLE服务、特征的交互、数据处理等)。

作用:

使能(Enabled):在应用层关键流程(如设备连接/断开、服务/特征操作、数据收发)中插入调试代码(如日志打印、串口输出),帮助开发者跟踪业务逻辑执行、定位应用层功能问题(如服务注册失败、数据解析错误)。

禁用(Disabled):关闭应用层所有调试代码,减少内存占用、代码体积,适合产品发布阶段(避免调试信息泄露或影响性能)。

BLE_DBG_P2P_STM_EN(点对点通信协议栈调试使能)

含义:控制 BLE点对点(P2P)通信场景下协议栈层级 调试功能的开关。"P2P"指BLE设备间的直接通信(如Central-Peripheral模型);"STM"指向协议栈(Stack)或数据流(Stream)底层逻辑。

作用:

使能(Enabled):输出点对点通信中协议栈层级的调试信息(如链路层Link Layer交互、属性协议ATT的请求/响应、连接参数更新、数据包收发等)。这类信息用于分析连接稳定性(如断连原因)、数据传输问题(如丢包、超时)等底层技术问题,适合协议栈开发或深度调试场景。

禁用(Disabled):关闭协议栈层级的调试代码,减少资源消耗(底层调试信息通常更频繁、数据量更大),发布版本中建议关闭。

相关推荐
殷忆枫2 小时前
基于STM32的ESP8266连接Onenet(HAL库)
stm32·单片机·嵌入式硬件
PegasusYu4 小时前
STM32校准读取激光测距传感器VL53L0X距离数据
stm32·测距·stm32cubeide·激光测距·vl53l0x·飞行时间·stm32g031f8
一枝小雨4 小时前
【OTA专题】15 实现App后台无感下载固件
stm32·单片机·嵌入式·ota·bootloader
TEC_INO5 小时前
STM32_10:SPI
stm32·单片机·嵌入式硬件
polarislove02145 小时前
10.3[ADC]采样时间和转换时间-嵌入式铁头山羊STM32笔记
笔记·stm32·嵌入式硬件
创思通信5 小时前
STM32L151RCT6 BC20 采集温湿度DHT11 采集GPS定位 和ADC发送到最新版本ONENET物联网开放平台
stm32·嵌入式硬件·物联网
__万波__5 小时前
STM32建立完全空白的工程
stm32·单片机·嵌入式硬件
兆龙电子单片机设计6 小时前
【STM32项目开源】STM32单片机充电桩安全监测系统
stm32·单片机·物联网·开源·毕业设计
@good_good_study6 小时前
STM32 C语言函数
stm32