问: 使用 STM32WL 系列 Sub-GHz 无线驱动程序的应用示例
STM32WL系列器件包括内置的低于1GHz无线外设 ( Sub-GHz 指的是低于 1GHz 的无线电频段 ),能够支持LoRa(仅限STM32WLE5/55器件)、(G)FSK、(G)MSK和BPSK调制方案。与此无线外设的通信是通过使用设备参考手册 第5.8节中概述的命令的内部SPI接口完成的。虽然该RF接口的抽象层是在低于1GHz Phy中间件中定义的(在STM32CubeWL MCU Package 中可得),但将该中间件添加到使用STM32CubeMX的项目中需要在其他几个外设和库之间进行高级配置。这会导致一个更大、更复杂的项目,消耗更多的设备内存,并导致抽象层低效率。对于要求功耗低的简单应用,将RF接口驱动程序与低于1GHzPhy中间件隔离并直接利用它可能是有益的。
低于1GHz Phy中间件由高层 (radio.c) 和低层 (radio_driver.c) 组成。高级驱动程序提供了许多有用的函数,这些函数抽象了低层无线功能,例如RadioInit() ,RadioSetTxConfig() 和RadioSend() 。然而,尽管这些函数很方便,但它们的代价是效率低下,比如冗余的函数调用和过度依赖诸如音序器和定时器服务器之类的实用程序。低层驱动程序简单地实现参考手册 中概述的 SUBGHZSPI 命令,并提供低于1GHz无线寄存器的定义。以牺牲一些质量属性(如可维护性和可移植性)为代价,使用该驱动程序进行编码直接允许程序员对其应用程序进行更大的控制。
详细演示如何将这个低层与低于 1GHz Phy 中间件隔离开来,并直接添加到 STM32CubeIDE 项目的操作过程。
要求: 要准确地跟随演示教程,需要以下项目。
STM32CubeIDE (版本1.8.0)
STM32CubeWL MCU Package (版本1.1.0)
NUCLEO-WL55JC1
NUCLEO-WL55JC1 - STM32WL Nucleo-64 开发板
应用程序示例
作为以独立方式使用低于1GHz Phy驱动程序的示例,我们创建了两个示例程序(可在GitHub Repository 上获得)。这些示例复制了STM32CubeWL MCU Package 中SubGHz_Phy_PingPong示例的高级功能。也就是说,它们都实现了图1所示的状态机。这两个示例之间的唯一区别是一个使用LoRa调制解调器,而另一个使用FSK调制解调器。
图 1: 低层无线驱动乒乓样例项目有限状态机
两个NUCLEO-WL55JC1 板需要运行这些示例,其中一个将充当主机,而另一个将充当从机。最初,两个板都处于主状态,以随机间隔发送“PING”消息并等待响应。最终,两个板同步,因此只有一个设备发送“PING”消息,另一个设备发送“PONG”消息作为响应。要执行该应用程序,请按照前一节提供的步骤创建一个项目,该项目包含低于1GHz 无线驱动程序。然后,只需将项目的main.c 文件的内容替换为GitHub Repository 中的一个文件的内容,具体取决于你希望在示例中使用哪种调制方案。最后,构建项目并使用它对两个Nucleo板进行编程。
注意,这些示例与SubGHz_Phy_PingPong示例兼容。也就是说,一块板可以用上述应用程序编程,另一块板可以用SubGHz_Phy_PingPong应用程序编程,它们将按预期一起工作。然而,为了利用GFSK调制,必须首先对SubGHz_Phy_PingPong示例进行稍微修改。打开subghz_phy_app.h 文件,修改第一个define指令如下:
#define USE_MODEM_LORA 0 //1
#define USE_MODEM_FSK 1 //0
#define REGION_US915 //REGION_EU868
然后,在radio.c 中找到RadioRandom() 函数,注释掉RadioSetModem(MODEM_LORA); 这一行不仅不需要获得随机数,还会擦除之前初始化步骤中设置的无线配置。因此,在这种情况下,它被认为是一个bug,不应该被包括在内。SubGHz_Phy_PingPong示例现在准备编译并烧写到NUCLEO-WL55JC1 板之一。另一个板应该根据上述说明使用GitHub Repository 中的main_gfsk.c 文件的内容进行编程。
在初始化和执行图1所示的有限状态机之前,通过调用清单1中定义的radioInit() 函数来初始化无线。该函数使用与SubGHz_Phy_PingPong示例相同的无线配置,但有一个例外。在参考手册 第6.1节的末尾,它说:
SMPS需要时钟才能正常工作。如果由于任何原因这个时钟停止,设备可能会被破坏。为了避免这种情况,使用时钟检测,当出现时钟故障时,关闭SMPS并启用LDO。SMPS时钟检测通过低于1GHz无线 SUBGHZ_SMPSC0R.CLKDE使能。缺省情况下,SMPS时钟检测功能处于关闭状态,开启SMPS前必须开启时钟检测功能。
尽管有这个警告,低于1GHz Phy中间件的高层和低层都没有启用SMPS时钟检测。因为DCDC_ENABLE 是在radio_config.h 中定义的,所以SUBGRF_SetRegulatorMode() 函数将启用SMPS降压转换器。因此,在此函数调用之前,手动启用SMPS时钟检测。
全部0条评论
快来发表一下你的评论吧 !