MCU开发学习记录9 - 通用定时器学习与实践(HAL库) -RGBLED控制、定时器输入捕获、主从定时器移相控制-STM32CubeMX

        本文将介绍通用定时器的概念、相关函数以及STM32CubeMX生成定时器的配置函数以及对生成定时器的配置函数进行分析(包括结构体配置、相关寄存器配置)。
        本文以TIM2/TIM5、TIM3/TIM4为基础介绍通用定时器(包含通用定时器全部功能),其余的通用定时器都是功能阉割版,可自行查阅芯片的reference manual和HAL库手册。

        最后针对于通用定时器实践:使用TIM2输出PWM控制全彩LED灯;输入捕获MCU开发学习记录8 - 基本定时器学习与实践(HAL库)的LED灯高电平持续时间;主从定时器移相控制(利用主定时器输出一路PWM同时作为触发信号,从定时器输出移相PWM波)。

0. F4系列定时器分类

  1. 最大接口时钟(Max interface clock (MHz))
    1. 定时器与系统内核(如MCU)之间的通信接口(如APB总线)支持的最高时钟频率。
    2. 它决定了定时器寄存器配置和状态读取的速度上限。例如,如果接口时钟为84 MHz,则对定时器寄存器的读写操作需基于该频率进行,不能超过此速率。
  2. 最大定时器时钟(Max timer clock (MHz))
    1. 定时器内部计数器(Counter)实际运行时的最高时钟频率。
    2. 它决定了定时器的计数速度,直接影响定时器的计时精度和输出信号的频率上限。例如,168 MHz的定时器时钟意味着计数器每秒最多递增168,000,000次。

        
        

1. 什么是通用定时器?

1.1 通用定时器概念

1.1.1 通用定时器功能说明

        STM32F4系列的通用定时器为TIM2/TIM5(32位定时器,即计数值CNT有32位)、TIM3/TIM4(16位定时器)、TIM9-TIM14(16位定时器,功能阉割版)。

  1. TIM2/TIM5、TIM3/TIM4功能相同(只有计算器位数不同):
    · 
    递增、递减和递增/递减(双向)的计数模式
    · 4个独立通道:输入捕获;输出比较;PWM 生成(边沿和中心对齐模式)、单脉冲输出
    · 多定时器主从互连以及外部信号控制定时器
    · 如下事件时生成中断/DMA 请求:
            1. 
    更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)
            2. 触发事件(计数器启动、停止、初始化或通过内部/外部触发计数)
            3. 输入捕获
            4. 输出比较
    · 增量编码器与霍尔传感器支持
    · 外部时钟模式允许定时器使用外部信号作为时钟源,而不是内部的APB时钟。这有两种模式:外部引脚输入(通过定时器的 ​外部触发输入引脚(TIMx_ETR)​​ 接收外部脉冲信号。即外部脉冲直接驱动定时器的计数器递增。)和外部触发输入(来自其他外设的触发信号(如另一个定时器的 ​TRGO信号、ADC的转换完成信号等))。
  2. TIM9/TIM12:
    · 只有 递增计数模式
    · 2个独立通道:输入捕获;输出比较;PWM 生成(边沿和中心对齐模式)、单脉冲输出
    · 多定时器主从互连以及外部信号控制定时器
    · 如下事件时生成中断:
            1. 
    更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)
            2. 输入捕获
            3. 输出比较
  3. TIM10、TIM11、TIM13、TIM13:
    · 只有 递增计数模式
    · 1个独立通道:输入捕获;输出比较;PWM 生成(边沿和中心对齐模式)、单脉冲输出
    · 如下事件时生成中断:
            1. 
    更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)
            2. 输入捕获
            3. 输出比较

1.1.2 通用定时器框图

