(待分)05STM32F4通用定时器详细讲解

合集下载

05_STM32F4通用定时器详细讲解精编版

05_STM32F4通用定时器详细讲解精编版
1打开时钟,Timer3挂在APB1上,所以命令开启时钟。
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); ///使能TIM3时钟
2时钟Timer3的配置。
TIM_TimeBaseInitStructure.TIM_Period = arr;//自动重装载值
Timer3是一个16位的定时器,有四个独立通道,分别对应着PA6 PA7 PB0 PB1
主要功能是:1输入捕获——测量脉冲长度。
2输出波形——PWM输出和单脉冲输出。
Timer3有4个时钟源:
1:内部时钟(CK_INT),来自RCC的TIMxCLK
2:外部时钟模式1:外部输入TI1FP1与TI2FP2
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3
3使能中断
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许定时器3更新中断。
4打开Timer3。
TIM_Cmd(TIM3,ENABLE); //使能定时器3
3:捕获/比较选择
8TIM3捕获/比较模式寄存器2 (TIM3_CCMR2)
9TIM3捕获/比较使能寄存器(TIM3_CCER)
1:上升沿触发or下降沿触发
2:捕获/比较输出使能
10 TIM3计数器(TIM3_CNT)
11 TIM3预分频器(TIM3_PSC)
计数器时钟频率CK_CNT等于fCK_PSC/ (PSC[15:0] + 1)。
1TIM3控制寄存器1 (TIM3_CR1)
作用:1使能自动重载TIM3_ARR

STM32学习笔记(4):通用定时器基本定时功能

STM32学习笔记(4):通用定时器基本定时功能

. 地简介中一共有个定时器,其中个高级控制定时器,个普通定时器和个基本定时器,以及个看门狗定时器和个系统嘀嗒定时器.其中系统嘀嗒定时器是前文中所描述地,看门狗定时器以后再详细研究.今天主要是研究剩下地个定时器.个人收集整理勿做商业用途基本定时器,其时钟由输出产生.由于地功能太复杂了,所以只能一点一点地学习.因此今天就从最简单地开始学习起,也就是普通定时器地定时功能.个人收集整理勿做商业用途. 普通定时器时钟来源计数器时钟可以由下列时钟源提供:·内部时钟()·外部时钟模式:外部输入脚()·外部时钟模式:外部触发输入()·内部触发输入():使用一个定时器作为另一个定时器地预分频器,如可以配置一个定时器而作为另一个定时器地预分频器.个人收集整理勿做商业用途由于今天地学习是最基本地定时功能,所以采用内部时钟.地时钟不是直接来自于,而是来自于输入为地一个倍频器.这个倍频器地作用是:当地预分频系数为时,这个倍频器不起作用,定时器地时钟频率等于地频率;当地预分频系数为其他数值时(即预分频系数为、、或),这个倍频器起作用,定时器地时钟频率等于地频率地倍.地分频在地学习笔记中有详细描述.通过倍频器给定时器时钟地好处是:不但要给提供时钟,还要为其他地外设提供时钟;设置这个倍频器可以保证在其他外设使用较低时钟频率时,仍然可以得到较高地时钟频率.个人收集整理勿做商业用途计数器模式可以由向上计数、向下计数、向上向下双向计数.向上计数模式中,计数器从计数到自动加载值(计数器内容),然后重新从开始计数并且产生一个计数器溢出事件.在向下模式中,计数器从自动装入地值()开始向下计数到,然后从自动装入地值重新开始,并产生一个计数器向下溢出事件.而中央对齐模式(向上向下计数)是计数器从开始计数到自动装入地值,产生一个计数器溢出事件,然后向下计数到并且产生一个计数器溢出事件;然后再从开始重新计数.个人收集整理勿做商业用途编程步骤. 配置系统时钟;. 配置;. 配置;. 配置;其中,前项在前面地笔记中已经给出,在此就不再赘述了.第项配置有如下配置:()利用()函数将设置为默认缺省值;()()选择来设置内部时钟源;()来设置预分频系数;()来设置时钟分割;()来设置计数器模式;()来设置自动装入地值()()来设置是否使用预装载缓冲器()()来开启地中断其中()()步骤中地参数由结构体给出.步骤()中地预分频系数用来确定所使用地时钟频率,具体计算方法为:().是内部时钟源地频率,是根据中所描述地地倍频器送出地时钟,是用户设定地预分频系数,其值范围是从– .个人收集整理勿做商业用途步骤()中地时钟分割定义地是在定时器时钟频率()与数字滤波器()使用地采样频率之间地分频比例.地参数如下数字滤波器()是为了将进来地分频后地信号滤波,保证通过信号频率不超过某个限定.步骤()中需要禁止使用预装载缓冲器.当预装载缓冲器被禁止时,写入自动装入地值()地数值会直接传送到对应地影子寄存器;如果使能预加载寄存器,则写入地数值会在更新事件时,才会从预加载寄存器传送到对应地影子寄存器.个人收集整理勿做商业用途中,有地逻辑寄存器在物理上对应个寄存器,一个是程序员可以写入或读出地寄存器,称为(预装载寄存器),另一个是程序员看不见地、但在操作中真正起作用地寄存器,称为(影子寄存器);设计和地好处是,所有真正需要起作用地寄存器( )可以在同一个时间(发生更新事件时)被更新为所对应地地内容,这样可以保证多个通道地操作能够准确地同步.如果没有,或者和是直通地,即软件更新时,同时更新了,因为软件不可能在一个相同地时刻同时更新多个寄存器,结果造成多个通道地时序不能同步,如果再加上其它因素(例如中断),多个通道地时序关系有可能是不可预知地.个人收集整理勿做商业用途. 程序源代码本例实现地是通过地定时功能,使得灯按照地时间间隔来闪烁""();();();();(){();();();();开启定时器();();}(){定义错误状态变量;将寄存器重新设置为默认值();打开外部高速时钟晶振();等待外部高速时钟晶振工作();( ){设置时钟()为系统时钟();设置高速时钟()为时钟();设置低速时钟()为地分频();设置代码延时();使能预取指缓存();个人收集整理勿做商业用途设置时钟,为地倍频*(, );个人收集整理勿做商业用途使能();等待准备就绪(() );个人收集整理勿做商业用途设置为系统时钟源();判断是否是系统时钟(() );}允许地时钟();个人收集整理勿做商业用途允许地时钟();个人收集整理勿做商业用途}(){;重新将设置为缺省值();采用内部时钟给提供时钟源();预分频系数为,这样计数器时钟为;设置时钟分割;个人收集整理勿做商业用途设置计数器模式为向上计数模式;个人收集整理勿做商业用途设置计数溢出大小,每计个数就产生一个更新事件;将配置应用到中();清除溢出中断标志(, );禁止预装载缓冲器(, );开启地中断();}(){;选择中断分组();选择地中断通道; 个人收集整理勿做商业用途抢占式中断优先级设置为;个人收集整理勿做商业用途响应式中断优先级设置为;使能中断;();}(){;; 选择引脚个人收集整理勿做商业用途; 输出频率最大个人收集整理勿做商业用途; 带上拉电阻输出个人收集整理勿做商业用途();}在中,我们找到函数(),并向其中添加代码(){;检测是否发生溢出更新事件((, ) ){清除地中断待处理位( , );将管脚输出数值写入();个人收集整理勿做商业用途( ){();}{();}}}。

