如何在STM32WB上与USB CDC同时运行Bluetooth®低能耗P2P服务器第1部分

1简介:

欢迎在本文中,我们将介绍如何在STM32WB55xx设备上同时运行蓝牙®低能耗应用程序和USB CDC功能。
当尝试同时运行这两个API时,我们需要注意有关蓝牙®低能量堆栈如何实现的一些细节,因为这可能会干扰USB时钟。
在启动阶段,Bluetooth®低能耗CPU2执行各种初始化,包括RNG和USB外围设备等共享资源的初始化。RNG是专门在CPU2启动时准备的,以便在需要时提供对随机数的即时访问。在这种配置中,CPU2激活HSI48振荡器作为RNG外围时钟,随后一旦启动无线堆栈就将其去激活。
硬件信号量(HSEM)用于控制对两个CPU之间共享资源的访问。如果HSEM0可用,CPU2上的代码尝试访问RNG。如果成功,它将尝试让HSEM5控制HSI48时钟。
CPU2的RNG外围设备访问和CPU1的USB外围设备访问需要获得HSEM0,这可能会产生潜在的竞争条件。
HSEM5用于控制RNG时钟源,但如果RNG和USB都使用相同的时钟源(如下图所示),它可能会干扰USB时钟源:


这意味着如果CLK48时钟多路输出被关闭,USB API将无法在这些条件下工作。
为了轻松解决这一问题,我们将确保CPU2不会得到HSEM5,因此时钟不会关闭。
现在,让我们深入研究项目设置和代码实现,以演示实现这一点的容易程度。该项目涉及将蓝牙®低能耗P2P应用程序与USB CDC相结合,以打开虚拟通信端口。

2所需的硬件和软件

需要以下硬件/软件:
硬件: 
-P-核-WB55
-两条micro-B型USB电缆
-带STBLESensor应用程序的手机
软件: 
-STM32管-STM32CubIDE-意法半导体 
项目设置也可以直接在STM32CubeMX上进行。

3开发

 
  • FUS更新

下列的视频系列,您可以更新STm32WB堆栈版本。这是确保Bluetooth®低能耗堆栈正确更新的重要步骤。
 
  • 从头开始创建项目

让我们为P-核-WB55在…上STM32管。
打开软件,单击文件->新建->STM32项目:

在“Board Selector”(线路板选择器)选项卡中,搜索P-核-WB55-NUCLEO作为商业零件号,在列表中选择,然后点击下一个

为项目指定一个名称,使标准设置相同,然后单击“完成”。

完成此操作后,STM32CubeMX屏幕将显示,因此我们可以设置必要的配置!

3.1项目设置


引脚输出和配置选项卡
首先,我们设置了用户按钮和板载用户LED。这使我们能够有一个可视化的界面来检查代码在每个部分中执行的内容!
左键单击引脚(PB0、PB1和PB5上有用户指示灯),然后选择GPIO_Output。
之后,右键单击,然后选择“输入用户标签”为其命名。

要设置用户按钮,我们将遵循类似的步骤。
左键单击PC4引脚,然后选择GPIO_EXTI4。和以前一样给它起个名字。

之后,转到系统核心>GPIO选项卡>选择PC4引脚并设置以下内容:

尽管如此,在GPIO选项卡中,转到NVIC并启用EXTI line4中断。

转到System Core(系统核心)类别,将“Trace Asynchronous Sw”(跟踪异步开关)设置为“Debug”(调试),将System wakeing 2(系统唤醒2),将“SysTick”(系统时钟)设为“Timebase Source”(时基源)。

现在,让我们将HSE和LSE设置为RCC类别。为两者选择晶体/陶瓷谐振器。

同时激活IPCC并设置IPCC Rx和Tx中断。

我们对HSEM外围设备也这样做。


激活连接类别中的RF,如下所示:

转到USART1选项卡,选择它作为“异步模式”,并让它使用标准参数。

按如下方式设置USART_TX的DMA请求。

并激活每个Tx和Rx引脚的内部上拉,并将最大输出速度设置为“非常高”。

此外,在“中间件和软件包”中,在STM32_WPAN选项卡中启用“Bluetooth®Low Energy”(蓝牙®低能耗),并确保Bluetooth®低能耗应用程序类型设置为“Server Profile”(服务器配置文件),并启用“Custom P2P Server”(自定义P2P服务器)。在LOCAL_NAME中,可以设置不同的名称。这是您的手机在查找可用的蓝牙连接时显示的名称。

在“实用程序”类别中,确保已启用“序列器”和“Tiny_LPM”。

现在,启用USB设备FS及其中断。

在USB_DEVICE选项卡中,选择USB类作为CDC。

引脚输出配置已完全设置。现在,让我们进入时钟设置!

 

时钟配置选项卡


在所有这些设置之后,我们可以看到时钟配置选项卡标记有一个内部带有“x”的红色小圆圈。进入此选项卡时,会显示一条消息,要求运行自动时钟问题解决程序。允许它。

如果它没有出现,您可以点击“解决时钟问题”按钮。

之后,请确保所选时钟及其值如下所示:

“项目经理”选项卡

在“项目管理器”选项卡>“项目”中,将“最小堆大小”和“最小堆栈大小”增加到0x600。

我们在中开始编码
第二部分! 
再见。