STM32F103 ——TIMx

article/2025/10/5 7:51:05

TIMx基础知识

  • 简介
  • 通用定时器TIM2~TIM5
    • 计数器(TIMx_CNT)
      • 计数器的三种工作模式——向上,向下,双向计数
    • 四通道CCR1~4,两模式——输入、输出
      • 输出/比较模式
        • 相关名词
        • 配置步骤
        • 触发输出信号TRGO
        • 通道输出模式功能1——PWM波输出(OCxM=110/111)

简介

在stm32f103一共有8个定时器,其中两个高级定时器TIM1、TIM8,四个通用定时器TIM2~TIM5,两个基本定时器TIM6、TIM7。
其中高级定时器功能最多(参考手册中给了共21条功能描述),通用定时器次子(16条功能描述),基本定时器功能最少(4条功能描述,只用来进行最基本的计数器工作)。
在使用时根据需求选用对应的定时器。按需选择


通用定时器TIM2~TIM5

通用定时器功能丰富,总结一下就是——一计数器,四通道,两模式+其他功能


  • 影子寄存器(ARR、PSC、CCRx),统称存有装载值的寄存器。待更新事件UEV产生后会被更新
  • 计时器时钟CK_CNT等于输入时钟CK_INT\预分频系数。通用定时器全挂载在APB1上,默认输入时钟CK_INT=36MHZ*2。 若相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍。

计数器(TIMx_CNT)

计数器最基本的功能

stm32中定时器的定时功能是由计数器为基础实现的。在使能定时器(TIMx_CR1->0x01,控制器寄存器1第0位置1)后,计数器便开始按照一个时钟频率(分频后的时钟CK_CNT)减或加1的方式进行自动的计数,直到减至零或加至预先设置的值(TIM_ARR的值)时。此时若设置允许更新事件产生(TIMx_CR1->UDIS->0),定时器产生一个更新事件(TIMx_SR->UIF->1)。通过捕获更新事件实现基本定时。

在设置TIMx_ARR(装载器)的值时,若TIMx_CR1寄存器中的自动装载预装载使能位(ARPE)置1,TIMx_ARR先被装入缓存器,等待更新事件UEV后生效;若ARPE置0,设置ARR寄存器后直接生效。

计数器的三种工作模式——向上,向下,双向计数

向上
计数器从0计数到装载器(TIMx_ARR)的值,溢出后产生更新事件UEV。若不是单脉冲模式,将计数器清零,重新开始新一轮计数。

ARR->0x36,时钟预分频系数为1参考手册

向下
在向下模式中,计数器从自动装入的值(TIMx_ARR计数器的值)开始向下计数到0,然后从自动装入的值重新开始并且产生一个计数器向下溢出事件。

ARR->0x36,预分频系数为1参考手册

双向
计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;然后再从0开始重新计数。

ARR->0x06,预分频1参考手册


//keil5配置定时器TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);TIM_TimeBaseStructure.TIM_Period = arr;		//配置ARR寄存器TIM_TimeBaseStructure.TIM_Prescaler = psc;		//预分频系数TIM_TimeBaseStructure.TIM_ClockDivision = 0;		//定义在定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;		//向上计数模式TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);		//寄存器配置TIM_Cmd(TIM2,ENABLE);		//使能定时器

四通道CCR1~4,两模式——输入、输出

通用定时器有四个通道,每个通道可以配置为输入输出两种模式。可以用于PWM输出,测量输入方波频率,等。
四个通道功能的实现需要基于计数器的,故对通道进行配置前需要先对计数器进行配置

输出/比较模式

相关名词

名称意义、作用
TIMx_CCMRx->OCxM定义通道输出模式
TIMx_CCMRx->OCxPE预装载使能位
OCxREF表示输出引脚电平的有效与无效状态
TIMx_CCER->CCxP输入/捕获x输出极性 (Capture/Compare 1 output polarity)
TIMx_CCER->CCxE输入/捕获x输出使能 (Capture/Compare 1 output enable)

配置步骤