STM32学习笔记4通用定时器基本定时功能

STM32学习笔记4通用定时器基本定时功能

STM32学习笔记(4):通用定时器基本定时功能1.STM32的Timer简介STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。

其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。

今天主要是研究剩下的8个定时器。

其中TIM1和TIM8是能够产生3对PWM互补输出的高级定时器,常用于三相电机的驱动,时钟由APB2的输出产生。

TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产生。

由于STM32的TIMER功能太复杂了,所以只能一点一点的学习。

因此今天就从最简单的开始学习起,也就是TIM2-TIM5普通定时器的定时功能。

2.普通定时器TIM2-TIM52.1时钟来源计数器时钟可以由下列时钟源提供:·内部时钟(CK_INT)(TIx):外部输入脚1外部时钟模式·.·外部时钟模式2:外部触发输入(ETR)·内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。

由于今天的学习是最基本的定时功能,所以采用内部时钟。

TIM2-TIM5的时钟不是直接来自于APB1,而是来自于输入为APB1的一个倍频器。

这个倍频器的作用是:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其他数值时(即预分频系数为2、4、8或16),这个倍频器起作用,定时器的时钟频率等于APB1的频率的2倍。

APB1的分频在STM32_SYSTICK的学习笔记中有详细描述。

通过倍频器给定时器时钟的好处是:APB1不但要给TIM2-TIM5提供时钟,还要为其他的外设提供时钟;设置这个倍频器可以保证在其他外设使用较低时钟频率时,TIM2-TIM5仍然可以得到较高的时钟频率。

STM32通用定时器库函数设置心得——新手必看

STM32通用定时器库函数设置心得——新手必看

STM32通用定时器库函数设置心得——新手必看STM32通用定时器是STM32微控制器系列中很重要的一个组件,它具有多种功能,包括定时器、PWM生成器、输入捕获和输出比较等。

在STM32中,定时器的使用非常广泛,常用于各种定时操作、计数操作和脉冲宽度调制等应用。

本文将对STM32通用定时器的库函数进行介绍,帮助新手快速掌握并应用。

首先,在使用STM32通用定时器之前,需要了解一些基本概念。

STM32通用定时器包括TIM2、TIM3、TIM4和TIM5等,它们具有相似的特性和功能,可以根据实际需求选择使用。

在使用定时器之前,需要开启其时钟,并进行相应的初始化设置。

1.定时器时钟的开启和初始化开启定时器的时钟,需要在RCC时钟控制寄存器中设置相应的位。

具体来说,需要设置APB1或APB2总线上的定时器时钟使能位,开启相应定时器的时钟。

初始化定时器,需要对定时器的模式、预分频值、计数模式、自动重装载寄存器和定时器中断进行设置。

其中,预分频值决定了定时器的时钟频率,计数模式决定了定时器的工作方式,自动重装载寄存器决定了定时器的溢出时间。

2.定时器中断的设置定时器中断用于定时触发一些操作,可以是定时执行一些函数、改变一些变量或者触发其中一种事件。

定时器的中断分为溢出中断和比较中断两种,可以根据实际需求选择使用。

在使用定时器中断之前,需要设置定时器的中断使能位,并在中断处理函数中编写相应的中断处理代码。

在中断处理函数中,可以根据具体需求进行相应的操作,比如改变一些标志位、执行一些函数或者发送一些数据。

3.定时器的计数和计时定时器的计数和计时是定时器的核心功能,它决定了定时器的工作方式和定时器值的变化规律。

定时器的计数可以根据实际需要进行设置,可以是向上计数、向下计数或者上下计数。

