STM32单片机项目实例:基于TouchGFX的智能手表设计(4)LPBAM的应用

news2024/12/27 13:56:26

STM32单片机项目实例:基于TouchGFX的智能手表设计(4)LPBAM的应用

目录

一、概述

二、LPBAM简介

2.1 支持 LPBAM 的外设

 三、LPBAM硬件机制

3.1 电源和时钟架构

3.2 速度限制

3.3 LPGPIO_IOToggle实验


一、概述

  STM32U5 系列微控制器基于具有 Arm® TrustZone®和 FPU 的高性能 Arm®32 位 Cortex®-M33 CPU。此类产品均采用新型结构制造,得益于其高度灵活性和高级外设集,实现了一流的超低功耗性能。

  除了多种 CPU 激活模式配置(可实现更高性能或更低功耗)之外, STM32U5 系列还支持大量低功耗模式,每种模式都具有多个选项。这使得设计人员可以在低功耗性能、短启动时间、可用外设集与 SRAM 数量,以及唤醒源最大数量之间实现最佳折中。

  嵌入式 SMPS(开关模式电源)降压转换器可用于带有“Q”后缀的特定部件号(例如 STM32U5xxxxxxQ),从而提高激活和低功耗模式下的能源性能。

 图 1-1  传统芯片与带SMPS芯片供电差异

  SMPS 和 LDO 是并行的,并且应用时可在运行中动态选择,LDO提供更少噪声,SMPS提供更高的转换效率。

图 1-2  内部调压器的工作范围

所有电源模式都支持SMPS和LDO:

  • 从stop和standby模式退出后,总能恢复到Range 4 (SMPS或者LDO)。
  • 从shutdown模式和上电启动后默认使用LDO。

图 1-3  内部调压器的功耗 

  动态电压缩放是一种电源管理技术,它包括根据应用性能和功耗需求增加或降低用于数字外设(VCORE)的电压。

  动态电压缩放以增加VCORE被称为过电压。它允许设备提高其性能。

  动态电压缩放以降低VCORE被称为欠压。这样做是为了节省电力,特别是在笔记本电脑和其他移动设备中,这些设备的能量来自电池,因此是有限的。

该调节器在以下范围内工作:

  • Range 1:高性能

它提供1.2 V的典型输出电压。当系统时钟频率高达160MHz时使用。

  • Range 2:中高性能

它提供1.1 V的典型输出电压。当系统时钟频率高达110MHz时使用。

  • Range 3:中低功率范围

典型输出电压为1.0 V。系统时钟频率最高可达55MHz。

  • Range 4:低功率范围

提供0.9 V的典型输出电压。系统时钟频率最高可达25MHz。

  在PWR_VOSR中,通过VOS[1:0]选择电压缩放。在将系统时钟频率增加到范围1和范围2的55mhz以上之前,必须使能并准备好EPOD(嵌入式电源分配)升压器。

STM32U5 器件支持 4 种主要低功耗模式:

  • 睡眠模式

CPU 时钟关闭,但所有外设均可保持激活状态。所有外设中断或事件可唤醒 CPU。

  • 停机模式

高速时钟默认关闭,所有外设和内存保留均可保持激活状态。四种停机模式可供使用:停机 0、停机 1、停机 2 和停机 3,功耗从高到低。 LPBAM(低功耗后台自主模式)是一项创新功能,停机 0、停机 1 和停机 2 模式均支持该功能。借助于LPBAM,一些外设继续与 DMA(直接内存访问)一起自主工作。当外设须保持激活状态时,这大幅降低了应用的功耗。通过 LPBAM,可保持激活的外设数量在停机 2 中要比在停机 0 和停机 1 更少。停机 3 模式不支持 LPBAM。

  • 待机模式

内部调压器关闭。大多数外设和 SRAM 保留随后丢失。在待机模式下最多可保留 64 KB SRAM2 和 2 KB BKPSRAM。

  • 关断模式

这与待机模式类似,但电源欠压复位和监控被禁用。在该模式下则无法切换到 VBAT。