输出比较模式的配置步骤:
1. 选择计数器时钟(内部,外部,预分频器)
2. 将相应的数据写入TIMx_ARR和TIMx_CCRx寄存器中
3. 如果要产生一个中断请求和/或一个DMA请求,设置CCxIE位和/或CCxDE位。
4. 选择输出模式,例如当计数器CNT与CCRx匹配时翻转OCx的输出引脚,CCRx预装载 未用,开启OCx输出且高电平有效,则必须设置OCxM=’011’、OCxPE=’0’、CCxP=’0’和
CCxE=’1’。
5. 设置TIMx_CR1寄存器的CEN位启动计数器

	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2	PWM模式2- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高//TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;//TIM_OCInitStructure.TIM_Pulse = ChannelPulse;TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器TIM_SetCompare1(TIM1,0);		//调整输出PWM波的占空比(基于计数器的arr进行调节)

  • 输出模式中,写入TIMx_CCRx中的值不断与计数器CNT的值进行比较,当两者匹配(相等时),对应OCxREF标志被改变。通过计数器的来回计数,实现引脚规律的电平输出变化和控制

TIMx_CCRx也是影子寄存器,通过TIMx_CCMRx寄存器OCxPE位进行预装载控制,预装载作用跟ARR预装载相同。若OCxPE=1使能预装载,当计数器更新事件UEV产生后写入CCRx的值被装入;不使能预装载,写入的值立即生效

  • TIMx_CCMRx寄存器中的OCxM[2:0]位用于配置输出模式,用于控制当TIMx_CCRx>TIMx_CNT时的OC1REF(有效电平值为1,无效电平值为0),其值取如下。

000:冻结。输出比较寄存器TIMx_CCR1与计数器TIMx_CNT间的比较对OC1REF不起作用;
001 :匹配时设置通道 1 为有效电平。当计数器 TIMx_CNT 的值与捕获 / 比较寄存器 1
(TIMx_CCR1)相同时,强制OC1REF为高。
010 :匹配时设置通道 1 为无效电平。当计数器 TIMx_CNT 的值与捕获 / 比较寄存器 1
(TIMx_CCR1)相同时,强制OC1REF为低。
011:翻转。当TIMx_CCR1=TIMx_CNT时,翻转OC1REF的电平。
100:强制为无效电平。强制OC1REF为低。
101:强制为有效电平。强制OC1REF为高。
110:PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
111:PWM模式2- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。

  • TIMx_CCER寄存器中的CCxP位定义输出极性
    – 置0:有效电平为高电平,输出引脚高电平;当OCxREF=1,输出高电平
    – 置1:有效电平为低电平,输出引脚低电平。当OCxREF=1,输出低电平

即根据输出模式和输出极性的配置,用以控制引脚的输出变化


触发输出信号TRGO

名称意义、作用
TIMx_CR2->MMS[2:0]选择触发输出(TRGO)
ADC_CR2->EXTSEL[2:0]选择启动规则通道组转换的外部事件
ADC_CR2->EXTTRIG规则通道的外部触发转换模式 (使能位)

  • TIMx_CR2->MMS[2:0]->100,此时OC1REF信号被用于作为触发输出(TRGO)。
TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource);		//配置对应定时器的触发输出信号,一个定时器只能选择一种作为触发输出

MMS[2:0]:主模式选择 (Master mode selection) 位6:4
这3位用于选择在主模式下送到从定时器的同步信息(TRGO)。可能的组合如下:
000:复位 – TIMx_EGR寄存器的UG位被用于作为触发输出(TRGO)。如果是触发输入产生的
复位(从模式控制器处于复位模式),则TRGO上的信号相对实际的复位会有一个延迟。
001:使能 – 计数器使能信号CNT_EN被用于作为触发输出(TRGO)。有时需要在同一时间启动
多个定时器或控制在一段时间内使能从定时器。计数器使能信号是通过CEN控制位和门控模式
下的触发输入信号的逻辑或产生。
当计数器使能信号受控于触发输入时,TRGO上会有一个延迟,除非选择了主/从模式(见
TIMx_SMCR寄存器中MSM位的描述)。
010:更新 – 更新事件被选为触发输入(TRGO)。例如,一个主定时器的时钟可以被用作一个从
定时器的预分频器。
011:比较脉冲 – 在发生一次捕获或一次比较成功时,当要设置CC1IF标志时(即使它已经为
高),触发输出送出一个正脉冲(TRGO)。
100:比较 – OC1REF信号被用于作为触发输出(TRGO)。
101:比较 – OC2REF信号被用于作为触发输出(TRGO)。
110:比较 – OC3REF信号被用于作为触发输出(TRGO)。
111:比较 – OC4REF信号被用于作为触发输出(TRGO)。


  • 触发输出信号根据自己的配置可用于控制其他外设的工作,例如:ADC(ADC1,ADC2)