定时器的计时功能需要根据预分频值和自动重装载寄存器进行计算,以确定定时器的溢出时间和定时时间。

通过改变预分频值和自动重装载寄存器,可以实现不同的定时功能。

STMF通用定时器详细讲解

STMF通用定时器详细讲解

S T M F通用定时器详细讲解Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#STM32F4系列共有14个定时器,功能很强大。

14个定时器分别为:2个高级定时器:Timer1和Timer810个通用定时器:Timer2~timer5 和 timer9~timer142个基本定时器: timer6和timer7本篇欲以通用定时器timer3为例,详细介绍定时器的各个方面,并对其PWM功能做彻底的探讨。

Timer3是一个16位的定时器,有四个独立通道,分别对应着PA6 PA7 PB0 PB1主要功能是:1输入捕获——测量脉冲长度。

2 输出波形——PWM输出和单脉冲输出。

Timer3有4个时钟源:1:内部时钟(CK_INT),来自RCC的TIMxCLK2:外部时钟模式1:外部输入TI1FP1与TI2FP23:外部时钟模式2:外部触发输入TIMx_ETR,仅适用于TIM2、TIM3、TIM4,TIM3,对应着PD2引脚4:内部触发输入:一个定时器触发另一个定时器。

时钟源可以通过TIMx_SMCR相关位进行设置。

这里我们使用内部时钟。

定时器挂在高速外设时钟APB1或低速外设时钟APB2上,时钟不超过内部高速时钟HCLK ,故当APBx_Prescaler 不为1时,定时器时钟为其2倍,当为1时,为了不超过HCLK ,定时器时钟等于HCLK 。

例如:我们一般配置系统时钟SYSCLK 为168MHz ,内部高速时钟 AHB=168Mhz ,APB1欲分频为4,(因为APB1最高时钟为42Mhz ),那么挂在APB1总线上的timer3时钟为84Mhz 。

《STM32F4xx 中文参考手册》的424~443页列出与通用定时器相关的寄存器一共20个,以下列出与Timer3相关的寄存器及重要寄存器的简单介绍。

1 TIM3 控制寄存器 1 (TIM3_CR1)作用:1使能自动重载TIM3_ARR2定时器的计数器递增或递减计数。

STM32通用定时器的基本特性、操作模式及相关应用介绍

STM32通用定时器的基本特性、操作模式及相关应用介绍

STM32 通用定时器的基本特性、操作模式及相关应
用介绍
众所周知,STM32 的定时器功能非常庞大复杂,应用也非常普遍。

目前STM32 家族已有10 条产品线,其中都内置多个定时器外设。

尽管STM32 各系列的定时器无论从数目上还是特性上可能略有差异,但它们整体上还是具有一些公共特性与相同的操作模式。

ST 官方有一篇针对STM32 通用定时器的应用笔记,编号为AN4776,内容较为详尽丰富。

该笔记主要对STM32 通用定时器的基本特性、操作模式及相关应用做了细致清晰的描述。

既有对基本概念的详细讲解,又有相关实际应用的原理介绍,同时还配有相关应用的参考工程代码。

该笔记值得一读。

这里简单介绍下AN4776 应用笔记的基本内容框架。

该笔记主要分两部分。

第一部分主要是对STM32 定时器的基本组成及特性的描述和讲解。

第二部分对STM32 定时器的一些特定应用做了专门描述,包括基本工作原理和相关应用代码的介绍。

STM32定时器定时时间配置总结

STM32定时器定时时间配置总结

STM32定时器定时时间配置总结STM32系列微控制器内置了多个定时器模块,它们可以用于各种定时功能,如延时、周期性触发、脉冲计数等。

在使用STM32定时器之前,我们需要进行定时时间配置,本文将总结一下STM32定时器定时时间配置的相关知识,包括定时器工作模式、定时器时钟源选择、定时器时钟分频、定时器计数器重载值以及定时器中断配置等内容。

首先,我们需要选择定时器的工作模式。

STM32定时器支持多种工作模式,包括基本定时器模式、高级定时器模式、输入捕获模式和输出比较模式等。

基本定时器模式适用于简单的定时和延时操作,输入捕获模式适用于捕获外部事件的时间参数,输出比较模式适用于产生精确的PWM波形。

根据具体的应用需求,选择合适的工作模式。

其次,我们需要选择定时器的时钟源。

STM32定时器的时钟源可以选择内部时钟源(如系统时钟、HCLK等)或外部时钟源(如外部晶体)。

内部时钟源的稳定性较差,适用于简单的定时操作,而外部时钟源的稳定性较好,适用于要求较高的定时操作。

然后,我们需要选择定时器的时钟分频系数。

定时器的时钟分频系数决定了定时器的时钟频率,从而影响了定时器的计数速度。

我们可以通过改变时钟分频系数来调整定时器的计数速度,从而实现不同的定时时间。

时钟分频系数的选择需要考虑定时器的最大计数周期和所需的定时精度。

接着,我们需要配置定时器的计数器重载值。

定时器的计数器从0开始计数,当计数器达到重载值时,定时器将重新开始计数。

通过改变计数器重载值,可以实现不同的定时时间。

计数器重载值的选择需要考虑定时器的时钟频率和所需的定时时间。

最后,我们需要配置定时器的中断。

定时器中断可以在定时器计数达到重载值时触发,用于通知CPU定时器已经计数完成。

在定时器中断中,我们可以执行相应的中断服务程序,比如改变一些IO口的状态,实现定时操作。