通过 LPBAM 和高能效处理,高度灵活的低功耗模式与自主外设相结合,使 STM32U575xxxxQ/STM32U585xxxxQ 器件达到行业领先的 EEMBC ULPBench 分数,高达 535ULPMark。

 1-4  STM32U5 Benchmarks 表现

 说明:文章来源于ST公司的《AN5645-应用笔记-STM32U5 系列使用 LPBAM 进行功耗优化》

二、LPBAM简介

  LPBAM(低功耗后台自主模式,low-power batch autonomous mode)是一种操作模式,允许外设从设备功耗模式到停机 2 模式独立地正常和自主运行,无需运行任何软件。由于 DMA 链表传输, LPBAM 子系统可以链接不同的操作。 DMA 操作可涉及:

  • 外设数据传输
  • 外设配置

使用 LPBAM 自动优化功耗:

  • 外设的总线时钟和内核时钟仅在自主外设请求时予以分配。总线时钟(又称系统时钟)通过 AHB 和 APB 分配给所有启用的外设,其中至少包括一个 DMA 和一个 SRAM。
  • 内部 RC 振荡器根据外设时钟请求自动开启和关闭。外部振荡器和 PLL 无法用于 LPBAM。
  • 模拟外设在需要时自动开启和关闭。
  • 设备可处于低至停机 2 的低功耗模式,无需唤醒来管理外设操作,因此减少了设备唤醒和运行操作期间的能量损失。

  即使在停机模式下,大量的硬件触发选择也允许外设自动启动的活动。外设中断在启用时从停机模式唤醒设备。

  LPBAM 的典型基本用例是设备处于停机 2 模式下的周期性外设操作(例如 ADC 转换,或通过 I2C 或 SPI 等通信接口仅限传感器采集)。唤醒源可以是任何外设中断,例如:

  • 外设的传输/转换结束
  • DMA 传输完成
  • 错误检测

图 2-1  LPBAM典型应用 

  可以使用多个 DMA 通道或在同一通道上链接来自不同外设的操作来构建更复杂的应用。

2.1 支持 LPBAM 的外设

支持 LPBAM 的外设分为两类:

  • 具有时钟请求功能的自主外设

这些外设支持停机模式下的 DMA 传输。

  • LPBAM 被动外设

  这些外设不支持 DMA 请求,也不支持生成时钟请求。但借助于 DMA 时钟请求,可以在因 DMA 时钟请求而接收到系统时钟时,对外设本身的寄存机进行重新配置。除此之外,有些也可以为自主外设提供硬件触发。

  自主或被动 LPBAM 外设产生的任何中断都会将 STM32U5 器件从停机模式唤醒。需要注意的是停机 3 模式不支持 LPBAM模式。

 图 2-2  支持LPBAM的外设

 三、LPBAM硬件机制

3.1 电源和时钟架构

  STM32U5 分为两个域: CPU 域(CD)和 SmartRun 域(SRD)。下图和下表显示了 AHB 和 APB 外设在这两个域中的分布。

 图 3-1  电源和时钟域的架构 

 图 3-2  AHB/APB 总线的域分布

(1). 只有一部分外设支持 LPBAM(参见图 3-3)。

  在停机 0 和停机 1 模式下, CPU 域和 SmartRun 域完全供电,而且均可支持 LPBAM 的动态活动。然后可以使用GPDMA1 和 LPDMA1 两者。 GPDMA1 可以访问所有设备 SRAM,而 LPDMA1 只能访问 SRAM4。

  在停机 2 模式下, CPU 域处于低泄漏模式,禁止任何动态活动。借助 LPBAM,只有 SmartRun 域完全供电并且可以维持动态活动。只能使用 LPDMA1,其只能访问 SRAM4。 LPDMA1 链表项和外设数据缓冲区均须位于 SRAM4中。本文重点介绍停机 2 模式下的 LPBAM,因为这是最有效的节能源模式。

警告:在停机 0 和停机 1 模式下,映射到 AHB3 和 APB3(属于 SmartRun 域)的自主外设只能与 LPDMA1 和 SRAM4一起使用。主要原因在于当 SRD 外设请求总线时钟时, AHB 和 APB 时钟仅分布在 SmartRun 域中,而不是CPU 域中。

停机 0、停机 1 或停机 2 模式下 LPBAM 活动期间 SRD 中的时钟分布