下图为正点原子开发指南里面的通用定时器框图,如下所示。

        

  1. 时钟来源选择:
    · 内部时钟 (CK_INT)
    · 外部时钟模式 1 :外部输入引脚 (TIx)
    · 外部时钟模式 2 :外部触发输入 (ETR) ,仅适用于 TIM2 TIM3 TIM4
    · 内部触发输入 (ITRx)(定时器主从模式) :使用一个定时器作为另一个定时器的预分频器,例如可以将定时器配置为定时器 2 的预分频器。
  2. TIM控制器:
    复位、使能、计数、TRGO(通用触发输出)定时器或DAC/ADC、编码器接口
  3. 时基单元:
    ·
    计数模式:递增、递减和递增/递减(双向/中心对齐模式)
    · 预分频器寄存器 (TIMx_PSC) - 具有影子寄存器
    · 计数器寄存器 (TIMx_CNT)
    · 自动重载寄存器 (TIMx_ARR)- 具有影子寄存器
  4. 输入捕获通道:
    配置TIMx_CCER(CCnP/CCnNP)使能TIMx_CHn输入通道,生成TInF(Timer Input n Filter)信号,通过边沿检测器生成对应边沿信号TInFPx(Timer Input n Filtered and Polarity-Processed)经过预分频器生成ICnPS(Input Capture n Prescaler)触发对应输入捕获事件。
  5. 输入捕获/输出比较通道共用部分:
    · 输入捕获部分:

      描述了输入捕获事件相关寄存器配置,以及读CCRx的计数值。
    · 输出比较部分:
      描述了输出捕获事件相关寄存器配置,以及写CCRx的计数值。
  6. 输出比较通道:
    本部分主要两个功能:一是PWM输出;二是做TRGO的触发信号。

1.2 通用定时器-时钟计数模式(三种)