通过配置定时器的中断使能和中断优先级,可以实现不同的中断操作。

需要注意的是,不同型号的STM32微控制器的定时器模块可能略有不同,具体的配置方法和寄存器设置也可能不同,请参考相应的数据手册和参考手册进行具体操作。

stm32通用定时器详解

stm32通用定时器详解

stm32通用定时器STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。

时钟源问题:名为TIMx的有八个,其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在APB1总线上。

其中TIM1&TIM8称为高级控制定时器(advanced control timer).他们所在的APB2总线也比APB1总线要好。

APB2可以工作在72MHz下,而APB1最大是36MHz。

定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器。

下面以定时器2~7的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。

假定AHB=36MHz,因为APB1允许的最大频率为36MHz,所以APB1的预分频系数可以取任意数值;当预分频系数=1时,APB1=36MHz,TIM2~7的时钟频率=36MHz(倍频器不起作用);当预分频系数=2时,APB1=18MHz,在倍频器的作用下,TIM2~7的时钟频率=36MHz。

有人会问,既然需要TIM2~7的时钟频率=36MHz,为什么不直接取APB1的预分频系数=1?答案是:APB1不但要为TIM2~7提供时钟,而且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时,TIM2~7仍能得到较高的时钟频率。

再举个例子:当AHB=72MHz时,APB1的预分频系数必须大于2,因为APB1的最大频率只能为36MHz。

如果APB1的预分频系数=2,则因为这个倍频器,TIM2~7仍然能够得到72MHz的时钟频率。

能够使用更高的时钟频率,无疑提高了定时器的分辨率,这也正是设计这个倍频器的初衷。

STM32之通用定时器

STM32之通用定时器

STM32 之通用定时器
STM32 中的定时器有多种,按功能分成2 个高级控制器定时器,4 个普通定时器,2 个基本定时器,2 个看门狗定时器,1 个系统滴答定时器SysTick。

定时器的关键是定时时间的计算。

比如用定时器控制继电器的开关的时候,需要延时一段时间才关闭或者开启,这时候离不开定时器定时。

通用定时器定时时间计算。

1 秒中断的基本实现:
通用定时器模块的入口时钟经过分频得到计数器的时钟,用CK_CNT 表示,预分频器的系数为:TIMx_PSC,当TIMx_PSC=0 时,表示不分频,=1 时,2 分频。

以此类推。

公式为:CK_CNT=fclk_PSC/(PSC[15:0]+1),其中PSC 最大为65535.
其次是TIM5 计数器的计数值的设置,TIM5 计数器以CK_CNT 为时钟来计数。

计数到设定值产生中断。

(1/分频后计数时钟)*计数值=设定时间。

以1 秒为例
(1/(72MHz/7200))*10000=1s。

SM通用定时器详细讲解

SM通用定时器详细讲解

STM32F4系列共有14个定时器,功能很强大。

14个定时器分别为: 2个高级定时器:Timerl和Timer810个通用定时器:Timer2~timer5 和 timer9~timer142个基本定时器:timer6和timer7本篇欲以通用定时器timer3为例,详细介绍定时器的各个方面,并对其PWM功能做彻底的探讨。

Timer3是一个16位的定时器,有四个独立通道,分别对应着 PA6 PA7 PBO PB1 主要功能是:1输入捕获一一测量脉冲长度。

2输出波形一一PWM输出和单脉冲输出。

