分享免费的编程资源和教程

网站首页 > 技术教程 正文

单片机STM32开发之自学第七天——通用定时器

goqiw 2024-09-09 06:33:15 技术教程 14 ℃ 0 评论

一、通用定时器(F1)

通用定时器:TIM2 /TIM3 /TIM4 /TIM5

主要特性:

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

2、16位预分频器(分频系数:1~65536)

3、可用于触发DAC、ADC

4、在更新事件、触发事件、输入捕获、输出比较时,会产生中断/DMA请求;4个独立通道,可用于:输入捕获、输出比较、输出PWM、单脉冲模式;使用外部信号控制定时器且可实现多个定时器互连的同步电路支持编码器和霍尔传感器电路等。

计数器模式:

1.向上计数模式

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

2.向下计数模式

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

3.中央对齐模式(向上/向下计数)

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

捕获/比较通道

每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器),包括捕获的输入部分(数字滤波、多路复用和预分频器),和输出部分(比较器和输出控制)。输入部分对相应的TIx输入信号采样,并产生一个滤波后的信号TIxF。然后,一个带极性选择的边缘检测器产生一个信号(TIxFPx),它可以作为从模式控制器的输入触发或者作为捕获控制。该信号通过预分频进入捕获寄存器(ICxPS)。

在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。

在比较模式下,预装载寄存器的内容被复制到影子寄存器中,然后影子寄存器的内容和计数器进行比较。

输入捕获模式

在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存器(TIMx_CCRx)中。当捕获事件发生时,相应的CCxIF标志(TIMx_SR寄存器)被置’1’,如果使能了中断或者DMA操作,则将产生中断或者DMA操作。如果捕获事件发生时CCxIF标志已经为高,那么重复捕获标志CCxOF(TIMx_SR寄存器)被置’1’。写CCxIF=0可清除CCxIF,或读取存储在TIMx_CCRx寄存器中的捕获数据也可清除CCxIF。写CCxOF=0可清除CCxOF。

注:设置TIMx_EGR寄存器中相应的CCxG位,可以通过软件产生输入捕获中断和/或DMA请求。

PWM输入模式

该模式是输入捕获模式的一个特例,除下列区别外,操作与输入捕获模式相同:

● 两个ICx信号被映射至同一个TIx输入。

● 这2个ICx信号为边沿有效,但是极性相反。

● 其中一个TIxFP信号被作为触发输入信号,而从模式控制器被配置成复位模式。例如,你需要测量输入到TI1上的PWM信号的长度(TIMx_CCR1寄存器)和占空比(TIMx_CCR2寄存器),具体步骤如下(取决于CK_INT的频率和预分频器的值)

● 选择TIMx_CCR1的有效输入:置TIMx_CCMR1寄存器的CC1S=01(选择TI1)。

● 选择TI1FP1的有效极性(用来捕获数据到TIMx_CCR1中和清除计数器):置CC1P=0(上升沿有效)。

● 选择TIMx_CCR2的有效输入:置TIMx_CCMR1寄存器的CC2S=10(选择TI1)。

● 选择TI1FP2的有效极性(捕获数据到TIMx_CCR2):置CC2P=1(下降沿有效)。

● 选择有效的触发输入信号:置TIMx_SMCR寄存器中的TS=101(选择TI1FP1)。

● 配置从模式控制器为复位模式:置TIMx_SMCR中的SMS=100。

● 使能捕获:置TIMx_CCER寄存器中CC1E=1且CC2E=1。

由于只有TI1FP1和TI2FP2连到了从模式控制器,所以PWM输入模式只能使用TIMx_CH1/TIMx_CH2信号。

强置输出模式

在输出模式(TIMx_CCMRx寄存器中CCxS=00)下,输出比较信号(OCxREF和相应的OCx)能够直接由软件强置为有效或无效状态,而不依赖于输出比较寄存器和计数器间的比较结果。置TIMx_CCMRx寄存器中相应的OCxM=101,即可强置输出比较信号(OCxREF/OCx)为有效状态。这样OCxREF被强置为高电平(OCxREF始终为高电平有效),同时OCx得到CCxP极性位相反的值。

输出比较模式

此项功能是用来控制一个输出波形,或者指示一段给定的的时间已经到时。

输出比较模式的配置步骤:

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位启动计数器

PWM 输出模式

脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。

PWM 边沿对齐模式

向上计数配置

当TIMx_CR1寄存器中的DIR位为低的时候执行向上计数。

向下计数的配置

当TIMx_CR1寄存器的DIR位为高时执行向下计数。

PWM 中央对齐模式

当TIMx_CR1寄存器中的CMS位不为’00’时,为中央对齐模式(所有其他的配置对OCxREF/OCx信号都有相同的作用)。根据不同的CMS位设置,比较标志可以在计数器向上计数时被置’1’、在计数器向下计数时被置’1’、或在计数器向上和向下计数时被置’1’。TIMx_CR1寄存器中的计数方向位(DIR)由硬件更新,不要用软件修改它。

使用中央对齐模式的提示:

● 进入中央对齐模式时,使用当前的向上/向下计数配置;这就意味着计数器向上还是向下计数取决于TIMx_CR1寄存器中DIR位的当前值。此外,软件不能同时修改DIR和CMS位。

● 不推荐当运行在中央对齐模式时改写计数器,因为这会产生不可预知的结果。特别地:

─ 如果写入计数器的值大于自动重加载的值(TIMx_CNT>TIMx_ARR),则方向不会被更新。例如,如果计数器正在向上计数,它就会继续向上计数。

─ 如果将0或者TIMx_ARR的值写入计数器,方向被更新,但不产生更新事件UEV。

● 使用中央对齐模式最保险的方法,就是在启动计数器之前产生一个软件更新(设置TIMx_EGR 位中的UG位),不要在计数进行过程中修改计数器的值。

单脉冲模式

单脉冲模式(OPM)是前述众多模式的一个特例。这种模式允许计数器响应一个激励,并在一个程序可控的延时之后,产生一个脉宽可程序控制的脉冲。

可以通过从模式控制器启动计数器,在输出比较模式或者PWM模式下产生波形。设置TIMx_CR1寄存器中的OPM位将选择单脉冲模式,这样可以让计数器自动地在产生下一个更新事件UEV时停止。

二、通用定时器的计数时钟源

①内部时钟(CK_INT),来自外设总线APB提供的时钟

②外部时钟模式1:外部输入引脚(TIx),来自定时器通道1或者通道2引脚的信号

③外部时钟模式2:外部触发输入(ETR),来自可以复用为TIMx_ETR的IO引脚

④内部触发输入(ITRx),用于与芯片内部其它通用/高级定时器级联

计数器时钟源寄存器设置方法(F1)

三、通用定时器PWM输出的应用

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

相关HAAL库函数

关键结构体

typedef struct 
{ 
   uint32_t OCMode; 	  /* 输出比较模式选择 */
   uint32_t Pulse; 	            /* 设置比较值 */
   uint32_t OCPolarity;       /* 设置输出比较极性 */
   uint32_t OCNPolarity;    /* 设置互补输出比较极性 */
   uint32_t OCFastMode;   /* 使能或失能输出比较快速模式 */
   uint32_t OCIdleState;     /* 空闲状态下OC1输出 */
   uint32_t OCNIdleState;  /* 空闲状态下OC1N输出 */ 
} TIM_OC_InitTypeDef;




以上是对第七天学习的了内容做了大概的总结,由于我个人选择的是STM32F1系列的开发进行学习,所总结的大部分内容仅限于F1系列使用。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表