概述
隨著無(wú)線通信技術(shù)的不斷進(jìn)步,能夠精確地控制射頻(RF)信號(hào)的功率變得越來(lái)越重要。調(diào)整射頻功率不僅可以影響設(shè)備的通信距離和覆蓋范圍,還可以優(yōu)化電池的使用壽命和減少可能的射頻干擾。ACI_HAL_SET_TX_POWER_LEVEL指令提供了一種方法,使工程師和開(kāi)發(fā)者能夠在ST的藍(lán)牙設(shè)備上動(dòng)態(tài)地調(diào)整射頻發(fā)射功率。本文將詳細(xì)介紹如何使用這一指令,以及調(diào)整功率級(jí)別可能帶來(lái)的影響和應(yīng)用場(chǎng)景。
最近在弄ST的課程,需要樣片的可以加群申請(qǐng):615061293 。
硬件準(zhǔn)備
首先需要準(zhǔn)備一個(gè)開(kāi)發(fā)板,這里我準(zhǔn)備的是WB55RG 的開(kāi)發(fā)板:
視頻教學(xué)
[https://www.bilibili.com/video/BV1XF411D7bC/]
樣品申請(qǐng)
[https://www.wjx.top/vm/OhcKxJk.aspx#]
源碼下載
[https://download.csdn.net/download/qq_24312945/88351255](
選擇芯片型號(hào)
配置時(shí)鐘源
HSE與LSE分別為外部高速時(shí)鐘和低速時(shí)鐘,在本文中使用外置的時(shí)鐘源,故都選擇Crystal/Ceramic Resonator選項(xiàng),如下所示:
配置時(shí)鐘樹(shù)
RTC時(shí)鐘配置
RFWKP時(shí)鐘配置
查看開(kāi)啟STM32_WPAN條件
可以看到,需要開(kāi)啟RF、RTC、RCC、IPCC、HSEM。
配置HSEM
硬件信號(hào)量(HSEM)模塊用于管理多個(gè)進(jìn)程之間共享的訪問(wèn)權(quán)限和資源同步。
開(kāi)啟HSEM如下。
配置IPCC
通信控制器(IPCC)模塊的主要用于cpu之間的信號(hào)消息交換。
開(kāi)啟如下所示。
配置RTC
啟動(dòng)RF
開(kāi)啟藍(lán)牙
開(kāi)啟串口調(diào)試
CFG_HW_USART1_ENABLED允許開(kāi)發(fā)者選擇是否使用USART1作為跟蹤輸出的通道,并且這個(gè)配置只在特定的設(shè)置下可用。這樣的配置通常用于嵌入式系統(tǒng)的調(diào)試,使得開(kāi)發(fā)者可以實(shí)時(shí)查看設(shè)備的狀態(tài)和輸出信息。
CFG_HW_USART1_ENABLED這是一個(gè)配置標(biāo)志,當(dāng)設(shè)置為啟用時(shí),USART1會(huì)被用作輸出跟蹤的通道。當(dāng)禁用時(shí),USART1不會(huì)用于這個(gè)目的。
僅當(dāng)USART1由CubeMX用戶界面配置時(shí),此特定的硬件配置才可用:這意味著只有在使用ST的CubeMX工具配置USART1時(shí),才可以使用CFG_HW_USART1_ENABLED這一特定的配置選項(xiàng)。
查看原理圖可以的是PA9和PA10與CH340鏈接在一起,且為串口打印端口。
串口配置如下。
開(kāi)啟CFG_HW_USART1_ENABLED。
關(guān)閉MX_USART1_UART_Init函數(shù)的生成。
CFG_HW_USART1_DMA_TX_SUPPORTED允許開(kāi)發(fā)者啟用USART1的DMA發(fā)送功能。啟用此功能可以提高USART1發(fā)送數(shù)據(jù)時(shí)的效率,但在配置上可能需要更多的步驟和注意事項(xiàng)。
當(dāng)其被設(shè)置為啟用時(shí),USART1將使用DMA來(lái)進(jìn)行數(shù)據(jù)發(fā)送(TX)。DMA允許數(shù)據(jù)從內(nèi)存直接發(fā)送到外設(shè)(在這種情況下是USART1),而不需要CPU的干預(yù),從而提高效率和數(shù)據(jù)傳輸速度。
開(kāi)啟DMA。
開(kāi)啟中斷。
啟用串口1的tx的DMA。
若無(wú)法開(kāi)啟可以重新打開(kāi)BLE配置。
啟動(dòng)串口1調(diào)試跟蹤。
啟用應(yīng)用程序中的跟蹤 。
配置藍(lán)牙參數(shù)
配置為自定義模板。
命名設(shè)備名
配置BLE GATT
配置SVC
設(shè)置工程信息
工程文件設(shè)置
Keil工程配置
代碼配置
在main.c中添加如下頭文件。
/* USER CODE BEGIN Includes */
#include "stm32_seq.h"
/* USER CODE END Includes */
UTIL_SEQ_Run(UTIL_SEQ_DEFAULT)函數(shù)應(yīng)該在應(yīng)用程序的while循環(huán)中,啟動(dòng)任務(wù)調(diào)度。
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
MX_APPE_Process();
/* USER CODE BEGIN 3 */
UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);
}
/* USER CODE END 3 */
}
在app_entry.c中添加初始化 APPD_Init()。
void MX_APPE_Init( void )
{
System_Init( ); /**< System initialization */
SystemPower_Config(); /**< Configure the system Power Mode */
HW_TS_Init(hw_ts_InitMode_Full, &hrtc); /**< Initialize the TimerServer */
/* USER CODE BEGIN APPE_Init_1 */
APPD_Init();
/* USER CODE END APPE_Init_1 */
appe_Tl_Init(); /* Initialize all transport layers */
/**
* From now, the application is waiting for the ready event ( VS_HCI_C2_Ready )
* received on the system channel before starting the Stack
* This system event is received with APPE_SysUserEvtRx()
*/
/* USER CODE BEGIN APPE_Init_2 */
/* USER CODE END APPE_Init_2 */
return;
}
射頻功率
dBm是一種衡量功率的單位,特別用于描述射頻 (RF) 和微波信號(hào)的功率。dBm表示相對(duì)于1毫瓦的功率水平。所以,0 dBm表示1毫瓦的功率;負(fù)值表示小于1毫瓦的功率,而正值表示大于1毫瓦的功率。
為什么我們使用dBm這樣一個(gè)對(duì)數(shù)單位來(lái)表示功率,而不是直接使用線性單位如瓦或毫瓦呢?原因是無(wú)線通信中的信號(hào)強(qiáng)度可以在非常寬的范圍內(nèi)變化,使用對(duì)數(shù)單位可以更清晰、更簡(jiǎn)單地描述這些變化。
以下是一個(gè)簡(jiǎn)化的解釋?zhuān)?br /> 如果一個(gè)設(shè)備發(fā)出1毫瓦的功率,這被表示為0 dBm。
如果功率是1毫瓦的10倍,即10毫瓦,那么它是10 dBm。
如果功率是1毫瓦的1/10,即0.1毫瓦,那么它是-10 dBm。
因此,在您提供的列表中,負(fù)的dBm值表示功率小于1毫瓦,而正的dBm值表示功率大于1毫瓦。這樣的表示方法使得工程師能夠輕松地對(duì)比和處理各種功率水平,尤其是在涉及射頻設(shè)計(jì)和分析的情況下。
ACI_HAL_SET_TX_POWER_LEVEL
該指令用于設(shè)置設(shè)備的 TX 功率級(jí)別。通過(guò)控制確定 IC 引腳的輸出功率水平(dBm)的 PA_LEVEL。當(dāng)系統(tǒng)啟動(dòng)
或重啟時(shí),會(huì)使用默認(rèn)的發(fā)送功率水平,其最大值為 6 dBm。一旦發(fā)出該指令,會(huì)立即更改輸出功率,無(wú)論是否正
在進(jìn)行藍(lán)牙通信。例如,為了進(jìn)行調(diào)試,可將設(shè)備設(shè)置為一直廣播,并使用該指令監(jiān)聽(tīng)信號(hào)強(qiáng)度變化。系統(tǒng)會(huì)保留
從指令接收的最新發(fā)送功率水平,即第二個(gè)指令覆蓋之前的發(fā)送功率水平。在收到另一條設(shè)置發(fā)送功率的指令或系
統(tǒng)重啟前,將維持新的發(fā)送功率水平。
在STM32CUBEMX中可以先修改功率。
我們查看app_ble.c文件中也有該初始化操作。
串口打印也有該指令的配置。
在app_conf.h中有CFG_TX_POWER功率定義。
在main.c文件中,添加頭文件。
/* USER CODE BEGIN Includes */
#include "stm32_seq.h"
#include "ble_hal_aci.h"
/* USER CODE END Includes */
定義變量。
/* USER CODE BEGIN 2 */
tBleStatus ret = BLE_STATUS_INVALID_PARAMS;
uint32_t a=0;
/* USER CODE END 2 */
while循環(huán)中執(zhí)行如下操作,在等待5s后修改天線功率。
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
MX_APPE_Process();
/* USER CODE BEGIN 3 */
UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);
if(a< 5000)
{
a++;
if(a==5000)
{
/**
* Set TX Power.
*/
ret = aci_hal_set_tx_power_level(1, 0x1F);
if (ret != BLE_STATUS_SUCCESS)
{
printf("Fail : aci_hal_set_tx_power_level 重新設(shè)置, result: 0x%x n", ret);
}
else
{
printf("Success: aci_hal_set_tx_power_level 重新設(shè)置n");
}
}
HAL_Delay(1);
}
}
/* USER CODE END 3 */
結(jié)果演示
在低功率下藍(lán)牙信號(hào)如下所示。
修改位高功率下如下所示。
-
藍(lán)牙
+關(guān)注
關(guān)注
114文章
5726瀏覽量
169179 -
射頻功率
+關(guān)注
關(guān)注
0文章
38瀏覽量
12909 -
BLE
+關(guān)注
關(guān)注
12文章
645瀏覽量
59260 -
STM32WB55
+關(guān)注
關(guān)注
0文章
25瀏覽量
1285
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論