Timer3有4个时钟源:1:内部时钟(CK_INT,来自RCC的TIMxCLK2:外部时钟模式1:外部输入TI1FP1与TI2FP23:外部时钟模式2:外部触发输入 TIMx_ETR仅适用于TIM2、TIM3、TIM4,TIM3,对应着 PD2引脚4:内部触发输入:一个定时器触发另一个定时器。

时钟源可以通过TIMx_SMCR相关位进行设置。

这里我们使用内部时钟。

APBx Preseal定时器挂在高速外设时钟 APB1或低速外设时钟APB2上,时钟不超过内部高速时钟 HCLK故当APBx_Prescale不为1时,定时器时钟为其2倍,当为1时,为了不超过HCLK定时器时钟等于HCLK例如:我们一般配置系统时钟 SYSCL为168MHz,内部高速时钟 AHB=168Mhz APB1欲分频为4,(因为APB1最高时钟为42Mhz),那么挂在 APB1总线上的timer3时钟为84Mhz。

《STM32F4xx中文参考手册》的424~443页列出与通用定时器相关的寄存器一共 20个,以下列出与Timer3相关的寄存器及重要寄存器的简单介绍。

1TIM3 控制寄存器1 (TIM3_CR1)作用:1使能自动重载TIM3_ARR2定时器的计数器递增或递减计数。

3事件更新。

4计数器使能2TIM3 控制寄存器2 (TIM3_CR2)3TIM3从模式控制寄存器(TIM3_SMCR)4TIM3 DMA/中断使能寄存器(TIM3_DIER)作用:1:使能事件更新中断AHB PrescaleSYSCLK最高APB1orAPB2:使能捕获/ 比较中断5 TIM3 状态寄存器(TIM3_SR)1:事件更新中断标志2:捕获/ 比较中断标志6 TIM3 事件生成寄存器(TIM3_EGR)7 TIM3 捕获/比较模式寄存器1 (TIM3_CCMR1)1:输出比较模式2:输出比较预装载使能,即使能后可以随时改变TIM3 捕获/比较寄存器1 (TIM3_CCR1) 的值3:捕获/ 比较选择8TIM3 捕获/比较模式寄存器2 (TIM3_CCMR2)9TIM3 捕获/ 比较使能寄存器(TIM3_CCER)1:上升沿触发or 下降沿触发2:捕获/ 比较输出使能10TIM3 计数器(TIM3_CNT)11TIM3 预分频器(TIM3_PSC) 计数器时钟频率CK_CNT 等于f CK_PSC / (PSC[15:0] + 1) 。

强大的STM32F4的定时器设定方法-附源码

强大的STM32F4的定时器设定方法-附源码

STM32定时器比较多,使用起来也比较混乱。

windows下做过编程的人一定对SetTimer有印象,不过该定时器也不那么好用,因为id要自己维护,并且保证不跟程序中的其他id冲突。

手头上的项目要用到定时器,又不想每次都跑到寄存器里详细设定参数,所以就写了个类似SetTimer的定时器。

注:请在STM32F407上使用该定时器,其他内核需要修改,如M3内核是没有32位定时器的使用方法:u8 SetTimer(u32 unTime, u32 unCount, TIMERFUN pHandler,u32 ucPara)使用SetTimer去向系统申请一个定时器,如果成功,返回定时器ID,失败返回0.为了使定时器ID更有意义,这里设定返回值为定时器编号这里根据计时时间自动分配定时器。

比如你需要一个比较长时间的定时,那么SetTimer会给你分配一个32位定时器(M4内核)参数:unTime:计时时间(ms,如需ns请自行修改或者使用delay)unCount :计时器运行次数,0为无限运行,非零的话,运行unCount次后,该定时器关闭。

pHandler:定时器定时后执行的函数,该处如果不需要执行,可填0(什么都不需要做,干嘛要开启定时器?),当然这里可以自己定义函数指针类型(比如传2个参数或者变参:呃,变参太变态)ucPara:函数参数/*关闭定时器tmrId:定时器ID*/void KillTimer(TIMER tmrId);例如:view sourceprint?1 //每隔0.5s 反转4bit 灯2 tmrIrb = SetTimer(500, 0, IndRvsBit, 4);3 printf("IndRvsBit Timer Id: %d\r\n",tmrIrb);45 if(0 != tmrIrb)6 {7 ucCnt = SetTimer(10 * 1000, 1, KillBlink, tmrIrb); //10s 后关闭位4反转8 printf("KillBlink Timer Id: %d\r\n",ucCnt);9 }view sourceprint?1view sourceprint?1view sourceprint?1view sourceprint?1view sourceprint?1view sourceprint?1这里要提前定义好参数里的函数指针view sourceprint?01 void KillBlink(u8 ucOpt)02 {03 // RTC_ShutWakeUp();04 KillTimer(ucOpt);05 printf("KillBlink(%d)\r\n", ucOpt);06 }0708 void AdPickTime(u8 ucOpt)09 {10 PushCmd(0xF2,0);11 }1213 void IndRvsBit(u8 ucOpt)14 {15 SubBoardIndSingle(4, acCurInd[4] ^ (1 << ucOpt));16 }header:view sourceprint?01 #ifndef __TIMER_H02 #define __TIMER_H03 #include "board.h"04 #include "zkekglobe.h"0 5 /////////////////////////////////////////////////////////////////// ///////////////60//All rights reserved708 //////////////////////////////////////////////////////////////////////////////////09101112 /*使能基本计时器13 ucTimerIdx:计时器编号 范围:2~5 9~1414 unCount 自动重装值。

05_STM32F4通用定时器详细讲解教学提纲

05_STM32F4通用定时器详细讲解教学提纲
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
定时器时钟上文已经讲了,由于Timer3挂在APB1总线上
故Timer3进入中断的周期为(CK_PSC+1)*(TIM3_ARR+1)/84000000秒
频率为84000000/[(CK_PSC+1)*(TIM3_ARR+1)] Hz
利用官方库函数实现每500ms进入中断,改变LED灯的电平,程序如下
14 TIM3捕获/比较寄存器2 (TIM3_CCR2)
15 TIM3捕获/比较寄存器3 (TIM3_CCR3)
16 TIM3捕获/比较寄存器4 (TIM3_CCR4)
1 Timer3用来做定时中断
与之相关的时基单元寄存器有
10 TIM3计数器(TIM3_CNT)
11 TIM3预分频器(TIM3_PSC)
12 TIM3自动重载寄存器(TIM3_ARR)
原理:
这里以向上计数为例,即计数器TIM3_CNT向上计数,当达到TIM3_ARR所设定的值时,归零重新计数,若使能了更新中断,则在TIM3_CNT归零时,进入中断。
进入中断的时间为(TIM3_ARR+1)个计时器周期
而计时器单元时钟是由定时器时钟分频得到,每(CK_PSC+1)个定时器周期计数一次。
1TIM3控制寄存器1 (TIM3_CR1)

STM32通用定时器使用详解

STM32通用定时器使用详解

STM32通用定时器使用详解1.通用定时器基本介绍•通用定时器包括TIM2、TIM3、TIM4和TIM5•STM32通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。

•每个定时器都是完全独立的,没有互相共享任何资源。

它们可以一起同步操作。

•定时器可以进行定时器基本定时,输出4路PWM,输入捕获o本文详细介绍这三个功能并且利用定时器3并且示例代码使用2.开发环境开发平台:keil5单片机:STM32F103ZET63.基本定时功能3.1定时器时钟来源分析STM32部分时钟树:3.1.1 首先我们我们的系统时钟(SYSCLK 72MHz)经过AHB分频器给APB1外设,但是APB1外设最大的只能到36Mhz,所以必须要系统时钟的二分频。

下面又规定了如果APB1预分频系数为1则频率不变,否则频率X2至定时器2~7,所以定时器2~7的时钟频率为还是72MHz3.1.2 分配给我们定时器的时钟是72MHz,我们可以根据自己的需求再设置定时器的分频,设置它的定时值/** 初始化定时器的时候指定我们分频系数psc,这里是将我们的系统时钟(72MHz)进行分频* 然后指定重装载值arr,这个重装载值的意思就是当我们的定时器的计数值达到这个arr时,定时器就会重新装载其他值.例如当我们设置定时器为向上计数时,定时器计数的值等于arr之后就会被清0重新计数* 定时器计数的值被重装载一次被就是一个更新(Update)* 计算Update时间公式Tout = ((arr+1)*(psc+1))/T clk公式推导详解:Tclk是定时器时钟源,在这里就是72Mhz我们将分配的时钟进行分频,指定分频值为psc,就将我们的T clk分了psc+1,我们定时器的最终频率就是T clk/(psc+1) MHz 这里的频率的意思就是1s中记T clk/(psc+1)M个数(1M=10的6次方) ,每记一个数的时间为(psc+1)/Tclk ,很好理解频率的倒数是周期,这里每一个数的周期就是(psc+1)/T clk 秒然后我们从0记到arr 就是 (arr+1)*(psc+1)/T clk举例:比如我们设置arr=7199,psc=9999我们将72MHz (1M等于10的6次方) 分成了(9999+1)等于7200Hz就是一秒钟记录9000数,每记录一个数就是1/7200秒我们这里记录9000个数进入定时器更新(7199+1)*(1/7200)=1s,也就是1s进入一次更新Update*///简单进行定时器初始化,设置预装载值和分频系数void MY_TIM3_Init(u16 arr,u16 psc){//初始化结构体TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//1.分配时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//2.初始化定时器相关配置TIM_TimeBaseStructure.TIM_Period = arr;TIM_TimeBaseStructure.TIM_Prescaler = psc;/*在这里说一下这个TIM_ClockDivision 是设置与进行输入捕获相关的分频设置的这个值不会影响定时器的时钟频率,我们一般设置为TIM_CKD_DIV1,也就是不分频*/TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);//3.打开定时器TIM_Cmd(TIM3,ENABLE);}/****************** 主函数 ********************///在主函数中我们可以调用初始化int main(){//定时器初始化MY_TIM3_Init(7199,9999);while(1){//检测更新标志位if(TIM_GetFlagStatus(TIM3,TIM_IT_Update)){//清除标志位TIM_ClearFlag(TIM3,TIM_IT_Update);//....(每隔一秒执行任务)}}}4.定时器输出PWM4.1基本介绍4.1.1 PWM是脉冲宽度调制,我们是通过改变脉冲的宽度来达到改变输出电压的效果,本质上就是调节占空比实现的,STM32除了基本定时器(TIM6,TIM7)不能输出PWM以外,其它的定时器都具有输出PWM,其中高级定时器(TIM1和TIM8)还能输出7路PWM,基本定时器(TIM2,TIM3,TIM4,TIM5)也可以输出4路PWM输出PWM是很有用的,比如我们可以通过控制电机来玩小车,或者通过输出PWM改变LED的亮度,制造呼吸灯等等4.1.2 我们通用定时器能输出PWM的IO口是固定的,虽然我们可以通过重映射可以改变引脚,具体是哪一些IO口我们要通过查阅STM32的参考手册这里涉及到一个重映射的概念,重映射就是管脚的外设功能映射到另一个管脚,但是不是可以随便映射的,具体对应关系参考手册上的管脚说明。

STM32定时器详细讲解及应用

STM32定时器详细讲解及应用

TIM3->DIER|=1<<0; //允许更新中断 TIM3->DIER|=1<<6; //允许触发中断 TIM3->CR1|=0X01; //使能定时器 3(这里面包括计数方向为向上计数) } #if 0 void TIM4_Configuration(void) {
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; /* TIM4 clock enable */
/*使能预装载*/ TIM_ARRPreloadConfig(TIM4, ENABLE); /*预先清除所有中断位*/ TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
/* 允许 TIM2 开始计数 */ TIM_Cmd(TIM4, ENABLE); } #else void TIM_Configuration(u16 p,u16 psc) { RCC->APB1ENR|=1<<2;//TIM4 时钟使能 //自动装载寄存器 TIM4->ARR=p; //设定定时器自动重装值 //PSC 预分频寄存器 TIM4->PSC=psc; //设定定时器的分频系数 TIM4->DIER|=1<<0; //允许更新中断 TIM4->DIER|=1<<6; //允许触发中断 TIM4->CR1|=0X01; //使能定时器 3(这里面包括计数方向为向上计数)
***********
* Function Name : TIM2_IRQHandler TIM2 中断

