四、STM32 HAL库API完全指南:从功能分类到实战示例
STM32 HAL库API完全指南:从功能分类到实战示例
一、HAL库API的总体架构
STM32 HAL库(Hardware Abstraction Layer)作为STMicroelectronics推出的统一驱动框架,提供了覆盖所有STM32外设的标准化API。HAL库的API设计遵循严格的分层架构和命名规范,旨在简化开发流程并提高代码可移植性。
HAL库API主要分为以下几大类:
- 外设初始化与配置
- 数据传输与通信
- 中断与DMA管理
- 状态监控与错误处理
- 定时器与PWM控制
- ADC/DAC与模拟功能
- 低功耗与电源管理
- 系统服务与辅助功能
二、外设初始化与配置类API
这类API负责外设的初始化、反初始化以及底层硬件配置:
/* 通用初始化函数 */
HAL_StatusTypeDef HAL_<外设>_Init(<外设>_HandleTypeDef *h<外设>);
HAL_StatusTypeDef HAL_<外设>_DeInit(<外设>_HandleTypeDef *h<外设>);/* MSP底层配置函数(用户需实现) */
void HAL_<外设>_MspInit(<外设>_HandleTypeDef* h<外设>);
void HAL_<外设>_MspDeInit(<外设>_HandleTypeDef* h<外设>);/* 参数配置函数 */
HAL_StatusTypeDef HAL_<外设>_Config(<外设>_HandleTypeDef *h<外设>, <配置结构体>* config);
HAL_StatusTypeDef HAL_<外设>_GetConfig(<外设>_HandleTypeDef *h<外设>, <配置结构体>* config);
典型示例:
// UART初始化
HAL_UART_Init(&huart2);// SPI配置
SPI_InitTypeDef spiConfig = {0};
spiConfig.Mode = SPI_MODE_MASTER;
spiConfig.Direction = SPI_DIRECTION_2LINES;
// ...其他配置
HAL_SPI_Config(&hspi1, &spiConfig);
三、数据传输与通信类API
这类API支持各种通信协议的数据收发,包括轮询、中断和DMA三种模式:
/* 轮询模式 */
HAL_StatusTypeDef HAL_<外设>_Transmit(<外设>_HandleTypeDef *h<外设>, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_<外设>_Receive(<外设>_HandleTypeDef *h<外设>, uint8_t *pData, uint16_t Size, uint32_t Timeout);/* 中断模式 */
HAL_StatusTypeDef HAL_<外设>_Transmit_IT(<外设>_HandleTypeDef *h<外设>, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_<外设>_Receive_IT(<外设>_HandleTypeDef *h<外设>, uint8_t *pData, uint16_t Size);/* DMA模式 */
HAL_StatusTypeDef HAL_<外设>_Transmit_DMA(<外设>_HandleTypeDef *h<外设>, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_<外设>_Receive_DMA(<外设>_HandleTypeDef *h<外设>, uint8_t *pData, uint16_t Size);/* 双向通信(如SPI全双工) */
HAL_StatusTypeDef HAL_<外设>_TransmitReceive(<外设>_HandleTypeDef *h<外设>, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_<外设>_TransmitReceive_IT(<外设>_HandleTypeDef *h<外设>, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
HAL_StatusTypeDef HAL_<外设>_TransmitReceive_DMA(<外设>_HandleTypeDef *h<外设>, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
典型示例:
// UART轮询发送
HAL_UART_Transmit(&huart2, "Hello World!", 12, 1000);// SPI中断接收
HAL_SPI_Receive_IT(&hspi1, rxBuffer, 32);// I2C DMA发送
HAL_I2C_Master_Transmit_DMA(&hi2c1, 0x50, txBuffer, 16);
四、中断与DMA管理类API
这类API用于配置和处理外设中断及DMA操作:
/* 中断处理函数 */
void HAL_<外设>_IRQHandler(<外设>_HandleTypeDef *h<外设>);/* 中断回调函数(用户需重写) */
__weak void HAL_<外设>_TxCpltCallback(<外设>_HandleTypeDef *h<外设>);
__weak void HAL_<外设>_RxCpltCallback(<外设>_HandleTypeDef *h<外设>);
__weak void HAL_<外设>_TxRxCpltCallback(<外设>_HandleTypeDef *h<外设>);
__weak void HAL_<外设>_ErrorCallback(<外设>_HandleTypeDef *h<外设>);/* DMA相关函数 */
HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma);
HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma);
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma);
典型示例:
// UART中断处理函数(在stm32xxxx_it.c中)
void USART2_IRQHandler(void)
{HAL_UART_IRQHandler(&huart2);
}// 重写UART接收完成回调
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if (huart->Instance == USART2) {// 处理接收到的数据process_uart_data(rxBuffer, rxSize);}
}
五、状态监控与错误处理类API
这类API用于检查外设状态、获取错误码及清除标志位:
/* 获取外设状态 */
HAL_StatusTypeDef HAL_<外设>_GetState(<外设>_HandleTypeDef *h<外设>);/* 获取错误码 */
uint32_t HAL_<外设>_GetError(<外设>_HandleTypeDef *h<外设>);/* 标志位操作 */
FlagStatus HAL_<外设>_GetFlagStatus(<外设>_HandleTypeDef *h<外设>, uint32_t Flag);
void HAL_<外设>_ClearFlag(<外设>_HandleTypeDef *h<外设>, uint32_t Flag);
典型示例:
// 检查UART是否就绪
if (HAL_UART_GetState(&huart2) == HAL_UART_STATE_READY) {// 可以进行数据传输
}// 获取SPI错误码
uint32_t error = HAL_SPI_GetError(&hspi1);
if (error != HAL_ERROR_NONE) {// 处理错误
}
六、定时器与PWM控制类API
这类API用于定时器配置、PWM输出及定时功能:
/* 定时器基础功能 */
HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim);/* PWM输出功能 */
HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);/* 输入捕获功能 */
HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
典型示例:
// 启动定时器中断(用于周期性任务)
HAL_TIM_Base_Start_IT(&htim3);// 启动PWM输出(用于电机控制)
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);// 修改PWM占空比
TIM_OC_InitTypeDef sConfigOC = {0};
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 500; // 修改占空比值
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
七、ADC/DAC与模拟功能类API
这类API用于模拟数字转换和数字模拟转换:
/* ADC功能 */
HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc);
HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef *hadc);
HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef *hadc);
HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef *hadc);
HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef *hadc);
uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef *hadc);/* DAC功能 */
HAL_StatusTypeDef HAL_DAC_Init(DAC_HandleTypeDef *hdac);
HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef *hdac, uint32_t Channel);
HAL_StatusTypeDef HAL_DAC_Start_IT(DAC_HandleTypeDef *hdac, uint32_t Channel);
HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef *hdac, uint32_t Channel);
HAL_StatusTypeDef HAL_DAC_Stop_IT(DAC_HandleTypeDef *hdac, uint32_t Channel);
HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef *hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data);
uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef *hdac, uint32_t Channel);
典型示例:
// 启动ADC并读取值
HAL_ADC_Start(&hadc1);
uint32_t adcValue = HAL_ADC_GetValue(&hadc1);// 启动DAC输出
HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 2048); // 输出1.65V (3.3V的一半)
八、低功耗与电源管理类API
这类API用于配置STM32的各种低功耗模式:
/* 睡眠模式 */
void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t STOPEntry);/* 停止模式 */
void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry);
void HAL_PWR_ExitSTOPMode(void);/* 待机模式 */
void HAL_PWR_EnterSTANDBYMode(void);/* 低功耗配置 */
void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx);
void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx);
void HAL_PWR_EnableBkUpAccess(void);
void HAL_PWR_DisableBkUpAccess(void);
典型示例:
// 配置唤醒引脚并进入停止模式
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);// 进入待机模式(仅外部复位或WKUP引脚可唤醒)
HAL_PWR_EnterSTANDBYMode();
九、系统服务与辅助功能类API
这类API提供系统级功能和辅助工具:
/* 系统时钟配置 */
HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct);
HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency);/* 中断控制 */
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn);
void HAL_NVIC_DisableIRQ(IRQn_Type IRQn);/* GPIO操作 */
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint32_t GPIO_Pin);
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint32_t GPIO_Pin, GPIO_PinState PinState);
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint32_t GPIO_Pin);
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint32_t GPIO_Pin);/* 延时功能 */
__weak void HAL_Delay(uint32_t Delay);/* 看门狗功能 */
HAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg);
HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg);
HAL_StatusTypeDef HAL_WWDG_Init(WWDG_HandleTypeDef *hwwdg);
HAL_StatusTypeDef HAL_WWDG_SetCounter(WWDG_HandleTypeDef *hwwdg, uint32_t Counter);
典型示例:
// 配置系统时钟
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
// ...其他配置
HAL_RCC_OscConfig(&RCC_OscInitStruct);// GPIO操作
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 点亮LED
HAL_Delay(500); // 延时500ms
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // 熄灭LED// 喂狗操作(独立看门狗)
HAL_IWDG_Refresh(&hiwdg);
十、HAL库API使用最佳实践
-
遵循初始化流程:
- 使用STM32CubeMX生成基础初始化代码
- 按照"系统时钟→外设→应用"的顺序初始化
-
合理选择通信模式:
- 简单场景使用轮询模式
- 实时性要求高的场景使用中断模式
- 大数据量传输使用DMA模式
-
正确处理中断:
- 在中断处理函数中调用
HAL_<外设>_IRQHandler()
- 重写相应的回调函数处理事件
- 保持中断处理代码简洁
- 在中断处理函数中调用
-
错误处理:
- 检查API返回值,处理可能的错误
- 使用
HAL_<外设>_GetError()
获取详细错误信息
-
低功耗设计:
- 根据应用需求选择合适的低功耗模式
- 注意唤醒源配置和唤醒后的系统恢复
掌握这些API分类和使用技巧,开发者可以高效地利用HAL库完成各种STM32项目开发,从简单的GPIO控制到复杂的多外设协同工作。HAL库的标准化设计使得代码更具可读性、可维护性和可移植性,是STM32开发的首选方案。
相关文章:
四、STM32 HAL库API完全指南:从功能分类到实战示例
STM32 HAL库API完全指南:从功能分类到实战示例 一、HAL库API的总体架构 STM32 HAL库(Hardware Abstraction Layer)作为STMicroelectronics推出的统一驱动框架,提供了覆盖所有STM32外设的标准化API。HAL库的API设计遵循严格的分层…...
MySQL全量、增量备份与恢复
目录 数据备份 一、数据备份类型 二、常见备份方法 扩展:GTID与XtraBackup 一、GTID(全局事务标识符) 1. 定义与核心作用 2. GTID在备份恢复中的意义 3. GTID配置与启用 二、XtraBackup的意义与核心价值 1. 定…...
fastboot 如何只刷system.img 分区
在 fastboot 模式下只刷入 system.img 分区,可以按照以下步骤操作: 1. 确保设备已进入 Fastboot 模式 连接设备到电脑,并确保已进入 Fastboot/Bootloader 模式:adb reboot bootloader或手动进入(通常为 电源键 音量…...
连接词化归律详解
1. 连接词化归律的基本概念 连接词化归律(也称为归结原理)是数理逻辑中用于简化逻辑表达式的重要方法,它允许我们将复杂的逻辑表达式转化为更简单的等价形式,特别是转化为合取范式(CNF)或析取范式(DNF)。 核心思想 连接词化归律基于一系列逻辑等价关系…...
《构建社交应用用户激励引擎:React Native与Flutter实战解析》
React Native凭借其与JavaScript和React的紧密联系,为开发者提供了一个熟悉且灵活的开发环境。在构建用户等级体系时,它能够充分利用现有的前端开发知识和工具。通过将用户在社交应用中的各种行为进行量化,比如发布动态的数量、点赞评论的次数…...

goner/otel 在Gone框架接入OpenTelemetry
文章目录 背景与意义快速上手:五步集成 OpenTelemetry运行效果展示代码详解与实践目录结构说明组件加载(module.load.go)业务组件示例(your_component.go)程序入口(main.go) 进阶用法与最佳实践…...

杨校老师项目之基于SSM与JSP的鲜花销售系统-【成品设计含文档】
基于SSMJSP鲜花商城系统 随着电子商务的快速发展,鲜花在线销售已成为一种重要的消费模式。本文设计并实现了一个基于JSP技术的鲜花销售管理系统,采用B/S架构,使用SSM框架进行开发,并结合Maven进行项目依赖管理。系统分为前台用户模…...

springboot集成langchain4j实现票务助手实战
前言 看此篇的前置知识为langchain4j整合springboot,以及springboot集成langchain4j记忆对话。 Function-Calls介绍 langchain4j 中的 Function Calls(函数调用)是一种让大语言模型(LLM)与外部工具(如 A…...

Feed流推送之订阅推送
分类 feed流分为TimeLine和智能排序,前者不对内容进行过滤,一般根据发布的时间来进行排序,一般用于好友动态或者推送关注的人的消息,而后者一般有着复杂的算法,可以根据算法智能地向目标用户推送内容,例如…...

wordpress自学笔记 第四节 商城菜单的添加和修改美化
wordpress自学笔记 摘自 超详细WordPress搭建独立站商城教程-第四节 商城菜单的添加和修改美化,2025 WordPress搭建独立站商城#WordPress建站教程https://www.bilibili.com/video/BV1UwwgeuEkK?spm_id_from333.788.videopod.sections&vd_sourcea0af3bbc6b6d…...

GPU L2 Cache一致性协议对科学计算的影响研究
点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 一、GPU缓存层级革命:从Volta到Hopper的演进图谱 1.1 架构级缓存策略对比 Vo…...
C++中类中const知识应用详解
下面将从**const 成员**、const 成员函数、const 对象、mutable、constexpr 等方面,逐一详解 C 类中常见的 const 用法及注意事项,并配合示例。 一、const 数据成员 必须在初始化列表中初始化 class A {const int x; // const 成员 public:A(int v) :…...

【速写】KV-cache与解码的再探讨(以束搜索实现为例)
文章目录 1 Beam Search 解码算法实现2 实现带KV Cache的Beam Search解码3 关于在带kv-cache的情况下的use_cache参数 1 Beam Search 解码算法实现 下面是一个使用PyTorch实现的beam search解码算法: 几个小细节: 束搜索可以加入length_penalty&#…...

(网络)应用层协议-HTTPS
1.HTTPS是什么? HTTPS是应用层的一种协议,是在HTTP的基础上进行了加密层的处理。 HTTP协议的内容都是按照文本的形式进行传输的,所以呢就很容易被别人知道传输的是什么。 我们在了解了TCP/IP之后是知道我们的数据在传输的过程中是通过路由器进…...

vue3: pdf.js 3.4.120 using javascript
npm install pdfjs-dist3.4.120 项目结构: pdfjsViewer.vue <template><div><div v-if"loading" class"flex justify-center items-center py-8"><div class"animate-spin rounded-full h-12 w-12 border-b-2 borde…...
Spark目前支持的部署模式。
一、本地模式(Local Mode) 特点: 在单台机器上运行,无需集群。主要用于开发、测试和调试。所有组件(Driver、Executor)在同一个 JVM 中运行。 启动命令: bash spark-submit --master local[*]…...

想实现一个基于MCP的pptx生成系统架构图【初版实现】
技术栈:Python + MCP协议 + python-pptx + FastMCP 核心创新点:通过MCP协议实现PPTX元素的动态化生成与标准化模板管理 当前还是个半成品,后续持续更新。 主要先介绍一下思路。 一、MCP协议与系统设计原理 1.1 为什么选择MCP? 标准化工具调用:通过MCP将PPTX元素生成逻辑封…...

PyTorch Lightning实战 - 训练 MNIST 数据集
MNIST with PyTorch Lightning 利用 PyTorch Lightning 训练 MNIST 数据。验证梯度范数、学习率、优化器对训练的影响。 pip show lightning Version: 2.5.1.post0Fast dev run DATASET_DIR"/repos/datasets" python mnist_pl.py --output_grad_norm --fast_dev_run…...

力扣2094题解
记录: 2025.5.12 题目: 思路: 暴力遍历。 解题步骤: 1.统计数字出现次数:使用数组cnt来记录输入数组中每个数字的出现次数。 2.生成三位偶数:通过循环从100开始,每次递增2,生成…...

DHCP自动分配IP
DHCP自动分配IP 练习1 路由器 Router>en Router#conf t Router(config)#ip dhcp pool ip10 //创建DHCP地址池 Router(dhcp-config)#network 192.168.20.0 255.255.255.0 // 配置网络地址和子网掩码 Router(dhcp-config)#default-router 192.168.20.254 //配置默认网关 Rou…...
【CF】Day57——Codeforces Round 955 (Div. 2, with prizes from NEAR!) BCD
B. Collatz Conjecture 题目: 思路: 简单模拟 很简单的模拟,我们只需要快速的找到下一个离 x 最近的 y 的倍数即可(要大于 x) 这里我们可以这样写 add y - (x % y),这样就知道如果 x 要变成 y 的倍数还要…...

(done) 补充:xv6 的一个用户程序 init 是怎么启动的 ?它如何启动第一个 bash ?
先看 main.c 从函数名来看,比较相关的就 userinit() 和 scheduler() #include "types.h" #include "param.h" #include "memlayout.h" #include "riscv.h" #include "defs.h"volatile static int started 0;//…...
Nginx部署前端项目深度解析
在部署Vue前端项目时,Nginx的高效配置直接影响用户体验和性能表现。以下从7个关键维度深度解析部署方案,并提供专业级配置策略: 一、项目构建与基础部署 生产构建 npm run build -- --modern # 现代模式构建生成dist/目录包含:…...

超详细讲解C语言转义字符\a \b \r \t \? \n等等
转义字符 C语言有一组字符很特殊,叫做转义字符,顾名思义,改变原来的意思的字符。 1 \? ??)是一个三字母词,在以前的编译器它会被编译为] (??会被编译为[ 因此在以前输入(are you ok ??)就会被编译为are you ok ] 解决这个…...

SpringBoot校园失物招领信息平台
SpringBoot校园失物招领信息平台 文章目录 SpringBoot校园失物招领信息平台1、技术栈2、项目说明2.1、登录注册2.2、管理员端截图2.3、用户端截图 3、核心代码实现3.1、前端首页3.2、前端招领广场3.3、后端业务处理 1、技术栈 本项目采用前后端分离的架构,前端和后…...
【Qt/C++】深入理解 Lambda 表达式与 `mutable` 关键字的使用
【Qt/C】深入理解 Lambda 表达式与 mutable 关键字的使用 在 Qt 开发中,我们常常会用到 lambda 表达式来编写简洁的槽函数。今天通过一个实际代码示例,详细讲解 lambda 的语法、变量捕获方式,特别是 mutable 的作用。 示例代码 QPushButto…...
扩展:React 项目执行 yarn eject 后的 package.json 变化详解及参数解析
扩展:React 项目执行 yarn eject 后的 package.json 变化详解及参数解析 什么是 yarn eject?React 项目执行 yarn eject 后的 package.json 变化详解1. 脚本部分 Scripts 被替换2. 新增构建依赖 dependencies(部分)3. 新增 Babel …...
slackel系统详解
Slackel 是一个基于 Slackware Linux 和 Salix OS(另一个 Slackware 衍生版)的轻量级 Linux 发行版,主要面向桌面用户。它由希腊开发者 Dimitris Tzemos 创建,目标是结合 Slackware 的稳定性与用户友好的工具,同时优化…...

rust 全栈应用框架dioxus server
接上一篇文章dioxus全栈应用框架的基本使用,支持web、desktop、mobile等平台。 可以先查看上一篇文章rust 全栈应用框架dioxus👈 既然是全栈框架,那肯定是得有后端服务的,之前创建的服务没有包含后端服务包,我们修改…...
CSS Layer 详解
CSS Layer 详解 前言 最近在整理CSS知识体系时,发现Layer这个特性特别有意思。它就像是给样式规则提供了一个专属的「VIP通道」,让我们能更优雅地解决样式冲突问题。今天我就用最通俗的语言,带大家全面了解这个CSS新特性。 什么是CSS Laye…...