STM32HAL库通用定时器学后笔记 - 实践

news/2025/11/20 15:21:25/文章来源:https://www.cnblogs.com/ljbguanli/p/19247245

STM32HAL库通用定时器学后笔记 - 实践

通用定时器简介

1.通用定时器有哪些?

        TIM2/TIM3/TIM4/TIM5

2.通用定时器的主要特性

        16位递增、递减、中心对齐计数器(计数值0~65535)

        16位预分频器(分频系数:1~65535)

        可用于触发DAC\ADC

        在更新事件、触发事件、输入捕获、输出比较时,会产生中断/DMA请求

4个独立通道,可用于:输入捕获、输出比较、输出PWM、单脉冲模式

        使用外部信号控制定时器且可实现多个定时器互连的同步电路

        支持编码器和霍尔传感器电路等

***********************通用定时器具备基本定时器所有功能**************************

3.通用定时器框图

1. 时钟源(Clock Sources)

通用定时器的时钟源有四种选择:

  1. 内部时钟(CK_INT)

    • 来自APB总线的时钟
    • 通用定时器的时钟频率计算:CK_INT = APB1时钟 × 2(当APB1分频系数为2时)
    • 例如:系统时钟72MHz,APB1时钟36MHz,APB1分频系数为2,则通用定时器时钟为72MHz
  2. 外部时钟模式1

    • 从TIx引脚输入(TIMx_CH1/2/3/4)
    • TI1F_ED:来自CH1,未经边沿检测的双边沿信号
    • TI1FP1:来自CH1,经边沿检测后的信号(可选择上升沿或下降沿)
    • TI2FP2:来自CH2,经边沿检测后的信号
  3. 外部时钟模式2

    • 从ETR引脚输入(TIMx_ETR)
    • 经过极性选择、边沿检测、预分频器和输入滤波后,可作为外部时钟源
    • 用于将定时器作为脉冲计数器
  4. 内部触发输入(ITRx)

    • 其他定时器的触发输出(TRGO)
    • 可用于定时器级联(一个定时器的溢出事件触发另一个定时器的计数)

2. 控制器(Controller)

  1. 从模式控制器(Slave Mode Controller)

    • 控制计数器复位、启动、递增/递减、计数
    • 用于定时器级联功能
  2. 触发控制器(Trigger Controller,TRGO)

    • 提供触发信号给其他外设
    • 可连接到其他定时器的ITR0-ITR3,实现定时器级联
    • 为DAC/ADC的触发转换提供信号
  3. 编码器接口

    • 用于读取旋转编码器的脉冲和方向信息
    • 支持正交编码器模式

3. 时基单元(Time Base Unit)

时基单元是定时器的核心部分,包括:

  1. 计数器(Counter)

    • 16位计数器,可以向上、向下或中央对齐计数
    • 用于计数时钟脉冲
  2. 预分频器(Prescaler)

    • 用于对输入时钟进行分频
    • 预分频系数范围:1~65536
    • 有预分频器缓冲器(影子寄存器),防止计数过程中改变分频值导致频率不一致
  3. 自动重装载寄存器(Auto Reload Register)

    • 设置计数器的上限值
    • 当计数器达到自动重装载值时,产生更新事件并重新计数

4. 输入捕获电路(Input Capture Circuit)

输入捕获电路用于测量输入信号的周期和占空比:

  1. 输入信号处理

    • 信号经过异或门(电机控制中常用)
    • 进入输入滤波器(过滤高频噪声)
    • 通过边沿检测器(检测上升沿或下降沿)
  2. 捕获比较寄存器

    • 捕获事件发生时,将计数器值转移到捕获比较寄存器
    • 用于计算外部信号的时间(如周期、脉宽)

5. 输出比较电路(Output Compare Circuit)