自主外设可请求其时钟(内核时钟或总线时钟),使其能正常工作,在工作完毕后会自动恢复到默

认的关闭时钟状态(STOP 状态)来降低功耗(LSE 和 LSI 低功耗低速振荡器除外)。

  在停机 2 模式中,只有 SmartRun 域中的外设可正常工作,时钟在该域中运行。下图放大了 SRD 架构,显示了在停机 2 模式下正常工作的所有外设。

 图 3-4  SRD 架构

SmartRun 域可以具有两种状态:

  • SRD 处于DStop 状态:不存在 AHB3/APB3 时钟。
  • SRD 处于 DRun 状态: AHB3/APB3 时钟存在,并在停机模式下分配给所有在 RCC 中启用的 SRD 外设。

图 3-5  RD 状态转换 

提示:通过设置 PWR-CR2 中的 SRDRUN 位,可强制使 SRD 始终处于 DRun 状态。 

3.2 速度限制

  LPBAM 工作在停机模式下,在该模式下内部振荡器默认禁用(LSI 和 LSE 等低速时钟除外), SRAM4 处于低功耗状态。外设的速度须考虑到停机 1 和停机 2 模式下的最大时钟速度为 24 MHz(类似于调压器处于 Range 4 中时的停机 0),以及时钟必须在停机模式需要时被唤醒,而这会引入延迟。 

  警告: 与运行或睡眠模式 Range 4 中的操作相比,外设的速度受到更多限制,因为当外设请求时钟时,时钟可能是处于被禁用状态。

3.3 LPGPIO_IOToggle实验

  在FS-STM32U5开发板通过LPBAM实现低功耗模式下,每隔1S秒切换一个带LPDMA链表功能的LPGPIO引脚。

图 3-6  IOToggle实验

  在主程序开始时调用HAL_Init()函数进行重置所有外设,初始化Flash接口和系统滴答定时器。然后使用SystemClock_Config()函数对系统进行配置,系统时钟(SYSCLK)运行在160 MHz。

1. AHB外设的HCLK运行频率为160兆赫。

2. APB时钟分频器APB1、APB2、APB3外设运行频率为160 MHz。

FS-STM32U575-LPGPIO_IOToggle应用程序包含:

1. 一个LPBAM子应用名为**WriteIO**。

WriteIO应用程序包含:

1. 一个名为“**WriteSeq**”的LPBAM场景。

LPBAM WriteIO应用配置系统达到最低功耗。

LPBAM WriteSeq场景配置所使用的外设,并构建场景链表。

WriteSeq场景执行:

1. 创建写LPGPIO引脚11(PB3)值队列(LPGPIO_BSRR)。

2. 每次写操作由LPTIM1 PWM上升沿信号触发。

此场景无限循环重复。

LPTIM1 PWM触发信号周期为1s。

配置、构建、连接和启动LPBAM场景后,MCU进入Stop2模式。

用户按钮引脚(PA.12)配置为具有上升沿输入的外部中断(EXTI_Line12),当按键被按下后释放,系统从Stop2模式唤醒。

从Stop2模式唤醒后,LPBAM子系统仍在工作,蓝色led灯常亮。

当再按一次用户按钮时,LPBAM场景将被停止、解除链接和去初始化,蓝色led闪烁。新建工程,选择STM32U575RIT6。

Project Manager页面,设置工程名:FS-STM32U575-LPGPIO_IOToggle,选择工程路径,工具链选择MDK-ARM,Code Generator页面,Copy only the… 

 Clock Configuration页面,设置MSIS时钟4000KHz,设置PLLM/1,X80,/2,系统运行频率160MHz。

 Pinout & Configuration 页面,设置PA12的GPIO mode为外部上升沿触发检测,配置PC13设置为PP输出。 

 NVIC页面使能EXTI Line 12 interrupt。

 ICACHE的模式设置为1-way(direct mapped cache)

   LPDMA1设置为Linked-List Mode,Transfer Event Generation设置为The TC(and the HT)event is generated at the (respectively half) end of the last linked-list item。并在NVIC Settings页面设置LPDMA1全局中断使能。

User Constants页面增加以下几个参数:

LPTIM1_PWM_PERIOD

31999U

LPTIM1_PWM_PULSE