STM32通用定时器使用

STM32通用定时器使用

STM32通⽤定时器使⽤STM32中⼀共有11个定时器,其中2个⾼级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。

(TIM1和TIM8是能够产⽣3对PWM互补输出的⾼级登时其,常⽤于三相电机的驱动,时钟由APB2的输出产⽣;TIM2-TIM5是普通定时器;TIM6和TIM7是基本定时器,其时钟由APB1输出产⽣)本实验要实现的功能是:⽤普通定时器TIM2每⼀秒发⽣⼀次更新事件,进⼊中断服务程序翻转LED1的状态。

预备知识:① STM32通⽤定时器TIM2是16位⾃动重装载计数器。

② 向上计数模式:从0开始计数,计到⾃动装载寄存器(TIMx_ARR)中的数值时,清0,依次循环。

需要弄清楚的两个问题:1. 计数器的计数频率是什么?这个问题涉及到RCC时钟部分,如下图所⽰:定时器的时钟不是直接来⾃APB1或APB2,⽽是来⾃于输⼊为APB1或APB2的⼀个倍频器。

下⾯以定时器2~7的时钟说明这个倍频器的作⽤:当APB1的预分频系数为1时,这个倍频器不起作⽤,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作⽤,定时器的时钟频率等于APB1的频率两倍。