ADC1和ADC2用于规则通道的外部触发配置

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	//配置adc的触发

ADC_CR2->EXTSEL[2:0]:选择启动规则通道组转换的外部事件 (External event select for regular group) 位19:17
这些位选择用于启动规则通道组转换的外部事件
ADC1和ADC2的触发配置如下
000:定时器1的CC1事件 100:定时器3的TRGO事件
001:定时器1的CC2事件 101:定时器4的CC4事件
110:EXTI线11/ TIM8_TRGO事件,仅大容量产
品具有TIM8_TRGO功能
010:定时器1的CC3事件
011:定时器2的CC2事件 111:SWSTART
ADC3的触发配置如下
000:定时器3的CC1事件 100:定时器8的TRGO事件
001:定时器2的CC3事件 101:定时器5的CC1事件
010:定时器1的CC3事件 110:定时器5的CC3事件
011:定时器8的CC1事件 111:SWSTART


  • 同时需要配置ADC_CR2->EXTTRIG使能位使能外部触发
ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

ADC_CR2->EXTTRIG:规则通道的外部触发转换模式 (External trigger conversion mode for regular channels) 位20
该位由软件设置和清除,用于开启或禁止可以启动规则通道组转换的外部触发事件。
0:不用外部事件启动转换;
1:使用外部事件启动转换


通道输出模式功能1——PWM波输出(OCxM=110/111)

PWM基于计数器实现。事先在TIMx_CCRx(通道寄存器)中存入数值,此值会不断与计数器TIMx_CNT中的值进行比较,根据PWM模式和输出极性的配置(在TIMx_CCMRx寄存器中的OCxM位写入’110’(PWM模式1)或’111’(PWM模式2))输出对应引脚电平。

故应有CCRx和ARR中的值之比即为PWM波的占空比

OCxREF信号只能在下述条件下产生:
● 当比较的结果改变,或当输出比较模式(TIMx_CCMRx寄存器中的OCxM位)从“冻结”(无比较,OCxM=’000’)切换到某个PWM模式(OCxM=’110’或’111’)。这样在运行中可以通过软件强置PWM输出。
根据TIMx_CR1寄存器中CMS位的状态,定时器能够产生边沿对齐的PWM信号或中央对齐的PWM信号。

CMS[1:0]:选择中央对齐模式 (Center-aligned mode selection) 位6:5
00:边沿对齐模式。计数器依据方向位(DIR)向上或向下计数。
01:中央对齐模式1。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器中CCxS=00)的输出比较中断标志位,只在计数器向下计数时被设置。
10:中央对齐模式2。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器中CCxS=00)的输出比较中断标志位,只在计数器向上计数时被设置。
11:中央对齐模式3。计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器中CCxS=00)的输出比较中断标志位,在计数器向上和向下计数时均被设置。
注:在计数器开启时(CEN=1),不允许从边沿对齐模式转换到中央对齐模式

即PWM波的输出也有向上、向下、中央对齐三种模式,而此三种模式是基于计数器的三种模式实现的


配置PWM输出模式:

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2	PWM模式2- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高//TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;//TIM_OCInitStructure.TIM_Pulse = ChannelPulse;TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器TIM_SetCompare1(TIM1,0);		//调整输出PWM波的占空比(基于计数器的arr进行调节)


http://chatgpt.dhexx.cn/article/ZQgcO4Nk.shtml

相关文章

从公式剖析stm32中PWM的使用