TIMx_CR1.ARPE(Auto-reload preload enable) :自动重载预装载使能
TIMx_CR1.CMS(Center-aligned mode selection):中心对齐模式选择
TIMx_CR1.DIR(Direction):方向(递增、递减)
TIMx_CR1.URS((Update request source):中断或 DMA 请求的请求源选择
TIMx_CR1.UDIS(Update disable):使能/禁止 UEV 事件
TIMx_CR1.CEN(Counter enable):计数器使能

        

1.2.1 通用定时器-递增计数模式

        

1.2.2 通用定时器-递减计数模式

        

1.2.3 通用定时器-中心对齐模式(递增/递减计数)

        
            

CMS=11
        
CMS=01(counter underflow)CMS=10(counter overflow)
        

1.3 通用定时器时钟源

        

1.3.1 通用定时器时钟源1-内部时钟源 (CK_INT)

        SMS = 000(即禁止从模式控制器),CEN 位、DIR 位(TIMx_CR1 寄存器中)和UG位(TIMx_EGR 寄存器中)为实际控制位。
        

1.3.2 通用定时器时钟源2-外部时钟模式 1:外部输入引脚 (TIx)

        SMS = 111,即计数器可在选定的输入信号上出现上升沿或下降沿时计数。
        
芯片参考手册中举例:要使递增计数器在 TI2 输入出现上升沿时计数,请执行以下步骤:
        

1.3.3 通用定时器时钟源3-外部时钟模式 2:外部触发输入 (ETR)

        

        

芯片参考手册中举例:要使递增计数器在 ETR 每出现 2 个上升沿时计数,请执行以下步骤:

        
        
        

1.3.4 通用定时器时钟源4-内部触发输入 (ITRx)

        参考本文的1.6.2 定时器同步

1.3 通用定时器-输入捕获/输出比较通道

1.3.1 输入捕获通道

下图为正点原子开发指南注释的输入捕获通道图。
        

工作流程:
        外部信号->TIx引脚->TIxF信号->TIxFPx信号(边沿极性信号)->ICx(输入捕获)->ICxPS

1.3.2 共用通道- 输入捕获部分

下图为正点原子开发指南注释的共用通道- 输入捕获部分图。

        

1.3.3 共用通道- 输出比较部分

下图为正点原子开发指南注释的共用通道- 输出比较部分图。

        

1.3.4 输出比较通道

下图为正点原子开发指南注释的输出比较通道图。

        

1.4 通用定时器输入模式

1.4.1 输入捕获模式

1. 输入捕获模式说明:

        当检测到外部信号(如TI1引脚)的指定边沿(上升沿/下降沿)​时,将当前计数器值锁存到捕获寄存器(TIMx_CCRx)中。
        通过中断或DMA通知系统读取捕获值,用于计算信号频率、脉宽等参数。

2. 关键寄存器:

  • 输入通道(TI1/TI2等)​​:外部信号输入引脚。

  • 输入滤波(ICxF)​​:消除信号抖动。

  • 边沿检测(CCxP/CCxNP)​​:选择触发边沿(上升沿/下降沿)。

  • 捕获寄存器(TIMx_CCRx)​​:存储捕获时的计数器值。

  • 中断/DMA标志(CCxIF/CCxOF)​​:通知系统捕获完成。

3. 具体流程:

  1. 选择有效输入通道(映射TI1到CCR1)
    · 
    TIMx_CCMR1.​CC1S[1:0] - 01(输入模式)
    · (输入模式,即TIMx_CCMR1.​CC1S[1:0]不等于0)使TIMx_CCR1变为只读模式

  2. 配置输入滤波(消除信号抖动)​
    · TIMx_CR1.​CKD[1:0] - 设置 tDTS数字滤波器采样时钟
    · TIMx_CCMR1.​IC1F[3:0] - 设置可定义 TI1 输入的采样频率和适用于 TI1 的数字滤波器带宽。数字滤波器由事件计数器组成,每 N 个事件才视为一个有效边沿:

  3. 选择有效触发边沿​
    · 
    TIMx_CCER.CCxP - 0 上升沿、1 下降沿
    · TIMx_CCER.CCxNP - 双边沿触发

  4. 配置输入预分频器(禁止预分频)
    · TIMx_CCMR1.IC1PS[1:0] - 设置00,禁止预分频器,即每次检测到有效边沿均触发捕获。

  5. 使能捕获功能
    · 
    TIMx_CCER.CC1E - 1:允许计算器的值捕获到捕获寄存器中。

  6. 使能中断/DMA请求
    · 
    TIMx_DIER.CC1IE - 1:使能捕获完成中断
    · TIMx_DIER.CC1DE - 1:使能DMA请求(需配合DMA控制器初始化)。

4. 捕获事件处理流程:

  1. 跳变沿检测
    TI1输入信号经过滤波和边沿检测后,确认有效上升沿。

  2. 计数器值锁存
    · ​​​计数器值立即写入TIMx_CCR1寄存器。

  3. 标志位更新
    · ​​​CC1IF标志(TIMx_SR寄存器)​​ 置1,表示捕获完成。
    · ​​​若中断已使能(CC1IE=1),触发中断服务程序(ISR)。
    · ​​​若DMA已使能(CC1DE=1),触发DMA传输。

  4. 重复捕获处理
    · 
    ​​​未及时读取TIMx_CCR1或清除CC1IF标志,下次捕获时CC1OF标志(溢出标志)置1,提示数据覆盖风险。

  5. 标志位清除
    · 
    TIMx_SR.​CC1IF:软件写0 或 读取TIMx_CCR1寄存器。
    · TIMx_SR.​CC1OF:软件写0。

注:TIMx_EGR.CC1G置1,可生成IC中断和DMA请求。

1.4.2 PWM输入模式

1. PWM输入模式说明:

        一个外部引脚(TI1)即可同时捕获PWM信号的周期(Period)​和占空比(Duty Cycle)​。
        ​IC1通道​:捕获PWM信号的上升沿,记录周期值(TIMx_CCR1)。
        ​IC2通道​:捕获PWM信号的下降沿,记录占空比(TIMx_CCR2)。
        计数器复位​:每次捕获上升沿时,触发从模式控制器复位计数器(TIMx_CNT),确保周期测量准确性。

2. 具体流程:

  1. 配置IC1通道(捕获上升沿,测量周期)​
    · 
    TIMx_CCMR1.CC1S[1:0]​ - 01,将IC1映射到 ​TI1输入​(即PWM信号输入引脚)。
    · TIMx_CCER.CC1P/CC1NP - 00,选择上升沿触发。

  2. 配置IC2通道(捕获下降沿,测量占空比)​
    · 
    TIMx_CCMR1.CC2S[1:0] - 10,将IC2也映射到 ​TI1输入​(同一引脚)。
    · TIMx_CCER.CC1P/CC1NP - 10,选择上升沿触发。

  3. 配置从模式控制器(复位模式)​
    · 
    TIMx_SMCR.TS[2:0] - 101,选择触发源为 ​TI1FP1​(即IC1的滤波后信号)。
    · TIMx_SMCR.SMS[2:0] -100,使能从模式为复位模式(上升沿复位计数器)。

  4. 使能捕获功能
    · TIMx_CCER.CC1​​​​​​E/CC2E都写入 1,允许捕获到TIMx_CCR1和TIMx_CCR2。

        

1.5 通用定时器输出模式

1.5.1 强制输出模式

1. 强制输出模式说明:

        强制输出模式允许软件直接控制定时器的输出比较信号(OCxREF和OCx引脚电平),​绕过计数器与比较寄存器的比较逻辑,强制设定输出状态。强制输出时,计数器与影子寄存器的比较仍正常执行,可触发中断或DMA请求。

2. 具体流程:

  1. 配置通道为输出模式
    · TIMx_CCMRx.CCXS[1:0] - 00,选择通道为输出模式​(默认模式)。

  2. 强制设置输出电平
    · TIMx_CCMRx.OCxM[2:0] - 100:强制OCxREF为无效电平;101:强制OCxREF有效电平。

  3. 配置输出极性(CCxP位)​
    · TIMx_CCER.​CCxP - 0:高电平有效;1:低电平有效

  4. 中断/DMA触发逻辑​:
    若计数器与比较寄存器匹配,​CCxIF标志(TIMx_SR)​​ 置1,触发中断或DMA请求。

1.5.2 输出比较模式

1. 输出比较模式说明:

        输出比较模式(特别是 ​翻转模式)允许定时器在计数器(TIMx_CNT)与捕获/比较寄存器(TIMx_CCRx)匹配时,自动翻转输出引脚(OCx)的电平。

2. 关键寄存器:

  • 输出模式(OCxM)​​:定义匹配时的输出行为(如翻转、置高、置低)。
  • 输出极性(CCxP)​​:控制输出引脚是否反相。
  • 预装载寄存器(OCxPE)​​:决定是否启用影子寄存器(缓冲写入的TIMx_CCRx值)。

3. 具体流程:

  1. 选择计数器时钟(设置PSC)​:

  2. 写入TIMx_ARR和TIMx_CCRx​:

  3. 使能中断/DMA请求:
    · CCxIE位​(中断使能):置1时,匹配事件触发中断。
    · CCxDE位​(DMA使能):置1时,匹配事件触发DMA请求。​

  4. 选择输出模式(翻转模式)​​:
    · OCxM=011​:选择翻转模式(匹配时翻转输出电平)。
    · OCxPE=0​:禁用预装载寄存器(直接写入TIMx_CCRx生效)。
    · CCxP=0​:输出极性为不反相(OCxREF与OCx引脚电平一致)。
    · CCxE=1​:使能输出引脚。

  5. 启动计数器​:
    TIMx_CR1.CEN 置1,启动计数器。

        

1.5.3 PWM输出模式

1. PWM输出模式说明:

        PWM模式通过定时器的 ​自动重载寄存器(TIMx_ARR)​​ 和 ​捕获/比较寄存器(TIMx_CCRx)​​ 生成频率和占空比可调的脉冲信号。
        

2. 具体流程:

  1. 选择PWM模式(模式1或模式2)
    TIMx_CCMRx 寄存器的 ​OCxM[2:0]位​ 写入:
    · ​PWM模式1​:110(有效电平在计数器 < CCRx 时保持,否则无效)。
    · PWM模式2​:111(有效电平在计数器 > CCRx 时保持,否则无效)。

  2. 使能预装载寄存器
    · 
    使能捕获/比较预装载(TIMx_CCRx):TIMx_CCMRx.OCxPE = 1。
    · 使能自动重载预装载(TIMx_ARR):TIMx_CR1.ARPE = 1。

  3. 初始化寄存器(生成更新事件)
    · ​TIMx_EGR
    寄存器的 ​UG位​ 写入 1,手动生成更新事件。

  4. 配置输出极性
    · 
    TIMx_CCER 寄存器的 ​CCxP位​ 写入:0:高电平有效;1:低电平有效

  5. 使能输出引脚
    · TIMx_CCER 寄存器的 ​CCxE位​ 写入 1,使能OCx引脚输出。

  6. 设置自动重载值(ARR)和比较值(CCRx)
    · 
    TIMx_ARR、 TIMx_CCRx

  7. 启动计数器
    · 
    TIMx_CR1.​CEN写入 1,启动计数器。

  8. PWM信号生成逻辑
    · PWM.CMS 中心对齐模式选择
    · PWM.DIR 计算器方向(PWM.CMS[1:0] - 00

        CCIF是捕获/比较中断标志位

        

        
        

3. 注意:

        

1.6 定时器的外部触发同步

TIMx 定时器以下列模式与外部触发实现同步:复位模式、门控模式和触发模式。

1.6.1 从模式-复位模式SMS=100

        复位模式(Reset Mode)是STM32定时器的一种从模式,​通过外部信号(如TI1上升沿)复位计数器(TIMx_CNT)​,并可选生成更新事件(UEV)以刷新预装载寄存器。

  • 外部触发复位​:当检测到指定触发信号(如TI1上升沿)时,立即复位计数器(TIMx_CNT=0)。
  • 更新事件(UEV)生成​:若 TIMx_CR1.URS=0,复位时会触发UEV事件,更新预装载寄存器(TIMx_ARR和TIMx_CCRx)。
  • 中断/DMA触发​:复位事件可触发中断或DMA请求,用于同步其他操作。

        

1.6.2 从模式-门控模式SMS=101

        门控模式是一种通过 ​外部输入信号电平(如TI1)控制计数器启停​ 的定时器操作模式,适用于需要根据外部设备状态动态控制计数的场景(如启动/暂停测量、外部同步控制等)。

  • 电平触发启停​:根据外部信号(如TI1)的电平高低,控制计数器的运行(低电平启动计数,高电平停止计数)。
  • 中断触发​:计数器启动或停止时,TIF 标志(TIMx_SR 寄存器)置1,可触发中断或DMA请求。
  • 同步延迟处理​:输入信号(TI1)需经过同步电路,避免亚稳态影响计数精度。

        

1.6.3 从模式-触发模式SMS=110

  • 外部触发启动计数器​:当检测到指定输入信号(例如TI2上升沿)时,启动计数器根据内部时钟开始递增。
  • 中断标志置位​:触发事件发生时,TIF 标志(TIMx_SR 寄存器)置1,可用于中断或DMA通知。
  • 同步延迟处理​:外部输入信号(TI2)需经过同步电路,导致触发信号与实际计数器启动之间存在1-2个时钟周期的延迟。

        

1.6.4 从模式-外部时钟模式 2 +触发模式SMS=110

        外部时钟模式2(ETR作为时钟源)​​ 和 ​触发模式(TI11上升沿启动计数器)​,实现由外部触发信号控制计数器在外部时钟驱动下精准计数。

  • 外部时钟源​:ETR引脚作为计数器的时钟源(每个上升沿触发计数)。
  • 触发启动​:TI11的上升沿作为触发信号,启动计数器(CEN=1)。
  • 同步延迟处理​:ETR信号需通过同步电路,导致计数器实际递增延迟1-2个时钟周期。

        

1.7 定时器同步

​        定时器同步​ 允许通过主从模式配置,将多个定时器级联或协同工作,实现复杂的时序控制、频率扩展及多外设同步。

通用定时器内部连接表和定时器同步内部结构连接图
        
        

        

1.7.1 一个定时器用作另一个定时器的预分频器(外部时钟模式)

        TIM1配置为主定时器TIM2配置为从定时器,从而实现 ​TIM1作为TIM2的预分频器。即利用 ​TIM1的更新事件(UEV)​​ 作为 ​TIM2的外部时钟源,使TIM2的计数速率由TIM1的溢出频率控制。​

  • TIM1​:作为预分频器,通过ARR值设定触发周期。
  • TIM2​:在TIM1的每次溢出时递增,扩展整体计数范围或降低时钟频率。

配置流程:

  1. 配置TIM1为主定时器
    · 
    设置主模式(MMS=010)​:TIM1_CR2 寄存器的 ​MMS[2:0]位​ 写入 010,选择 ​更新事件(UEV)​​ 作为触发输出(TRGO)。
    · 设定TIM1的周期(ARR值)
    · 使能TIM1计数器:TIM1_CR1 寄存器的 ​CEN位​ 写入 1,启动TIM1计数。

  2. 配置TIM2为从定时器
    · 选择触发源(TS=000):TIM2_SMCR 寄存器的 ​TS[2:0]位​ 写入 000,选择 ​内部触发源0(ITR0)​,即TIM1的TRGO信号。
    · 设置外部时钟模式(SMS=111)​:TIM2_SMCR 寄存器的 ​SMS[2:0]位​ 写入 111,选择 ​外部时钟模式1
    · 使能TIM2计数器:TIM2_CR1 寄存器的 ​CEN位​ 写入 1,启动TIM2计数。

1.7.2 使一个定时器使能另一个定时器(门控模式,OC1REF为触发源)

1. 功能介绍:

通过 ​定时器1的OC1REF信号​ 作为门控信号,控制 ​定时器2的计数启停

  • OC1REF高电平​:定时器2根据分频后的时钟计数。
  • OC1REF低电平​:定时器2停止计数,保持当前值。
  • 应用场景​:测量外部信号高电平持续时间、节能模式下的间歇计数。

2. 配置流程:

1.  定时器1配置(主模式,生成OC1REF波形)​

  1. 主模式设置:TIM1_CR2.MMS[2:0]=100。将定时器1的 ​OC1REF信号​ 作为触发输出(TRGO),用于控制定时器2。

  2. 输出比较配置(PWM模式):​TIM1_CCMR1.OC1M[2:0]=110(PWM模式1)。

    TIM1_CCR1=0x80:占空比50%(高电平占128个时钟)。
    TIM1_ARR=0xFF:定义PWM周期为256个时钟。
  3. 时钟分频:​TIM1_PSC=2(3分频,实际时钟频率为 f_CK_CNT=f_CK_INT/3)。

  4. 启动定时器1:​TIM1_CR1.CEN=1

2. 定时器2配置(从模式,门控控制)​

  1. 触发源选择:TIM2_SMCR.TS[2:0]=000(选择 ​ITR0,即TIM1的TRGO信号)。

  2. 门控模式使能:TIM2_SMCR.SMS[2:0]=101。定时器2的计数器仅在OC1REF高电平时递增。

  3. 时钟分频与启动

    • 预分频器​:TIM2_PSC=2(3分频)。

    • 启动定时器2​:TIM2_CR1.CEN=1(实际计数受OC1REF电平控制)。

3. 初始化注意事项

  • 计数器未初始化​:

    • 若未复位,定时器2从当前值开始计数(示例中从0x3045开始)。

  • 强制复位方法​:

    • 写入 TIMx_EGR.UG=1,复位计数器(如启动前写入 TIM2_CNT=0)。

        

        

1.7.3 使一个定时器使能另一个定时器(门控模式,CNT_EN为触发源)

1. 功能介绍:

通过 ​定时器1的使能信号(CEN)​​ 控制 ​定时器2的启停,实现主从定时器的同步。

  • 主定时器1启动(CEN=1)​​:定时器2开始计数。
  • 主定时器1停止(CEN=0)​​:定时器2停止计数。
  • 应用场景​:多设备同步启停、精确控制计数窗口。

2. 配置流程:

        

1.7.4 使用一个定时器启动另一个定时器(触发模式)

        利用定时器1的更新事件(UEV)作为触发信号,自动启动 ​定时器2的计数器(CEN=1)​,并控制其计数周期。
        ◦ ​主模式(TIM1)​​:生成更新事件作为触发信号(TRGO)。
        ◦ ​从模式(TIM2)​​:配置为触发模式(Trigger Mode),收到触发信号后自动启动计数。
        和1.7.3相比,需要更改的是TIM2_SMCR 寄存器的 ​SMS[2:0]位​ 写入 110,选择​触发模式

        

2. 基于HAL库通用定时器实践

2.0 通用定时器寄存器与相关函数

2.0.1 通用定时器寄存器-寄存器基地址

        

2.0.2 通用定时器寄存器-寄存器

        
        

2.1 RGB LED灯(三路PWM波)

2.1.1 RGB LED灯工作原理

        LED RGB 140C05 通过PWM 信号​调节红(R)、绿(G)、蓝(B)三个通道的亮度,实现颜色混合。(使用PWM2 :CNT小于CCRx,为无效电平(设置高电平为有效电平))
        

2.1.2 CubeMX配置通用定时器外设

2.1.3 通用定时器外设初始化流程

2.1.4 RGB_LED实践代码


2.1.5 RGB_LED实践效果

2.2 输入捕获变化的高电平

2.2.1 CubeMX配置通用定时器外设

        

2.2.2 通用定时器外设初始化流程

        

        

2.2.3 输入捕获实践代码

        在正点原子输入捕获实验进行修改

2.2.4 输入捕获实践效果

        

2.3 主从定时器移相控制

2.3.1 CubeMX配置通用定时器外设(TIM3-TRGO触发TIM9)

        
        

2.3.2 通用定时器外设初始化流程

        

        
        

2.3.3 输入捕获实践代码

        

2.3.4 输入捕获实践效果

通过调整TIM3-CH1的ARR即可实现任意移相。

        

3. 本文的工程文件下载链接

工程Github下载链接:https://github.com/chipdynkid/MCU-DL-STM32
(国内)工程Gitcode下载链接https://gitcode.com/chipdynkid/MCU-DL-STM32

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

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

相关文章

Java学习手册:TCP 协议基础

一、TCP 协议概述 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;它在 IP 协议的基础上提供了可靠的 数据传输服务。TCP 通过三次握手建立连接&#xff0c;通过四次挥手…

删除排序数组中的重复项--LeetCode

题目 给你一个非严格递增排列的数组 nums &#xff0c;请你原地删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &#xff0c…

【Elasticsearch】入门篇

Elasticsearch 入门 前言 官方地址&#xff1a;Elastic — 搜索 AI 公司 | Elastic ES 下载地址&#xff1a;Past Releases of Elastic Stack Software | Elastic 文档&#xff1a;什么是 Elasticsearch&#xff1f;|Elasticsearch 指南 简介 Elasticsearch 是一个分布式、…

2024新版仿蓝奏云网盘源码,已修复已知BUG,样式风格美化,可正常运营生产

说起网盘源码&#xff0c;网络上出现的也很多&#xff0c;不过可真正正能够用于运营的少之又少。今天将的蓝奏云网盘源码&#xff0c;其实网络上也有&#xff0c;不过是残缺版&#xff0c;bug很多。我今天分享的仿蓝奏云模板是经过长时间测试修复后的源码&#xff0c;源码实测可…

机器人结构认知与安装

机器人结构认知与安装 1. ES机器人系统结构与硬件组成 核心组件&#xff1a; OPPO ES5机器人系统由机器人本体、控制手柄、48V电源和OPPO Studio终端构成。一体化底座&#xff1a;包含控制主板、安全接口板、监测保护电路单元&#xff0c;支持外接急停开关&#xff0c;采用光耦…

sass 变量

基本使用 如果分配给变量的值后面添加了 !default 标志 &#xff0c;这意味着该变量如果已经赋值&#xff0c;那么它不会被重新赋值&#xff0c;但是&#xff0c;如果它尚未赋值&#xff0c;那么它会被赋予新的给定值。 如果在此之前变量已经赋值&#xff0c;那就不使用默认值…

python自动化测试1——鼠标移动偏移与移动偏移时间

python对自动化测试运维提供了一个简易的库—pyautogui&#xff0c;我们可以借助这个库进行开发。 import pyautogui as pp.moveTo(100,100,3) 这里将鼠标光标移动到100&#xff0c;100处&#xff0c;并且用时3秒移动 鼠标移动是以固定坐标为单位&#xff0c;鼠标偏移则是在…

LX4-数据手册相关

数据手册相关 一 如何获取数据手册 ST官网&#xff1a;www.st.com 中文社区网&#xff1a; https://www.stmcu.com.cn/Designresource/list/STM32F1/document/datasheet 淘宝的商品详情页 二 如何阅读数据手册 芯片手册 定义&#xff1a;由芯片制造商提供&#xff0c;详细…

如何使用 uv 构建 Python 包并本地安装

本文将逐步指导你创建一个简单的 Python 包&#xff0c;并将其本地安装到机器或云环境中。完成本教程后&#xff0c;你将拥有一个可复用的 Python 库&#xff0c;可直接通过 pip 安装或在项目中导入使用。 步骤详解 Step 0: 选择构建工具 - 使用 uv 推荐理由&#xff1a;uv 是…

Linux之安装配置Nginx

Linux系统下安装配置Nginx的详细步骤如下&#xff1a; 一、准备工作 系统环境&#xff1a;确保Linux系统已安装&#xff0c;并且具有网络连接&#xff08;以便在线安装依赖或下载Nginx&#xff09;。 安装依赖&#xff1a;Nginx依赖于一些开发库和工具&#xff0c;如gcc、pcr…

计算机视觉cv入门之答题卡自动批阅

前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识&#xff0c;这里我们以答题卡自动批阅这一案例来实操一下。 大致思路 答题卡自动批阅的大致流程可以分为这五步&#xff1a;图像预处理-寻找考试信息区域与涂卡区域-考生信息区域OCR识别-涂卡区域填涂答案判断…

语音合成之一TTS技术发展史综述

TTS技术发展史综述 引言TTS技术的起源与早期探索基于规则的TTS系统&#xff1a;原理与发展共振峰合成技术&#xff1a;作用与影响拼接合成技术&#xff1a;发展与应用统计参数语音合成&#xff1a;以隐马尔可夫模型&#xff08;HMM&#xff09;为例深度学习驱动的TTS&#xff1…

目标检测中的损失函数(一) | IoU GIoU DIoU CIoU EIoU Focal-EIoU

&#x1f680;该系列将会持续整理和更新BBR相关的问题&#xff0c;如有错误和不足恳请大家指正&#xff0c;欢迎讨论&#xff01;&#xff01;&#xff01; &#x1f4e6;目标检测的损失函数一般包含三个部分&#xff0c;分别是边界框损失也可称为定位损失、置信度损失和分类损…

结构型模式:适配器模式

什么是适配器模式&#xff1f; 适配器模式&#xff08;Adapter Pattern&#xff09;是一种常用的结构型设计模式&#xff0c;它的主要作用是将一个类的接口转换成客户端期望的另一个接口。就像现实生活中的各种转接头一样&#xff0c;适配器模式使得原本因接口不兼容而无法一起…

AI Agent认知框架(ReAct、函数调用、计划与执行、自问自答、批判修正、思维链、思维树详解和对比,最后表格整理总结

以下是主流AI Agent认知框架的详细说明、对比及表格总结&#xff1a; 1. 各认知框架详解 (1) ReAct (Reasoning Action) 定义&#xff1a;结合推理&#xff08;Reasoning&#xff09;和行动&#xff08;Action&#xff09;的循环过程。核心机制&#xff1a; 模型先推理&…

特征存储的好处:特征存储在机器学习开发中的优势

随着企业寻求提升机器学习生产力和运营能力 (MLOps),特征存储 (Feature Store) 的普及度正在迅速提升。随着 MLOps 技术的进步,特征存储正成为机器学习基础设施的重要组成部分,帮助企业提升模型的性能和解释能力,并加速新模型与生产环境的集成。这些存储充当集中式存储库,…

SPRING-AI 官方事例

springAI 关于最近看了很多SpringAi&#xff0c;阅读很多代码都感觉特别陌生 SpringAI依赖的springBoot版本都是3.3以上, 以及很多SpringAi都是依赖JDK版本最低17, 并且出现了很多新关键字例如 var,record 等写法, 烟花缭乱得lambda 表达式&#xff0c; 到处都是使用build 构…

Visual Studio Code 使用tab键往左和往右缩进内容

使用VSCode写东西&#xff0c;经常遇到多行内容同时缩进的情况&#xff0c;今天写文档的时候就碰到&#xff0c;记录下来&#xff1a; 往右缩进 选中多行内容&#xff0c;点tab键&#xff0c;会整体往右缩进&#xff1a; 往左缩进 选中多行内容&#xff0c;按shifttab&am…

机器学习(7)——K均值聚类

文章目录 1. K均值&#xff08;K-means&#xff09;聚类是什么算法&#xff1f;2. 核心思想2. 数学目标3. 算法步骤3.1. 选择K个初始质心&#xff1a;3.2.迭代优化3.3. 重复步骤2和步骤3&#xff1a; 4. 关键参数5. 优缺点6. 改进变种7. K值选择方法8. Python示例9. 应用场景10…

爬虫案例-爬取某企数据

文章目录 1、准备要爬取企业名称数据表2、爬取代码3、查看效果 1、准备要爬取企业名称数据表 企业名称绍兴市袍江王新国家庭农场绍兴市郑杜粮油专业合作社绍兴市越城区兴华家庭农场绍兴市越城区锐意家庭农场绍兴市越城区青甸畈家庭农场绍兴市袍江王新国家庭农场绍兴市袍江月明…