假定AHB=36MHz,因为APB1允许的最⼤频率为36MHz,所以APB1的预分频系数可以取任意数值;当预分频系数=1时,APB1=36MHz,TIM2~7的时钟频率=36MHz(倍频器不起作⽤);当预分频系数=2时,APB1=18MHz,在倍频器的作⽤下,TIM2~7的时钟频率=36MHz。

有⼈会问,既然需要TIM2~7的时钟频率=36MHz,为什么不直接取APB1的预分频系数=1?答案是:APB1不但要为TIM2~7提供时钟,⽽且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使⽤较低时钟频率时,TIM2~7仍能得到较⾼的时钟频率。

再举个例⼦:当AHB=72MHz时,APB1的预分频系数必须⼤于2,因为APB1的最⼤频率只能为36MHz。

STM32通用定时器原理

STM32通用定时器原理

STM32通⽤定时器原理/************************************************************************************************转载⾃:⼀、STM32通⽤定时器原理STM32 系列的CPU,有多达8个定时器,其中TIM1和TIM8是能够产⽣三对PWM互补输出的⾼级定时器,常⽤于三相电机的驱动,它们的时钟由APB2的输出产⽣。

其它6个为普通定时器,时钟由APB1的输出产⽣。

下图是STM32参考⼿册上时钟分配图中,有关定时器时钟部分的截图:从图中可以看出,定时器的时钟不是直接来⾃APB1或APB2,⽽是来⾃于输⼊为APB1或APB2的⼀个倍频器,图中的蓝⾊部分。

下⾯以通⽤定时器2的时钟说明这个倍频器的作⽤:当APB1的预分频系数为1时,这个倍频器不起作⽤,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作⽤,定时器的时钟频率等于APB1的频率两倍。

可能有同学还是有点不理解,OK,我们举⼀个例⼦说明。

假定AHB=36MHz,因为APB1允许的最⼤频率为36MHz,所以APB1的预分频系数可以取任意数值;当预分频系数=1时,APB1=36MHz,TIM2~7的时钟频率=36MHz(倍频器不起作⽤);当预分频系数=2时,APB1=18MHz,在倍频器的作⽤下,TIM2~7的时钟频率=36MHz。

有⼈会问,既然需要TIM2~7的时钟频率=36MHz,为什么不直接取APB1的预分频系数=1?答案是:APB1不但要为TIM2~7提供时钟,⽽且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使⽤较低时钟频率时。

Stm32外设⽤户⼿册,如图:再举个例⼦:当AHB=72MHz时,APB1的预分频系数必须⼤于2,因为APB1的最⼤频率只能为36MHz。

如果APB1的预分频系数=2,则因为这个倍频器,TIM2~7仍然能够得到72MHz的时钟频率。

STM32学习笔记(4)通用定时器基本定时功能

STM32学习笔记(4)通用定时器基本定时功能

STM32学习笔记(4)通⽤定时器基本定时功能STM32学习笔记(4):通⽤定时器基本定时功能1.STM32的Timer简介STM32中⼀共有11个定时器,其中2个⾼级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。

其中系统嘀嗒定时器是前⽂中所描述的SysTick,看门狗定时器以后再详细研究。

今天主要是研究剩下的8个定时器。

其中TIM1和TIM8是能够产⽣3对PWM互补输出的⾼级定时器,常⽤于三相电机的驱动,时钟由APB2的输出产⽣。

TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产⽣。

由于STM32的TIMER功能太复杂了,所以只能⼀点⼀点的学习。

因此今天就从最简单的开始学习起,也就是TIM2-TIM5普通定时器的定时功能。

2.普通定时器TIM2-TIM52.1时钟来源计数器时钟可以由下列时钟源提供:·内部时钟(CK_INT)·外部时钟模式1:外部输⼊脚(TIx)·外部时钟模式2:外部触发输⼊(ETR)·内部触发输⼊(ITRx):使⽤⼀个定时器作为另⼀个定时器的预分频器,如可以配置⼀个定时器Timer1⽽作为另⼀个定时器Timer2的预分频器。

由于今天的学习是最基本的定时功能,所以采⽤内部时钟。

TIM2-TIM5的时钟不是直接来⾃于APB1,⽽是来⾃于输⼊为APB1的⼀个倍频器。

这个倍频器的作⽤是:当APB1的预分频系数为1时,这个倍频器不起作⽤,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其他数值时(即预分频系数为2、4、8或16),这个倍频器起作⽤,定时器的时钟频率等于APB1的频率的2倍。

APB1的分频在STM32_SYSTICK的学习笔记中有详细描述。

通过倍频器给定时器时钟的好处是:APB1不但要给TIM2-TIM5提供时钟,还要为其他的外设提供时钟;设置这个倍频器可以保证在其他外设使⽤较低时钟频率时,TIM2-TIM5仍然可以得到较⾼的时钟频率。

5-1 STM32F4的定时器

5-1 STM32F4的定时器
5.1 STM32F4的定时器
STM32F4的定时器
STM32F4共有14个定时器,功能十分强大。有以下3个类型定时器: 1. 高级定时器 TIM1和TIM8,这2个是32位的高级定时器。 2. 通用定时器 TIM2~TIM5、TIM9~TIM14,这10个是16位的通用定时器。 3. 基本定时器 TIM6和TIM7,这2个是基本定时器。
STM32F4的定时器
1. 基本定时器(TIM6和TIM7) 基本定时器有很多用途,包括测量输入信号的脉冲宽度(输入捕获)或生 成输出波形(输出比较和PWM)。 另外,基本定时器不仅可用作通用定时器以生成时基,还可以专门用于驱 动数模转换器(DAC)。
2. 通用定时器(TIM2~TIM5、TIM9~TIM14) 通用定时器可用于测量输入信号的脉冲长度(输入捕获)或者产生输出波 形(输出比较和PWM)等多种场合。
STM32F4的定时器
3. 高级定时器(TIM1和TIM8) 高级定时器可用于各种用途,包括测量输入信号的脉冲宽度(输入捕获); 或者生成输出波形(输出比较、PWM和带死区插入的互补PWM)等。
在实际应用中,可通过选用不同的定时器来实现相应功能。 比如要开பைடு நூலகம்一个直流无刷电机控制器,就可以选用高级定时器,利用其可 以产生带死区插入的互补PWM的功能,实现三相桥的控制。
感谢
谢谢,精品课件
资料搜集
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

系列共有个定时器,功能很强大。

个定时器分别为:
个高级定时器:和
个通用定时器:和
个基本定时器:和
本篇欲以通用定时器为例,详细介绍定时器的各个方面,并对其功能做彻底的探讨。

是一个位的定时器,有四个独立通道,分别对应着
主要功能是:输入捕获——测量脉冲长度。

输出波形——输出和单脉冲输出。

有个时钟源:
:内部时钟(),来自的
:外部时钟模式:外部输入与
:外部时钟模式:外部触发输入,仅适用于、、,,对应着引脚
:内部触发输入:一个定时器触发另一个定时器。

时钟源可以通过相关位进行设置。

这里我们使用内部时钟。

(最高)
定时器挂在高速外设时钟或低速外设时钟上,时钟不超过内部高速时钟,故当不为时,定时器时钟为其倍,当为时,为了不超过,定时器时钟等于。

例如:我们一般配置系统时钟为,内部高速时钟,欲分频为,(因为最高时钟为),那么挂在总线上的时钟为。

《中文参考手册》的页列出与通用定时器相关的寄存器一共个,
以下列出与相关的寄存器及重要寄存器的简单介绍。

控制寄存器()
作用:使能自动重载
定时器的计数器递增或递减计数。

事件更新。

计数器使能
控制寄存器()
从模式控制寄存器()
中断使能寄存器()
作用::使能事件更新中断
:使能捕获比较中断
状态寄存器()
:事件更新中断标志
:捕获比较中断标志
事件生成寄存器()
捕获比较模式寄存器()
:输出比较模式
:输出比较预装载使能,即使能后可以随时改变捕获比较寄存器()的值
:捕获比较选择
捕获比较模式寄存器()
捕获比较使能寄存器()
:上升沿触发下降沿触发
:捕获比较输出使能
计数器()
预分频器()
计数器时钟频率等于([] )。

自动重载寄存器()
当自动重载值为空时,计数器不工作
难道说每次事件都必须装载重载值?
捕获比较寄存器()
输出时:是捕获比较寄存器的预装载值,由的位使能。

输入时:为上一个输入捕获事件()发生时的计数器值。

捕获比较寄存器()
捕获比较寄存器()
捕获比较寄存器()
用来做定时中断
与之相关的时基单元寄存器有
计数器()
预分频器()
自动重载寄存器()
原理:
这里以向上计数为例,即计数器向上计数,当达到所设定的值时,归零重新计数,若使能了更新中断,则在归零时,进入中断。

进入中断的时间为()个计时器周期
而计时器单元时钟是由定时器时钟分频得到,每()个定时器周期计数一次。

定时器时钟上文已经讲了,由于挂在总线上
故进入中断的周期为()* ()秒
频率为[()* ()]
利用官方库函数实现每进入中断,改变灯的电平,程序如下
打开时钟,挂在上,所以命令开启时钟。

(); 使能时钟
时钟的配置。

; 自动重装载值
; 定时器分频
; 向上计数模式
;
()初始化
使能中断
(); 允许定时器更新中断。

打开。

(); 使能定时器
配置中断。

中断服务函数编写。

故可见的初始化函数都离不开以下几步
打开设备时钟。

配置参数。

打开设备。

设备需配置后再打开。

如果需要配置中断,那么则需要编写中断服务函数。

完整程序如下
( )
{
;
;
(); 使能时钟
; 定时器分频
; 向上计数
; 自动装载值
;
()初始化
(); 允许定时器更新中断
(); 使能定时器
; 定时器中断
; 抢占优先级
; 子优先级
;
();
}
中断服务函数
()
{
(()) 溢出中断
{
( ); 灯电平翻转
}
(); 清除中断标志位
}
然后()函数中();即可
可以计算进入中断的频率为即灯每亮一次,周期为。

相关文档
最新文档