目录 一、PWM简介 1.介绍&#xff1a; 2.主要参数 二、stm32PWM产生方式 1&#xff0c;普通IO口 2&#xff0c;PWM口 三、定时器复习 四、公式推导及结论 五、stm32PWM具体的运用 1.电机 2.舵机 一、PWM简介 1.介绍 脉冲调制技术&#xff08;PWM Pulse Width Mo…

STM32 PWM控制电机寄存器配置

脉冲宽度调制PWM&#xff0c;实现对电机速度的控制。 1、PWM输出原理 假定定时器工作在向上计数 PWM模式&#xff0c;CNT为当前计数值&#xff0c;CCRx为捕获/比较寄存器CCRx的值(预装载值)。当 CNT<CCRx 时&#xff0c;GPIO口 输出低电平0&#xff0c;当 CNT>CCRx 时&…

【嵌入式基础】定时器PWM练习

本次实验是在前面实验的基础上加入定时器和PWM脉冲宽度调制&#xff0c;之前的延时功能都是通过delay函数实现的。而本次作业通过定时器Timer方式实现时间的精准控制&#xff0c;更有利于CPU的运行&#xff0c;再通过PWM脉冲宽度调制&#xff0c;输出波形&#xff0c;分析PWM的…

STM32—sg90编程

什么是舵机&#xff1f; 如下图所示&#xff0c;最便宜的舵机sg90&#xff0c;常用三根或者四根接线&#xff0c;黄色为PWM信号控制 用处&#xff1a;垃圾桶项目开盖用、智能小车的全比例转向、摄像头云台、机械臂等 常见的有0-90、0-180、0-360 怎么控制舵机 向黄色信号线“…

【电机控制算法】SVPWM算法的应用(基于Simulink与STM32外设场景的仿真)

文章目录 前言一、扇区判断二、各扇区基础矢量作用时间的计算1.若处于扇区I2.若处于扇区II3.若处于扇区III4.若处于扇区IV5.若处于扇区V6.若处于扇区VI7.In a word 三、STM32的外设场景1. TIMx的计数器CNT2. TIMx的输入捕获寄存器CCRx3. TIMx的两种PWM模式 四、互补输出且呈中心…

STM32-定时器中断实验

一、通用定时器基本原理 1-1 三种定时器区别 1.三种STM32定时器区别 定时器种类位数计数器模式产生DMA请求捕获/比较通道互补输出特殊应用场景高级定时器&#xff08;TIM1,TIM8&#xff09;16向上&#xff0c;向下&#xff0c;向上/下可以4有带死区控制盒紧急刹车&#xff0…

CRC校验

一、CRC原理。 CRC校验的原理非常简单&#xff0c;如下图所示。 其中&#xff0c;生成多项式是利用抽象代数的一些规则推导出来的&#xff0c;而模2加&#xff08;也就是异或&#xff09;&#xff0c;是对应于有限域的除法。 二、CRC算法。 那么在FPGA当中&#xff0c;也有好…

CRC-16

文章目录 A.1 CRC16 算法A.1.1 CRC16 算法参数设置A.1.2 LengthA.1.3 CounterA.1.4 Data IDA.1.5 CRCA.1.6 CRC16 算法示例A.1.7 CRC16 算法推荐(查表法)A.1.8 CRC16 实例(查表法) A.1 CRC16 算法 A.1.1 CRC16 算法参数设置 CRC16 算法中要求了 Counter、Data ID、CRC 等参数…

CCR

不用任何与创建线程、资源互斥有关系的API写多线程程序 这次的例子&#xff0c;是一个很简单的控制台&#xff0c;她将面对瞬间提交的百万的数据&#xff0c;而面不改色&#xff08;CPU、内存非常平稳&#xff09;&#xff0c;队列中始终只保存最新的数据&#xff0c;每次只处理…

CRC16

CRC选择 当数据帧长度在8bits-128bits范围内时&#xff0c;推荐CRC-8(CRC-8能够减少额外比特的开销&#xff0c;且有更好的性能表现) 当数据帧长度在128bits-2048bits范围内时&#xff0c;推荐CRC-12&#xff0c;CRC-16&#xff0c;CRC-CCITT(CRC-12额外比特的开销更小&#x…

