問:使用 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時鐘檢測。
-
mcu
+關注
關注
146文章
17317瀏覽量
352631 -
寄存器
+關注
關注
31文章
5363瀏覽量
121157 -
無線
+關注
關注
31文章
5470瀏覽量
173822 -
驅動程序
+關注
關注
19文章
848瀏覽量
48214
原文標題:實操!玩轉STM32WL系列Sub-GHz無線驅動程序
文章出處:【微信號:得捷電子DigiKey,微信公眾號:得捷電子DigiKey】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論