15999

LPGPIO_BUFFER_SIZE

2U

LPTIM1_PWM_REPETITION

0U

 点击Pinout下拉框中的Set unused GPIOs,快捷按键Ctrl+G,将滑条拉至最大,GPIO Type选择Analog,点击OK按钮进行设置。

 点击LPBAM Scenario & Configuration进行LPBAM场景的配置

点击Add Application,修改LpbamAp1名称为WriteIO,修改Scenario名称为WriteSeq,修改Queue1名称为ToggleIO。 

点击WriteIO,设置队列模式为循环,并使能DMA的错误中断。

点击LPGPIO1选项,点击Write Pin Sequence右侧的+号,修改函数名称为WritePinSequence_1,选择端口PB3,端口状态数量设置2,端口状态Buffer设置LPGPIOBufferState,端口Buffer偏移设置为0。触发配置设置为trigged on the Rising Edge of the Hardware Signal,硬件触发信号选择LPTIM1_CH1。

 Pinout & Configuration 页面,RCC设置外部低速时钟源为Crystal/Ceramic Resonator。

LPTIM1外设,设置模式为Counts internal clock events,并按照下图进行配置:

 PWR对SRAM进行设置,除SRAM4与ICACHE以外全部Enable,SRAM fast wakeup下的选项Disable。

回到RCC界面,设置LSE的驱动能力为中高级。

 Clock Configuration页面,设置LPTIM1时钟选择器为LSE。

Pinout & Configuration 页面,设置PB3为LPGPIO 为OD输出。

 点击右上角的CHECK LPBAM DESIGN ,检查通过后,点击GENERATE CODE生成工程。

 上述步骤中如果是第一次进入LPBAM常见,GENERATE CODE是灰色的,可以退出LPBAM场景后进行生成代码。退出过程会有警告,点击OK。

 在通用场景进行CHECK LPBAM DESIGN并点击GENERATE CODE,工程生成完成后打开。

 打开工程,在main.c文件Private includes位置增加lpbam_writeio.h头文件。

/* USER CODE BEGIN Includes */
#include "lpbam_writeio.h"
/* USER CODE END Includes */

 在Private variables位置增加LPGPIO的端口状态数组。

/* USER CODE BEGIN PV */
/* Push Button State */

__IO uint32_t PushButtonState = PB_NOT_PRESSED;

/* Buffer declaration */
uint32_t LPGPIOBufferState[LPGPIO_BUFFER_SIZE] =
{
  __LPBAM_GPIO_STATE(LPBAM_GPIO_PIN_11, LPBAM_GPIO_PIN_SET),
  __LPBAM_GPIO_STATE(LPBAM_GPIO_PIN_11, LPBAM_GPIO_PIN_RESET)
};
/* USER CODE END PV */

 在Private function prototypes位置增加函数声明。

/* USER CODE BEGIN PFP */
static void Enter_Stop2_Mode(void);
/* USER CODE END PFP */

 在main函数中增加初始化配置。

/* LPBAM WriteIO application init */
  MX_WriteIO_Init();

  /* LPBAM WriteIO application WriteSeq scenario init */
  MX_WriteIO_WriteSeq_Init();

  /* LPBAM WriteIO application WriteSeq scenario build */
 MX_WriteIO_WriteSeq_Build();

  /* LPBAM WriteIO application WriteSeq scenario link */
  MX_WriteIO_WriteSeq_Link(&handle_LPDMA1_Channel0);

  /* LPBAM WriteIO application WriteSeq scenario start */
  MX_WriteIO_WriteSeq_Start(&handle_LPDMA1_Channel0);

  /* Enter Stop2 mode */
  Enter_Stop2_Mode();
	
  /* Reset push button state */
  PushButtonState = PB_NOT_PRESSED;

  /* Wait for next push button press to stop the LPBAM WriteIO application WriteSeq scenario */
	//停止模式下,核心板LED灯不亮,等待外部中断唤醒,LED长亮,再次按下按键,LED灯闪烁
  while (PushButtonState == PB_NOT_PRESSED)	
	{
		HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
	}
	
  /* LPBAM WriteIO application WriteSeq scenario stop */
  MX_WriteIO_WriteSeq_Stop(&handle_LPDMA1_Channel0);

  /* LPBAM WriteIO application WriteSeq scenario unlink */
  MX_WriteIO_WriteSeq_UnLink(&handle_LPDMA1_Channel0);

  /* LPBAM WriteIO application WriteSeq scenario de-init */
  MX_WriteIO_WriteSeq_DeInit();
	
  /* Initialize gpio */
  MX_GPIO_Init();