输出比较电路用于生成PWM波形和特定波形:

  1. 比较功能

    • 当计数器值等于捕获比较寄存器值时,产生输出事件
    • 可设置输出电平翻转、置位或复位
  2. PWM生成

    1.通过设置占空比和频率,生成PWM信号
    2.用于LED调光、电机控制等

    3.计数器时钟源

                    内部时钟(CK_INT)                                设置TIMx_SMCR的SMS=000

                    外部时钟模式1:外部输入引脚(TIX)         设置TIMx_SMCR的SMS=111

                    外部时钟模式2:外部触发输入(ETR)        设置TIMx_SMCR的SMS=111

                    内部触发输入(ITRx)                                   比较复杂,设置需要看参考手册

            外部时钟模式1                

                    处理路径:

    [外部时钟信号] → [IO引脚] → [TIMx_CH1/CH2] → [输入捕获滤波器] → [边沿检测器] → [触发输入选择器] → [模式选择器] → [预分频器] → [计数器]

    #include "./BSP/TIMER/gtim.h"
    #include "./BSP/LED/led.h"
    TIM_HandleTypeDef g_timx_handle; /* 定时器x句柄 */
    void gtim_timx_int_init(uint16_t arr, uint16_t psc)
    {GTIM_TIMX_INT_CLK_ENABLE();                                 /* 使能TIMx时钟 */g_timx_handle.Instance = GTIM_TIMX_INT;                     /* 通用定时器x */g_timx_handle.Init.Prescaler = psc;                         /* 预分频系数 */g_timx_handle.Init.CounterMode = TIM_COUNTERMODE_UP;        /* 递增计数模式 */g_timx_handle.Init.Period = arr;                            /* 自动装载值 */HAL_TIM_Base_Init(&g_timx_handle);HAL_NVIC_SetPriority(GTIM_TIMX_INT_IRQn, 1, 3);             /* 设置中断优先级,抢占优先级1,子优先级3 */HAL_NVIC_EnableIRQ(GTIM_TIMX_INT_IRQn);                     /* 开启ITMx中断 */HAL_TIM_Base_Start_IT(&g_timx_handle);                      /* 使能定时器x和定时器x更新中断 */
    }
    void GTIM_TIMX_INT_IRQHandler(void)
    {/* 以下代码没有使用定时器HAL库共用处理函数来处理,而是直接通过判断中断标志位的方式 */if(__HAL_TIM_GET_FLAG(&g_timx_handle, TIM_FLAG_UPDATE) != RESET){LED1_TOGGLE();__HAL_TIM_CLEAR_IT(&g_timx_handle, TIM_IT_UPDATE);  /* 清除定时器溢出中断标志位 */}
    }

    通用定时器PWM输出实验

    捕获/比较通道的输出部分(通道1)

    通用定时器输出PWM原理

    通用定时器PWM输出实验配置步骤

    **相关HAL库函数介绍

    HAL_TIM_PWM_Init()        CR1\ARR\PSC        初始化定时器基础参数

    HAL_TIM_PWM_MspInit()        无                        存放NVIC\CLOCK\GPIO初始化代码

    HAL_TIM_PWM_ConfigChannel() CCMRx\CCRx\CCER    配置PWM模式、比较值、输出极性

    HAL_TIM_PWM_Start()        CCER\CR1                使能输出比较并启动计数器

    __HAL_TIM_SET_COMPARE()        CCRx        修改比较值

    __HAL_TIM_ENABLE_OCxPRELOAD()        CCER        使能通道预装载

    TIM_OC_InitTypeDef结构体

    typedef struct
    {
      uint32_t OCMode;       /*输出比较模式选择*/ 8种

      uint32_t Pulse;         /*设置比较值*/  CCRx

      uint32_t OCPolarity;    /*设置输出比较值*/  CCxP

      uint32_t OCNPolarity;   /*设置互补输出比较性*/  *高级定时器,通用定时器没有

      uint32_t OCFastMode;    /*使能或失能输出比较快速模式*/
      uint32_t OCIdleState;   /*空闲状态下OC1输出*/

      uint32_t OCNIdleState;  /*空闲状态下OC1N输出*/
    } TIM_OC_InitTypeDef;

    HAL_TIM_PWM_Start()函数

    HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)

    TIM_HandleTypeDef *htim(句柄)                uint32_t Channel(通道)

    该函数的核心只有两行

    TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);

    使能定时器的指定捕获/比较通道(例如通道1、2、3或4),使该通道能够输出PWM信号或进行比较操作。

    • htim->Instance:定时器的外设指针(如TIM2、TIM3等)
    • Channel:通道编号(TIM_CHANNEL_1、TIM_CHANNEL_2等)
    • TIM_CCx_ENABLE:使能通道的标志(使能状态)

    这个函数会执行以下操作:

    1. 验证定时器是否支持比较输出(通过IS_TIM_CC1_INSTANCE检查)
    2. 验证通道号是否合法(通过IS_TIM_CHANNELS检查)
    3. 计算位掩码(如通道1的掩码是TIM_CCER_CC1E << 0
    4. 先清零对应通道的CCxE位(确保通道先被关闭)
    5. 根据TIM_CCx_ENABLE设置新状态(将CCxE位设置为1)

    作用

    • 使能指定通道的输出,使该通道的引脚能够输出PWM信号
    • CCxE = 1:引脚输出PWM/OC信号(启动PWM、单脉冲输出)
    • CCxE = 0:引脚变为高阻态或静态电平(紧急关闭电机驱动)

    __HAL_TIM_ENABLE(htim);

    功能

    使能定时器,启动定时器计数。

    详细解析

    • __HAL_TIM_ENABLE(htim):使能定时器的宏
    • 实际操作:((__HANDLE__)->Instance->CR1|=(TIM_CR1_CEN))
    • 这个宏将定时器的CR1寄存器的第0位(CEN位)设置为1

    作用

    • 启动定时器计数
    • 使定时器开始按照配置的时钟频率计数
    • TIM_CCxChannelCmd配合使用,确保定时器在通道使能后开始工作

    两行代码的执行顺序和目的

    这两行代码通常按此顺序执行,目的是:

    1. 先配置好定时器通道(使能通道)
    2. 再使能定时器(启动计数)

    这样,当定时器开始计数后,当计数器值与比较寄存器匹配时,就会在指定通道上产生PWM输出或比较事件。

    为什么需要这个顺序?

    如果先使能定时器再使能通道,可能会导致在通道还未使能时,定时器已经开始了计数,从而产生意外的输出。先使能通道再使能定时器可以确保定时器启动时,通道已经处于正确的配置状态。


    __HAL_TIM_SET_COMPARE()函数

    #define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \
      (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
       ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
       ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
       ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)))
    该函数整体为宏,使用了C语言的三元条件运算符?:)实现多路选择,根据通道号(__CHANNEL__)选择对应的CCR寄存器进行赋值。

    1. 通道1处理

    ((__CHANNEL__) == TIM_CHANNEL_1) ?((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) : ...
    • 如果通道号等于TIM_CHANNEL_1(通道1)
    • 则将比较值(__COMPARE__)写入(__HANDLE__)->Instance->CCR1(通道1的捕获/比较寄存器)

    2. 通道2处理

    ((__CHANNEL__) == TIM_CHANNEL_2) ?((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) : ...
    • 如果通道号等于TIM_CHANNEL_2(通道2)
    • 则将比较值(__COMPARE__)写入(__HANDLE__)->Instance->CCR2(通道2的捕获/比较寄存器)

    3. 通道3处理

    ((__CHANNEL__) == TIM_CHANNEL_3) ?((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) : ...
    • 如果通道号等于TIM_CHANNEL_3(通道3)
    • 则将比较值(__COMPARE__)写入(__HANDLE__)->Instance->CCR3(通道3的捕获/比较寄存器)

    4. 通道4处理(默认情况)

    ((__HANDLE__)->Instance->CCR4 = (__COMPARE__))
    • 如果以上三个条件都不满足(即通道号不是1、2或3)
    • 则将比较值(__COMPARE__)写入(__HANDLE__)->Instance->CCR4(通道4的捕获/比较寄存器)

    原理

     定时器CCR寄存器的作用

    • CCR(Capture/Compare Register)是定时器的捕获/比较寄存器
    • 在PWM模式下,CCR值决定PWM的占空比
    • 例如:如果ARR=1000,CCR=500,则占空比=500/1000=50%

      重要注意事项

    • 通道有效性

      • 通用定时器(TIM2-TIM5)有4个通道(CH1-CH4)
      • 高级定时器(TIM1、TIM8)有6个通道(CH1-CH4和CH1N-CH3N)
      • 对于高级定时器的互补通道,应使用__HAL_TIM_SET_COMPARE_N
    • 使用顺序

      • 必须在__HAL_TIM_ENABLE(使能定时器)之前设置CCR值
      • 如果先使能定时器再设置CCR,可能会导致PWM输出不稳定
    • 与HAL库函数的关系

      • HAL_TIM_PWM_Start等高级函数中,会自动调用这个宏
      • 例如:HAL_TIM_PWM_Start内部会调用__HAL_TIM_SET_COMPARE设置CCR值

    __HAL_TIM_ENABLE_OCxPRELOAD()函数

    #define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__)    \
      (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
       ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
       ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
       ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE))

    该宏的作用是:使能指定定时器通道的输出比较预装载功能(Output Compare Preload Enable)。

    为什么需要预装载功能?

    问题场景

    假设我们正在输出PWM,当前CCR值为500,ARR=1000(50%占空比)。如果我们在计数过程中(比如CNT=300)直接将CCR改为600,会导致:

    • 当前周期的PWM占空比突然从50%变为60%
    • 产生输出毛刺(不期望的波形突变)

    预装载解决方案

    1. 先将新值(600)写入预装载寄存器
    2. 当计数器达到ARR值(1000)时,触发更新事件
    3. 更新事件发生时,预装载寄存器的值(600)被复制到实际CCR寄存器
    4. 下一个周期开始时,PWM占空比变为60%

    这样保证了PWM输出的平滑过渡,避免了输出毛刺。

    重要注意事项

    1. 必须在设置CCR之前使能预装载

      // 错误顺序:会导致立即生效,可能产生毛刺
      __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 600);
      __HAL_TIM_ENABLE_OCxPRELOAD(&htim2, TIM_CHANNEL_1); // 晚了!CCR已生效
    2. 预装载与更新事件

      • 预装载功能只在更新事件(Update Event)发生时生效
      • 更新事件由计数器达到ARR值触发(在向上计数模式下)
    3. 与HAL库函数的关系

      • HAL_TIM_PWM_Start内部已经包含了使能预装载和设置CCR的操作
      • 通常不需要手动调用这个宏,除非需要在启动PWM前动态设置CCR

    为什么这个宏如此重要?

    在PWM应用中,预装载功能是保证输出质量的关键

    • 消除PWM波形中的毛刺
    • 实现平滑的占空比调整
    • 避免电机驱动等应用中的电流冲击
    • 保证控制系统的稳定性

    与知识库的关联

    • 这个宏直接关联到定时器的"捕获/比较寄存器"部分
    • 是实现稳定PWM输出的核心机制
    • 与之前讨论的__HAL_TIM_SET_COMPARE__HAL_TIM_ENABLE共同构成完整的PWM配置流程

    总结

    __HAL_TIM_ENABLE_OCxPRELOAD宏的作用是使能定时器通道的输出比较预装载功能,它通过设置CCMR寄存器的对应位来实现。这个功能确保了PWM占空比的改变在下一个周期开始时生效,而不是在当前周期中突然改变,从而避免了输出波形的毛刺,是实现高质量PWM输出的必要步骤。

    在STM32的PWM应用中,这个宏的正确使用对于系统的稳定性和性能至关重要。理解这个宏的工作原理,有助于开发者编写更健壮、更高质量的PWM控制代码。


    捕获/比较通道的输入部分

    通用定时器输入捕获实验配置步骤

    相关HAL库函数介绍


    TIM_IC_InitTypeDef结构体

    typedef struct
    {
      uint32_t  ICPolarity;  /*输入捕获触发方式选择,比如上升、下降捕获*/

      uint32_t ICSelection;  /*输入捕获选择,用于设置映射关系*/

      uint32_t ICPrescaler;  /*输入捕获分频系数*/

      uint32_t ICFilter;     /*输入捕获滤波器设置*/
    } TIM_IC_InitTypeDef;

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

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

    相关文章

    2025年手工雕刻石碑生产厂家权威推荐榜单:汉白玉墓碑/石碑/汉白玉石碑源头厂家精选

    一块质朴的石头,在匠人手中被赋予生命与温度,这或许就是手工雕刻石碑的魅力所在。 在现代化机械加工普及的今天,手工雕刻石碑因其独特的艺术价值和不可复制的文化内涵,依然在市场中占据着重要地位。随着消费者对个…

    2025不容错过!可燃气体报警器十大实力厂家大盘点

    2025不容错过!可燃气体报警器十大实力厂家大盘点 一、引言 在工业生产和日常生活中,可燃气体的广泛使用带来了诸多便利,但同时也伴随着泄漏、爆炸等安全隐患。可燃气体报警器作为预防此类事故的关键设备,能够实时监…

    记基于现有项目架构通过ai生成的一个语音助手功能开发设计文档

    记基于现有项目架构通过ai生成的一个语音助手功能开发设计文档题前不得不赞叹一句有了AI的协同,实在是太高效了 📘 语音助手功能设计文档 目录系统架构概览 核心流程 翻译模式详解 内部处理机制 关键讨论点系统架构…

    2025 最新推荐海外仓服务平台榜单:覆盖欧美东南亚等核心市场,美国 / 英国 / 德国 / 法国海外仓/换标 / 维修 / 检测优质服务商权威测评

    引言 跨境电商行业的全球化扩张推动海外仓需求持续激增,据国际跨境物流协会(ICLA)2025 年度测评报告显示,全球海外仓服务商数量年增 37%,但服务合规率仅 62%,物流延误、库存失控等问题导致卖家平均损失率达 18%。…

    Agent Dart证书验证漏洞深度解析

    本文详细分析了Agent Dart库中存在的证书验证漏洞CVE-2024-48915,包括委托验证缺失canister_ranges检查和时间戳验证问题,这些安全缺陷可能导致子网冒充和证书无限期有效等严重风险。Agent Dart缺失证书验证检查 CV…

    2025年北京集团法律顾问服务权威推荐榜单:私人法律顾问/高级法律顾问/社区法律顾问服务精选

    在法治环境日益完善的今天,北京集团法律顾问服务市场已形成专业化、精细化的服务格局,为企业稳健经营提供着坚实的法律保障。 随着企业法律需求的多元化和复杂化,北京地区的集团法律顾问服务行业呈现出专业化分工、…

    2025年螺旋输送机批发厂家权威榜单:带式输送机/链板输送机/皮带输送机设备源头厂家精选

    在工业物料输送领域,螺旋输送机凭借其结构紧凑、密封性好、操作简便等优势,成为粮食加工、化工生产、矿山冶炼、环保处理等行业的关键设备。根据2024年行业数据统计,国内螺旋输送机市场规模已突破50亿元,其中管式螺…

    【图像超分】论文复现:轻量化超分 | RLFN的Pytorch源码复现,跑通源码,整合到EDSR-PyTorch中进行训练、测试 - 教程

    pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

    2025年合肥外呼系哪家好--外呼系统推荐

    摘要 在数字化营销转型的浪潮下,电销外呼系统依然是金融、教育、企业客服服务等行业触达客户最直接、最高效的手段。然而,随着外呼行业规范化发展,“高频封号”、“接通率低”的问题已成为制约外呼行业增长的痛点。…

    2025年四川搭建网站维护服务权威推荐:四川网站搭建平台/四川企业网站开发/四川企业官网搭建公司源头机构精选

    在数字化转型浪潮下,一个稳定高效的网站已成为企业市场竞争的关键一环。 在数字经济蓬勃发展的背景下,四川省网站建设及维护服务市场呈现出快速增长态势。据相关统计,2025年四川省企业网站建设需求较去年同期增长约…

    js yield Generator

    // 定义Generator函数 function* simpleGenerator() {debugger;console.log(开始执行);debugger;yield 第一次暂停;debugger;console.log(恢复执行);debugger;yield 第二次暂停;debugger;console.log(结束执行);debugg…

    c++11之移动构造函数

    class CObject { public:CObject(string str):m_str(str) {cout << "构造函数" << endl;}CObject(const CObject& obj) {m_str = string(obj.m_str);cout << "拷贝构造函数"…

    2025年高光谱成像技术应用实力榜:高光谱成像系统、高校用的高光谱相机、高校教学高光谱相机、科研机构高光谱相机、工业用高光谱相机、五家企业以产品性能与专业服务赢得市场认可

    随着遥感与精准探测需求的持续增长,高光谱成像系统作为关键设备,其技术性能与数据精度成为科研与行业应用的关注焦点。在高校教学、科研机构、农业遥感、工业检测等主流应用场景中,一批具备自主研发能力与专业技术服…

    《浙商》杂志|协作方能共赢,湘湖论剑网易专场对接会描绘AI人机共生新蓝图

    前言:近日,网易伏羲受邀出席2025湘湖论剑“中国视谷”产业生态大会,人机协作任务平台网易有灵智能体和工程机械智能化品牌网易灵动同步亮相,近40位企业家及产学研界代表围绕行业智能化转型的方向需求和前景共同探讨…

    SBDAF40V2-ASEMI可直接替代安世PMEG4020EP

    SBDAF40V2-ASEMI可直接替代安世PMEG4020EP编辑:ll SBDAF40V2-ASEMI可直接替代安世PMEG4020EP 型号:SBDAF40V2 品牌:ASEMI 封装:SMAF 正向电流:2A 反向电压:40V 正向压降:0.44V~0.47V 引线数量:2 芯片个数:1 芯…

    GESP C++ 二级真题 (2025.09) 知识点精讲

    好的,我理解您的要求。我将去掉所有的引用标记,以简洁明了的格式重新为您整理这套真题的知识点精讲,方便孩子阅读和理解。GESP C++ 二级真题 (2025.09) 知识点精讲 单选题部分 1. 题:人工智能-大模型概念考查知识点…

    2025年北京银行贷款中介公司权威推荐榜单:贷款中介加盟/中介贷款公司/贷款公司中介源头公司精选

    2025年北京银行贷款中介公司权威推荐榜单:贷款中介加盟/中介贷款公司/贷款公司中介源头厂家精选 在北京银行贷款市场,专业中介机构正成为连接银行产品与融资需求的重要桥梁,为个人和企业提供更加精准高效的贷款解决…

    项目中使用Redis缓存 - 努力-

    项目中使用Redis缓存项目中使用Redis 缓存一、移动端项目存在的问题 1.1 移动端项目存在的问题移动端是面向所有的消费者的,请求压力相对比较大,如果所有的数据查询都是从数据库MySQL中直接查询的,那么可能就存在如…

    2025年抖音矩阵系统TOP榜,优质系统一网打尽!短视频矩阵/抖音视频矩阵/视频矩阵/GEO排名/抖音矩阵系统推荐榜单

    行业背景与榜单意义 随着短视频营销进入深水区,抖音矩阵系统已成为企业数字化营销的重要工具。据第三方数据监测显示,2024年抖音矩阵相关服务市场规模同比增长67%,越来越多的企业开始借助专业系统实现账号矩阵管理、…

    死里逃生啊;如何得到sln

    准备删Qt4,来了个mv /usr/lib64 /usr/lib64.xxx 然后/usr/bin/ls: 无法执行:找不到需要的文件 mv也是如此,360浏览器也是如此。 export LD_LIBRARY_PATH=/usr/lib64 没用。 在手机上问AI,说sln是静态链接命令,不依…