stm32cubemx HAL库之定时器

定时器原理简单说明&#xff1a; 如上图所示&#xff0c;定时器存在3个寄存器&#xff0c;分别是&#xff1a; 计数器寄存器&#xff08;CNT&#xff09; 预分频器寄存器&#xff08;PSC&#xff09; 自动重载寄存器&#xff08;ARR&#xff09; 预分频寄存器的输入频率是时钟…

CRC详解

CRC-知识解析 cyclic redundancy check 写在前面的话&#xff1a; 之前在做学校项目的时候用到了CRC 原理&#xff0c;但在网上查找的过程中&#xff0c;发现讲解CRC知识的资源很多&#xff0c;但是对新手比较友好的、讲的十分清楚的又很少&#xff0c;很多博主也不求甚解&am…

CCR(Condition Code Register:条件代码寄存器)的作用

CCR是一个显示执行指令后的结果和处理器的状态的8位寄存器。根据微型计算机的不同&#xff0c;名称也会不同&#xff0c;但是所有的微型计算机都有。在大多数微型计算机的情况下&#xff0c;用户不能直接读写&#xff0c;但有些微型计算机可以读写。您可以通过执行可以测试CCR位…

STM32定时器的预装寄存器及影子寄存器PSC—ARR-CCRx

在谈预装寄存器及影子寄存器的差别前&#xff0c;不妨先对STM32定时器的时基单元做个基本了解。STM32各系列的定时器结构和框架基本是一样的&#xff0c;时基单元也一样。 下面时基单元是以STM32F3系列为参考。 时基单元中的TIMx_PSC、 TIM_ARR两个寄存器加上捕捉比较模块中TIM…

输出比较功能中的pwm以及其他功能的区分

首先我们要知道的是pwm是输出比较的子集 PWM模式下&#xff1a; ARR 决定输出频率 &#xff0c;CCR决定输出占空比 输出比较模式下&#xff1a; ARR 决定输出频率 CCRx 决定每个通道的初始相位。 一般使用输出比较都是想要去输出一个频率可变的pwm信号&#xff0c;那怎么通过…

STM32 PWM输出

STM32 PWM输出 工作过程&#xff1a; 我们假定定时器工作在向上计数PWM 模式&#xff0c;且当 CNT<CCRx 时&#xff0c;输出 0&#xff0c;当 CNT>CCRx 时输出1。那么就可以得到如上的PWM 示意图&#xff1a; 当 CNT 值小于 CCRx 的时候&#xff0c;IO 输出低电平(0)&a…

简单明了的说明STM32的PWM原理以及实现方法

申明以下都是个人理解&#xff0c;仅供参考。如果错误欢迎指教。本文不讲底层&#xff0c;根据实际使用来逆向讲解。 1.什么是pwm&#xff1f; pwm最简单的理解就是“功率”&#xff0c;调节PWM的占空比就是调节功率。 2.如何调节占空比&#xff1f; 图1 根据图1很容易看出…

CCRX寄存器

TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable);// TIMx_CCRx寄存器能够在任何时候通过软件进行更新以控制输出波形&#xff0c;条件是未使用预装载寄存器(OCxPE’0’&#xff0c;否则TIMx_CCRx影子寄存器只能在发生下一次更新事件时被更新)。这里设置为Disable 就是为了…

JavaScript权威指南 第13章 异步JavaScript

JavaScript权威指南 第13章 异步JavaScript 13章 异步JavaScript13.1 使用回调的异步编程13.1.1 定时器13.1.2 事件13.1.3 网络事件13.1.4 Node中的回调与事件 13.2 期约13.2.1 使用期约使用期约处理错误 13.2.2 期约链13.2.2 解决期约13.2.4 再谈期约和错误catch和finally方法…

javascript权威指南(第四版)

Java Script是一种功能强大的基于对象的脚本语言。Java Script程序可以直接嵌入HTML页面。与Web浏览器定义的文档对象模型(DOM)一起使用时&#xff0c;JavaScript可以创建动态HTML(DHTML)内容&#xff0c;允许用户与客户端的Web应用程序交互。 JavaScript语法以流行的程序设计语…