• STM32WB55开发(5)----调整射频功率


    概述

    随着无线通信技术的不断进步,能够精确地控制射频(RF)信号的功率变得越来越重要。调整射频功率不仅可以影响设备的通信距离和覆盖范围,还可以优化电池的使用寿命和减少可能的射频干扰。ACI_HAL_SET_TX_POWER_LEVEL指令提供了一种方法,使工程师和开发者能够在ST的蓝牙设备上动态地调整射频发射功率。本文将详细介绍如何使用这一指令,以及调整功率级别可能带来的影响和应用场景。
    最近在弄ST的课程,需要样片的可以加群申请:615061293 。

    硬件准备

    首先需要准备一个开发板,这里我准备的是WB55RG 的开发板:
    在这里插入图片描述

    视频教学

    https://www.bilibili.com/video/BV1XF411D7bC/

    STM32WB55开发(5)----调整射频功率

    样品申请

    https://www.wjx.top/vm/OhcKxJk.aspx#

    源码下载

    https://download.csdn.net/download/qq_24312945/88351255

    选择芯片型号

    在这里插入图片描述

    配置时钟源

    HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用外置的时钟源,故都选择Crystal/Ceramic Resonator选项,如下所示:
    在这里插入图片描述

    配置时钟树

    在这里插入图片描述

    RTC时钟配置

    在这里插入图片描述
    RFWKP时钟配置

    在这里插入图片描述

    查看开启STM32_WPAN条件

    可以看到,需要开启RF、RTC、RCC、IPCC、HSEM。
    在这里插入图片描述

    配置HSEM

    硬件信号量(HSEM)模块用于管理多个进程之间共享的访问权限和资源同步。
    开启HSEM如下。
    在这里插入图片描述

    配置IPCC

    通信控制器(IPCC)模块的主要用于cpu之间的信号消息交换。
    开启如下所示。

    在这里插入图片描述

    配置RTC

    在这里插入图片描述

    启动RF

    在这里插入图片描述

    开启蓝牙

    在这里插入图片描述

    开启串口调试

    CFG_HW_USART1_ENABLED允许开发者选择是否使用USART1作为跟踪输出的通道,并且这个配置只在特定的设置下可用。这样的配置通常用于嵌入式系统的调试,使得开发者可以实时查看设备的状态和输出信息。
    在这里插入图片描述

    CFG_HW_USART1_ENABLED这是一个配置标志,当设置为启用时,USART1会被用作输出跟踪的通道。当禁用时,USART1不会用于这个目的。
    仅当USART1由CubeMX用户界面配置时,此特定的硬件配置才可用:这意味着只有在使用ST的CubeMX工具配置USART1时,才可以使用CFG_HW_USART1_ENABLED这一特定的配置选项。

    查看原理图可以的是PA9和PA10与CH340链接在一起,且为串口打印端口。

    在这里插入图片描述
    串口配置如下。
    在这里插入图片描述

    开启CFG_HW_USART1_ENABLED。
    在这里插入图片描述

    关闭MX_USART1_UART_Init函数的生成。
    在这里插入图片描述

    CFG_HW_USART1_DMA_TX_SUPPORTED允许开发者启用USART1的DMA发送功能。启用此功能可以提高USART1发送数据时的效率,但在配置上可能需要更多的步骤和注意事项。
    当其被设置为启用时,USART1将使用DMA来进行数据发送(TX)。DMA允许数据从内存直接发送到外设(在这种情况下是USART1),而不需要CPU的干预,从而提高效率和数据传输速度。
    在这里插入图片描述

    开启DMA。
    在这里插入图片描述

    开启中断。

    在这里插入图片描述

    启用串口1的tx的DMA。

    在这里插入图片描述

    若无法开启可以重新打开BLE配置。

    在这里插入图片描述

    启动串口1调试跟踪。

    在这里插入图片描述

    启用应用程序中的跟踪 。

    在这里插入图片描述

    配置蓝牙参数

    配置为自定义模板。
    在这里插入图片描述

    命名设备名

    在这里插入图片描述

    配置BLE GATT

    在这里插入图片描述

    配置SVC
    在这里插入图片描述

    设置工程信息

    在这里插入图片描述

    工程文件设置

    在这里插入图片描述

    Keil工程配置

    在这里插入图片描述

    代码配置

    在main.c中添加如下头文件。

    /* USER CODE BEGIN Includes */
    #include "stm32_seq.h"
    /* USER CODE END Includes */
    
    • 1
    • 2
    • 3

    UTIL_SEQ_Run(UTIL_SEQ_DEFAULT)函数应该在应用程序的while循环中,启动任务调度。

      /* 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 */
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    射频功率

    dBm是一种衡量功率的单位,特别用于描述射频 (RF) 和微波信号的功率。dBm表示相对于1毫瓦的功率水平。所以,0 dBm表示1毫瓦的功率;负值表示小于1毫瓦的功率,而正值表示大于1毫瓦的功率。

    为什么我们使用dBm这样一个对数单位来表示功率,而不是直接使用线性单位如瓦或毫瓦呢?原因是无线通信中的信号强度可以在非常宽的范围内变化,使用对数单位可以更清晰、更简单地描述这些变化。

    以下是一个简化的解释:
    如果一个设备发出1毫瓦的功率,这被表示为0 dBm。
    如果功率是1毫瓦的10倍,即10毫瓦,那么它是10 dBm。
    如果功率是1毫瓦的1/10,即0.1毫瓦,那么它是-10 dBm。
    因此,在您提供的列表中,负的dBm值表示功率小于1毫瓦,而正的dBm值表示功率大于1毫瓦。这样的表示方法使得工程师能够轻松地对比和处理各种功率水平,尤其是在涉及射频设计和分析的情况下。

    ACI_HAL_SET_TX_POWER_LEVEL

    该指令用于设置设备的 TX 功率级别。通过控制确定 IC 引脚的输出功率水平(dBm)的 PA_LEVEL。当系统启动
    或重启时,会使用默认的发送功率水平,其最大值为 6 dBm。一旦发出该指令,会立即更改输出功率,无论是否正
    在进行蓝牙通信。例如,为了进行调试,可将设备设置为一直广播,并使用该指令监听信号强度变化。系统会保留
    从指令接收的最新发送功率水平,即第二个指令覆盖之前的发送功率水平。在收到另一条设置发送功率的指令或系
    统重启前,将维持新的发送功率水平。
    在这里插入图片描述

    在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 */
    
    • 1
    • 2
    • 3
    • 4
    • 5

    定义变量。

      /* USER CODE BEGIN 2 */
    	tBleStatus ret = BLE_STATUS_INVALID_PARAMS;
    	uint32_t a=0;
      /* USER CODE END 2 */
    
    • 1
    • 2
    • 3
    • 4

    while循环中执行如下操作,在等待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 重新设置, result: 0x%x \n", ret);
    					}
    					else
    					{
    						printf("Success: aci_hal_set_tx_power_level 重新设置\n");
    					}			
    			}
    			HAL_Delay(1);		
    		}	
      }
      /* USER CODE END 3 */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    结果演示

    在低功率下蓝牙信号如下所示。
    在这里插入图片描述

    修改位高功率下如下所示。

    在这里插入图片描述

  • 相关阅读:
    量子笔记:多量子系统、叠加、量子计算并行处理能力
    从零开始学Spring Boot系列-SpringApplication
    Linux学习 - vi/vim编辑器
    大端、小端模式
    基于批发价格指数的美国通货膨胀研究,数据从1960年第一季度至1990年第4季度的WPI(批发价格指数)共有124个数据,使用R中的ARIMA模型对该时间序列进行建模分析。
    xxl-job项目集成实战,全自动项目集成,可以直接使用到项目中
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    《IIS系列》IIS日志文件管理
    电容笔可以用什么代替?好用不贵电容笔测评
    Flask 快速上手教程 — 了解与基本使用
  • 原文地址:https://blog.csdn.net/qq_24312945/article/details/132953965