在while函数中增加端口控制代码。

 /* USER CODE BEGIN WHILE */
  while (1)
  {

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);	/* 运行指示灯状态翻转 */
		HAL_Delay(500);	
  }
  /* USER CODE END 3 */

 增加Enter_Stop2_Mode模式代码。

/* USER CODE BEGIN 4 */
/**
  * @brief Enter Stop2 mode and checks whether the system was in Stop2 or not.
  * @param None
  * @retval None
  */
static void Enter_Stop2_Mode(void)
{
  /* Enter the system to STOP2 mode */
  __HAL_RCC_PWR_CLK_ENABLE();
	/* 停止系统滴答计时器 */
	HAL_SuspendTick();
	/* 进入STOP2模式 */
  HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
	/* 恢复系统滴答计时器 */
	HAL_ResumeTick();//
	
  /* Check that the system was resumed from stop 2 */
  if (__HAL_PWR_GET_FLAG(PWR_FLAG_STOPF) == 0U)
  {
    Error_Handler();
  }

  /* Clear stop flag */
  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_STOPF);

  /* Check that stop flag is cleared */
  if (__HAL_PWR_GET_FLAG(PWR_FLAG_STOPF) != 0U)
  {
    Error_Handler();
  }
}
//退出STOP2模式
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == GPIO_PIN_12)	//检测PA12按键
	{
			PushButtonState = PB_PRESSED;
	}
  /* Prevent unused argument(s) compilation warning */
  UNUSED(GPIO_Pin);
}
/* USER CODE END 4 */

 在main.h中增加端口状态的枚举。

/* USER CODE BEGIN ET */
typedef enum
{
  PB_NOT_PRESSED =   0,
  PB_PRESSED     =   1,
} PB_State_t;
/* USER CODE END ET */
在lpbam_writeio_writeseq_build.c文件中增加外部变量的声明。
/* USER CODE BEGIN EV */
/* Buffer declaration */
extern uint32_t LPGPIOBufferState[LPGPIO_BUFFER_SIZE];
/* USER CODE END EV */

 在lpbam_writeio_writeseq_build.c文件中增加外部变量的声明。

/* USER CODE BEGIN EV */
/* Buffer declaration */
extern uint32_t LPGPIOBufferState[LPGPIO_BUFFER_SIZE];
/* USER CODE END EV */

 在lpbam_writeio_writeseq_config.c文件中增加PWM的启动与停驶设置。

/**
  * @brief WriteIO application WriteSeq scenario start
  * @retval None
  */
void MX_WriteIO_WriteSeq_Start(DMA_HandleTypeDef *hdma)
{
  /* LPBAM start DMA channel in linked-list mode */
  if (HAL_DMAEx_List_Start(&hdma[TOGGLEIO_Q_IDX]) != HAL_OK)
  {
    Error_Handler();
  }

  /* USER CODE BEGIN WriteIO_WriteSeq_Start */
	
  /* Start PWM generation */
  if (HAL_LPTIM_PWM_Start(&hlptim1, LPTIM_CHANNEL_1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE END WriteIO_WriteSeq_Start */
}

/**
  * @brief WriteIO application WriteSeq scenario stop
  * @retval None
  */
void MX_WriteIO_WriteSeq_Stop(DMA_HandleTypeDef *hdma)
{
  /* LPBAM stop DMA channel in linked-list mode */
  if ((hdma[TOGGLEIO_Q_IDX].State == HAL_DMA_STATE_BUSY) && (hdma[TOGGLEIO_Q_IDX].LinkedListQueue->FirstCircularNode != 0U))
  {
    if (HAL_DMA_Abort(&hdma[TOGGLEIO_Q_IDX]) != HAL_OK)
    {
      Error_Handler();
 }
  }

  /* Check if DMA channel interrupt is enabled */
  if ((hdma[TOGGLEIO_Q_IDX].State == HAL_DMA_STATE_BUSY) && (__HAL_DMA_GET_IT_SOURCE(&hdma[TOGGLEIO_Q_IDX], DMA_IT_TC) == 0U))
  {
    if (HAL_DMA_PollForTransfer(&hdma[TOGGLEIO_Q_IDX], HAL_DMA_FULL_TRANSFER, DMA_TIMEOUT_DURATION) != HAL_OK)
    {
      Error_Handler();
    }
  }

  /* USER CODE BEGIN WriteIO_WriteSeq_Stop */
	
  /* Start PWM generation */
  if (HAL_LPTIM_PWM_Stop(&hlptim1, LPTIM_CHANNEL_1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE END WriteIO_WriteSeq_Stop */
}

 点击魔术棒设置RAM的运行区域0x28000000,大小0x4000。

 最后对工程进行编译与下载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1304370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

星际飞船大战

欢迎来到程序小院 星际飞船大战 玩法:滑动鼠标控制方向,点击鼠标左键射击,生命值100分,被敌船击中减去20, 5次生命复活机会,统计分数,快去星际飞船大战吧^^。开始游戏https://www.ormcc.com/pl…

深度解读 Cascades 查询优化器

数据库中查询优化器是数据库的核心组件,其决定着 SQL 查询的性能。Cascades 优化器是 Goetz 在 volcano optimizer generator 的基础上优化之后诞生的一个搜索框架。 本期技术贴将带大家了解 Cascades 查询优化器。首先介绍 SQL 查询优化器,接着分析查询…

css 表示具有特定类或者其他属性的某种标签类型的元素

需求 通过 css 选择器获取某种标签&#xff08;如&#xff1a;div、input 等&#xff09;具有某个属性&#xff08;如&#xff1a;class、id 等&#xff09;的元素&#xff0c;从而修改其样式。 代码 通过 [标签].[属性] 的方式来获取 <div class"test">&l…

HyperGCN笔记

1 Title HyperGCN: A New Method of Training Graph Convolutional Networks on Hypergraphs&#xff08;Naganand Yadati、Prateek Yadav、Anand Louis、Madhav Nimishakavi、Vikram Nitin、Partha Talukdar&#xff09;【NeurIPS 2019】 2 Conclision This paper proposes H…

gprMax安装步骤

本来是想直接在base环境下直接弄的&#xff0c;但是报错了&#xff0c;因为base环境里的conda版本不匹配&#xff0c;于是重新建立虚拟环境gprMax&#xff0c;如下所示。 然后激活建立的gprMax环境&#xff0c;在gprMax环境中安装git 参考文章&#xff1a; https://zhuanlan.…

mysqldump --set-gtid-purged参数详解

在开启了GTID模式的数据库&#xff0c;使用mysqldump进行部分数据备份的时候&#xff0c;经常会遇到如下警告 Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of t…

『 Linux 』进程地址空间概念

文章目录 &#x1fad9; 前言&#x1fad9; 进程地址空间是什么&#x1fad9; 写时拷贝&#x1fad9; 可执行程序中的虚拟地址&#x1fad9; 物理地址分布方式 &#x1fad9; 前言 在c/C中存在一种内存的概念; 一般来说一个内存的空间分布包括栈区,堆区,代码段等等; 且内存是…

智慧机房与3D机房动环监控系统的应用

智慧机房是什么&#xff1f; 智慧机房是集采集信息、实时监控、数据分析、统一管理、故障告警等功能于一体的全方位、立体化的智能环境监控系统&#xff0c;构建物联网、大数据和云计算背景下现代企业的“数据心脏”。它能为机房管理者呈现细致入微的关键性数据&#xff0c;优…

Error: Failed to resolve vue/compiler-sfc——vite项目启动报错——npm run serve

运行项目时&#xff0c;报错如下&#xff1a; Error: Failed to resolve vue/compiler-sfc 根据报错信息的提示&#xff1a;vue的版本必须大于3.2.25&#xff0c;经过查看package.json文件&#xff0c;可以看到vue的版本为3.2.36&#xff0c;是满足条件的。 因此考虑缓存问题&…

Git 硬重置之后恢复历史提交版本

****硬重置之前一定要备份分支呀&#xff0c;谨慎使用硬重置&#xff0c;特别是很多人一起使用的分支**** 如果你在reset的时候选择了Hard选项&#xff0c;也就是硬重置 重置完且push过&#xff0c;那么被你本地和远端后面的提交记录肯定就会被抹去。 解决办法&#xff1a; …

BearPi Std 板从入门到放弃 - 先天神魂篇(1)(RT-Thread 指令点亮LED)

简介 使用 BearPi IOT Std板&#xff0c; 开发板简单信息 主芯片: STM32L431RCT6 串口: Usart1 USER LED : PC13 E53_SC1 扩展板与主板连接: I2C : I2C1 (光照强度传感器&#xff1a;BH1750) LED: PB9RT-Thread 创建线程 线程的管理方式 添加用户代码 main.c #include <…

从零构建属于自己的GPT系列6:模型本地化部署2(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1&#xff1a;数据预处理 从零构建属于自己的GPT系列2&#xff1a;模型训…

adb命令学习记录

1、 adb ( android debug bridge)安卓调试桥&#xff0c;用于完成电脑和手机之间的通信控制。 xcode来完成对于ios设备的操控&#xff0c;前提是有个mac电脑。 安卓系统是基于linux内核来进行开发的。 2、adb的安装: 本身 adb是 android SDK 其中自带的工具&#xff0c;用于完…

山西电力市场日前价格预测【2023-12-09】

1.日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-12-09&#xff09;山西电力市场全天平均日前电价为366.40元/MWh。其中&#xff0c;最高日前电价为629.26元/MWh&#xff0c;预计出现在08:00。最低日前电价为216.58元/MWh&#xff0c;预…

PySpark大数据处理详细教程

欢迎各位数据爱好者&#xff01;今天&#xff0c;我很高兴与您分享我的最新博客&#xff0c;专注于探索 PySpark DataFrame 的强大功能。无论您是刚入门的数据分析师&#xff0c;还是寻求深入了解大数据技术的专业人士&#xff0c;这里都有丰富的知识和实用的技巧等着您。让我们…

使用工业级以太网交换机,需要注意哪些问题?

企业常用工业级以太网交换机进行网络组网&#xff0c;主要有两种情况。第一种是通过协议转换器将专线转换为以太网交换机&#xff0c;第二种是直接租用裸光纤。具体而言&#xff0c;在三、四层网络选择的三层交换机通常只能配置简单的动态路由协议、简单的策略路由和简单的访问…

如何管理大型网站的抓取预算

优化您的网站&#xff0c;以便 Google 更快地找到您的内容并将您的内容编入索引&#xff0c;这可以帮助您的网站获得更好的知名度和流量。 互联网是一个不断发展的虚拟世界&#xff0c;拥有超过 1 亿个网站。 你认为谷歌可以抓取世界上的每一个网站吗&#xff1f; 即使拥有谷…

【SpringBoot篇】详解基于Redis实现短信登录的操作

文章目录 &#x1f970;前言&#x1f6f8;StringRedisTemplate&#x1f339;使用StringRedisTemplate⭐常用的方法 &#x1f6f8;为什么我们要使用Redis代替Session进行登录操作&#x1f386;具体使用✨编写拦截器✨配置拦截器&#x1f33a;基于Redis实现发送手机验证码操作&am…

DNF 单机联网 搭建教程(附视频)

更多游戏搭建&pvf修改教程请见: DNF教程 注意&#xff1a;请不要将游戏进行商业化&#xff0c;一切后果概不负责。仅供单机&#xff0c;好友之间进行娱乐&#xff01;&#xff01; 注意&#xff1a;请不要将游戏进行商业化&#xff0c;一切后果概不负责。仅供单机&#…

重塑未来工作方式,亚马逊云科技re:Invent推出生成式AI助手Amazon Q

亚马逊云科技在re:Invent 2023宣布推出Amazon Q&#xff0c;这是一种新型生成式AI支持的助手&#xff0c;专门用于满足办公场景需要&#xff0c;可以根据客户业务进行定制。客户可以快速获得复杂问题的相关答案、生成内容并采取行动——所有这些都基于客户自身的信息存储库、代…