stmf通用定时器详细讲解
STM32F103系列单片机中的定时器工作原理解析
![STM32F103系列单片机中的定时器工作原理解析](https://img.taocdn.com/s3/m/12cd9836fc4ffe473368abca.png)
STM32F103系列单片机中的定时器工作原理解析
STM32F103系列的单片机一共有11个定时器,其中:
2个高级定时器
4个普通定时器
2个基本定时器
2个看门狗定时器
1个系统嘀嗒定时器
出去看门狗定时器和系统滴答定时器的八个定时器列表;
8个定时器分成3个组;
TIM1和TIM8是高级定时器
TIM2-TIM5是通用定时器
TIM6和TIM7是基本的定时器
这8个定时器都是16位的,它们的计数器的类型除了基本定时器TIM6和TIM7都支持向上,向下,向上/向下这3种计数模式
计数器三种计数模式
向上计数模式:从0开始,计到arr预设值,产生溢出事件,返回重新计时
向下计数模式:从arr预设值开始,计到0,产生溢出事件,返回重新计时
中央对齐模式:从0开始向上计数,计到arr产生溢出事件,然后向下计数,计数到1以后,又产生溢出,然后再从0开始向上计数。
(此种技术方法也可叫向上/向下计数)
基本定时器(TIM6,TIM7)的主要功能:
只有最基本的定时功能,。
基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动
通用定时器(TIM2~TIM5)的主要功能:
除了基本的定时器的功能外,还具有测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。
stm32f407延时函数
![stm32f407延时函数](https://img.taocdn.com/s3/m/2fd7451cae45b307e87101f69e3143323968f5ad.png)
stm32f407延时函数一、概述在嵌入式系统开发中,延时函数是一种十分常见的功能。
在STM32F407系列单片机中,有专门的硬件定时器用于延时功能的实现。
本文将详细介绍在STM32F407上如何使用硬件定时器实现延时函数,并讨论其优缺点和注意事项。
二、硬件定时器简介在STM32F407系列单片机中,共有12个通用定时器和2个基本定时器。
这些定时器可以用于计时、产生中断、PWM输出等功能。
2.1 通用定时器通用定时器有4个,分别是TIM1、TIM2、TIM3和TIM4。
它们具有相似的功能和寄存器结构。
通用定时器可以实现高级的定时、PWM等功能,广泛应用于各种场景。
2.2 基本定时器基本定时器有2个,分别是TIM6和TIM7。
它们功能较简单,适用于基本的定时和中断需求。
三、延时函数的实现3.1 初始化定时器在使用定时器之前,需要先初始化定时器的时钟、计数模式、预分频系数等参数。
具体的初始化代码如下:// 初始化TIM2定时器void Timer_Init(void){RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 使能TIM2时钟TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Period = 9999; // 设置周期为10000个时钟周期TIM_TimeBaseStructure.TIM_Prescaler = 83; // 设置预分频系数为84TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 设置时钟分割为不分割TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 设置为向上计数模式TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_Cmd(TIM2, ENABLE); // 使能定时器}3.2 延时函数实现延时函数的实现主要是利用定时器的计数器进行计时,并通过轮询的方式判断是否达到延时时间。
STM32之TIM通用定时器
![STM32之TIM通用定时器](https://img.taocdn.com/s3/m/0b9c726830b765ce0508763231126edb6f1a76cf.png)
STM32之TIM通⽤定时器本⽂介绍如何使⽤STM32标准外设库配置并使⽤定时器,定时器就是设置⼀个计时器,待计时时间到之后产⽣⼀个中断,程序接收到中断之后可以执⾏特定的程序,跟现实中的闹钟功能类似。
与延时功能不同,定时器计时过程中程序可以执⾏其他程序。
最简单直观的应⽤为定时翻转指定IO引脚。
本例程使⽤通⽤定时器TIM3,每100ms翻转GPIOB的Pin5输出,如果该引脚外接有LED灯,可以看到LED灯周期性的闪烁。
STM32F103VE系列共有8个定时器,分为基本定时器、通⽤定时器和⾼级定时器,其中通⽤定时器包括TIM2/3/4/5共4个,如果⼀个定时器不够⽤,可以启动其他⼏个定时器。
本⽂适合对单⽚机及C语⾔有⼀定基础的开发⼈员阅读,MCU使⽤STM32F103VE系列。
TIM通⽤定时器分为两部分,初始化和控制。
1. 初始化分两步:通⽤中断、TIM。
1.1. 通⽤中断:优先级分组、中断源、优先级、使能优先级分组:设定合适的优先级分组中断源:选择指定的TIM中断源:TIM3_IRQn优先级:设定合适的优先级使能:调⽤库函数即可1.2. TIM:时钟、预分频器、定时器周期、分频因⼦、计数模式、初始化定时器、开启定时器中断、使能计数器。
结构体:typedef struct{uint16_t TIM_Prescaler;uint16_t TIM_CounterMode;uint16_t TIM_Period;uint16_t TIM_ClockDivision;uint8_t TIM_RepetitionCounter;} TIM_TimeBaseInitTypeDef;时钟:需要使能定时器时钟//开启定时器时钟,即内部时钟CK_INT=72MRCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);预分频器:默认定时器时钟频率为72M,那么预分频器设置为71,那么⼀次计数为1us//时钟预分频数为71,则计数器计数⼀次时间为1usTIM_TimeBaseStructure.TIM_Prescaler = 71;定时器周期:设置为999,那么产⽣⼀次定时器中断的时间为1ms//⾃动重装载寄存器为999,则产⽣⼀次中断时间为1msTIM_TimeBaseStructure.TIM_Period = 1000 - 1;计数模式:⼀般选择向上计数模式// 计数器计数模式,选择向上计数模式TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;时钟分频因⼦:⼀般选择1分频// 时钟分频因⼦,选择1分频TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;重复计数器的值:仅对⾼级定时器有效,⽆需设置初始化定时器:调⽤库函数即可//初始化定时器TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);开启定时器中断//开启计数器中断TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);使能计数器//使能计数器TIM_Cmd(TIM3, ENABLE);2. 处理2.1. 中断服务函数定时器TIM3的中断服务函数名称为TIM3_IRQHandler ()。
STM32入门篇之通用定时器彻底研究
![STM32入门篇之通用定时器彻底研究](https://img.taocdn.com/s3/m/2cc29d5177232f60ddcca1ae.png)
STM32入门篇之通用定时器彻底研究STM32的定时器功能很强大,学习起来也很费劲儿,本人在这卡了5天才算看明白。
写下下面的文字送给后来者,希望能带给你点启发。
在此声明,本人也是刚入门,接触STM32不足10天,所以有失误的地方请以手册为准,欢迎大家拍砖。
其实手册讲的还是挺全面的,只是无奈TIMER的功能太复杂,所以显得手册很难懂,我就是通过这样看手册:while(!SUCCESS){看手册…}才搞明白的!所以接下来我以手册的顺序为主线,增加一些自己的理解,并通过11个例程对TIMER做个剖析。
实验环境是STM103V100的实验板,MDK3.2 +Library2.东西都不怎么新,凑合用……TIMER主要是由三部分组成:1、时基单元。
2、输入捕获。
3、输出比较。
还有两种模式控制功能:从模式控制和主模式控制。
一、框图让我们看下手册,一开始是定时器的框图,这里面几乎包含了所有定时器的信息,您要是能看明白,那么接下来就不用再看别的了…为了方便的看图,我对里面出现的名词和符号做个注解:TIMx_ETR:TIMER外部触发引脚 ETR:外部触发输入ETRP:分频后的外部触发输入 ETRF:滤波后的外部触发输入ITRx:内部触发x(由另外的定时器触发)TI1F_ED:TI1的边沿检测器。
TI1FP1/2:滤波后定时器1/2的输入TRGI:触发输入 TRGO:触发输出CK_PSC:应该叫分频器时钟输入CK_CNT:定时器时钟。
(定时周期的计算就靠它)TIMx_CHx:TIMER的输入脚 TIx:应该叫做定时器输入信号xICx:输入比较x ICxPS:分频后的ICxOCx:输出捕获x OCxREF:输出参考信号关于框图还有以下几点要注意:1、影子寄存器。
有阴影的寄存器,表示在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器);(详细请参考版主博客/STM32/401461/message.aspx)2、输入滤波机制在ETR何TIx输入端有个输入滤波器,它的作用是以采样频率Fdts来采样N次进行滤波的。
STM32F103ZET6通用定时器
![STM32F103ZET6通用定时器](https://img.taocdn.com/s3/m/59da041c4b7302768e9951e79b89680203d86b6f.png)
STM32F103ZET6通⽤定时器1、通⽤定时器简介 通⽤定时器是由⼀个可编程预分频器驱动的16位⾃动装载计数器构成。
通⽤定时器可以应⽤于多种场合,如测量输⼊信号的脉冲长度(输⼊捕获)或者产⽣输出波形(输出⽐较和PWM)。
使⽤通⽤定时器的预分频器和RCC时钟控制器的预分频器,脉冲长度和输出波形周期可以在⼏个微秒到⼏个毫秒间调整。
STM32内有多个通⽤定时器,每个通⽤定时器都是完全独⽴的,没有互相共享任何资源。
通⽤定时器的主要功能包括: 16位向上、向下、向上/向下⾃动装载计数器。
16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值。
4个独⽴通道可以实现4路:输⼊捕获、输出⽐较、PWM输出、单脉冲模式输出。
使⽤外部信号控制定时器和定时器互连的同步电路。
⽀持针对定位的增量(正交)编码器和霍尔传感器电路。
通⽤定时器框图如下:2、通⽤定时器的时基单元 通⽤定时器的时基单元主要由⼀个16位计数器和与其相关的⾃动装载寄存器。
这个计数器可以向上计数、向下计数或者向上向下双向计数。
通⽤定时器的计数器的时钟由预分频器分频得到,⾄于预分频器之前的时钟在时钟选择的时候回说到。
通⽤定时器的计数器、⾃动装载寄存器和预分频器寄存器可以由软件读写,在计数器运⾏时仍可以读写。
如下图红⾊框部分就是通⽤定时器的时基部分: 时基单元包含: CNT计数器(TIMx_CNT)。
PSC预分频器(TIMx_PSC)。
⾃动重装载寄存器(TIMx_ARR)。
CNT 计数器和⾃动重装载寄存器: TIMx_ARR寄存器是预先装载的,写或读TIMX_ARR寄存器将访问预装载寄存器。
通⽤定时器根据TIMx_CR1寄存器中的ARPE 位,来决定写⼊TIMx_ARR寄存器的值是⽴即⽣效还是要等到更新事件(溢出)后才⽣效。
在计数器运⾏的过程中,ARPE位的作⽤如下: 当ARPE = 0时,写⼊TIMx_ARR寄存器的值⽴即⽣效,即TIMx_CNT计数器的计数范围⽴马更新。
stm32f103zet6定时器详解及应用
![stm32f103zet6定时器详解及应用](https://img.taocdn.com/s3/m/b90cfa46f18583d049645997.png)
stm32f103zet6定时器详解及应用
1、stm32f103zet6芯片及引脚图
2、stm32f103xx器件功能与配置
3、stm32f103zet6 定时器大容量的STM32F103XX增强型系列产品包含最多2个高级控制定时器、4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。
下表比较了高级控制定时器、普通定时器和基本定时器的功能:
定时器功能比较
1)计数器三种计数模式
向上计数模式:从0开始,计到arr预设值,产生溢出事件,返回重新计时
向下计数模式:从arr预设值开始,计到0,产生溢出事件,返回重新计时
中央对齐模式:从0开始向上计数,计到arr产生溢出事件,然后向下计数,计数到1以后,又产生溢出,然后再从0开始向上计数。
(此种技术方法也可叫向上/向下计数)
2)高级控制定时器(TIM1和TIM8)
两个高级控制定时器(TIM1和TIM8)可以被看成是分配到6个通的三三相PWM发生器,它具有带死区插入的互补PWM输出,还可以被当成完整的通用定时器。
四个独立的通道可以用于:
(1)输入捕获
(2)输出比较
(3)产生PWM(边缘或中心对齐模式)
(4)单脉冲输出
配置为16位标准定时器时,它与TIMX定时器具有相同的功能。
配置为16位PWM发生器时,它具有全调制能力(0~100%)。
在调试模式下,计数器可以被冻结,同时PWM输。
STM32F2技术培训_通用定时器_TIM
![STM32F2技术培训_通用定时器_TIM](https://img.taocdn.com/s3/m/aea3eaca89eb172ded63b793.png)
23
各种时钟源的寄存器配置
配置相应寄存器为定时器选择所需时钟源
时钟源 内部时钟 CK_INT 外部时钟模式1 TIx 外部时钟模式2 ETR 内部触发输入 ITRx SMS 000 CEN 1 计数器在选定引脚 的指定边沿计数 计数器在ETR的指 定边沿计数 主计数器的输出作 为从计数器的输入 ECE 描述 备注 APB1上定时器最高 60MHz; APB2上定时 器最高120MHz Max fEXT=fTIMxCLK/2 TS=111(ETRF) 1 ETRP频率最高不能超 过CK_INT的1/4,可通 过ETPS分频
14个定时器分成三类
2个高级定时器:TIM1 & TIM8
用于马达控制 各自拥有4个通道,带互补输出以及霍尔接口
10个通用定时器
各自拥有4个通道:TIM2 & TIM3 & TIM4 & TIM5 各自拥有2个通道: TIM9 & TIM12 各自拥有1个通道: TIM10 & TIM11 & TIM13 & TIM14
6
单通道通用定时器功能框图
定时器精度 1通道通用定时器 TIM10,11 and TIM13,14 定时器类型 分频因子 DMA 比较/捕获通道 互补输出 逻辑引脚 CH1
16 bit
up
1..65536
NO
1
0
时钟源
时间基
1个通道 捕获比较矩阵
7
2通道通用定时器功能框图
定时器精度 2通道通用定时器 TIM9 and TIM12 16 bit 定时器类型 up 分频因子 1..65536 DMA NO 比较/捕获通道 2 互补输出 0 逻辑引脚 CH1;CH2
stm32f407通用定时器输入捕获
![stm32f407通用定时器输入捕获](https://img.taocdn.com/s3/m/a94b6b754b35eefdc8d333ee.png)
通用定时器输入捕获通用定时器作为输入捕获的使用。
我们用TIM5的通道1(PA0)来做输入捕获,捕获PA0上高电平的脉宽(用KEY_UP按键输入高电平),通过串口来打印高电平脉宽时间。
输入捕获模式可以用来测量脉冲宽度或者测量频率。
我们以测量脉宽为例,用一个简图来说明输入捕获的原理:如图所示,就是输入捕获测量高电平脉宽的原理,假定定时器工作在向上计数模式,图中t1~t2时间,就是我们需要测量的高电平时间。
测量方法如下:首先设置定时器通道x为上升沿捕获,这样,t1时刻,就会捕获到当前的CNT值,然后立即清零CNT,并设置通道x为下降沿捕获,这样到t2时刻,又会发生捕获事件,得到此时的CNT值,记为CCRx2。
这样,根据定时器的计数频率,我们就可以算出t1~t2的时间,从而得到高电平脉宽。
在t1~t2之间,可能产生N次定时器溢出,这就要求我们对定时器溢出,做处理,防止高电平太长,导致数据不准确。
如图所示,t1~t2之间,CNT计数的次数等于:N*ARR+CCRx2,有了这个计数次数,再乘以CNT的计数周期,即可得到t2-t1的时间长度,即高电平持续时间。
STM32F4的定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能。
STM32F4的输入捕获,简单的说就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。
同时还可以配置捕获时是否触发中断/DMA等。
这里我们用TIM5_CH1来捕获高电平脉宽。
============================================================== =====================捕获/比较通道(例如:通道1 输入阶段)============================================================== =====================接下来介绍我们需要用到的一些寄存器配置,需要用到的寄存器:TIMx_ARR、TIMx_PSC、TIMx_CCMR1、TIMx_CCER、TIMx_DIER、TIMx_CR1、TIMx_CCR1 (这里的x=5)。
《STM定时器》PPT课件
![《STM定时器》PPT课件](https://img.taocdn.com/s3/m/982fdd71f18583d04964597d.png)
立即加载计数器
更新事件时加载计数器
控制寄存器:TIMx_CR1
控制寄存器:TIMx_CR1
控制寄存器:TIMx_CR1
寄存器操作编程
void Timer3_Init(u16 arr,u16 psc) { RCC->APB1ENR |= 1 << 1; TIM3->ARR = arr;//设置重装载值 TIM3->PSC = psc;//设置分频系数 TIM3->DIER |= 1 << 0;//允许更新中断 TIM3->DIER |= 1 << 6;//允许TIME中断 TIM3->CR1 |= 1 << 0; MY_NVIC_Init(3,3,TIM3_IRQChannel,2); }
第4组:所有4位用来配置响应优先级。即16种中断向量具有都不相同的响应 优先级。
STM32中断的配置方法
第一步 定义一个中断配置结构体变量
NVIC_InitTypeDef NVIC_InitStructure;
第二步 建立中断优先级配置组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_ 1);
其属性编号越小,优先级别越高
若内核正在执行C的中断服务函数,则它能被抢占优先级更高的中断A打断,由 于B和C的抢占优先级相同,所以C不能被B打断。但如果B和C中断是同时到达的, 内核就会首先响应响应优先级别更高的B中断。
抢占优先级和响应优先级的数量由一个4位的数字来决定。
第0组:所有4位用来配置抢占优先级,即NVIC配置的24 =16种中断向量都是只有抢 占属性,没有响应属性。
向下计数模式:计数器从设定的数值开始向下计数到0,然后自动从设定的 数值重新向下计数,并产生一个向下溢出事件。
stm32f1定时器计算公式
![stm32f1定时器计算公式](https://img.taocdn.com/s3/m/d5c2c4657275a417866fb84ae45c3b3566ecdd6d.png)
stm32f1定时器计算公式
STM32F1系列微控制器具有多种定时器,包括基本定时器
(TIM6和TIM7)、通用定时器(TIM2至TIM5)和高级定时器
(TIM1)。
这些定时器可用于测量时间间隔、生成脉冲、控制PWM
输出等多种应用。
对于定时器的计算公式,主要涉及到定时器的时钟频率、预分
频系数和计数器的周期值。
以下是一些常见的计算公式:
1. 计数器的周期值计算公式:
计数器的周期值决定了定时器溢出的时间间隔,计算公式为:
计数器周期值 = (定时器时钟频率 / (预分频系数定时器
工作频率)) 1。
2. PWM输出频率计算公式:
如果使用定时器来生成PWM输出,可以根据以下公式计算PWM输出的频率:
PWM输出频率 = 定时器工作频率 / (计数器周期值 + 1)。
3. 定时器中断频率计算公式:
如果需要定时器中断来执行特定的任务,可以根据以下公式计算定时器中断的频率:
中断频率 = 定时器工作频率 / (预分频系数 (计数器周期值 + 1))。
需要注意的是,不同的定时器具有不同的工作模式和特性,因此在使用时需要查阅相关的参考手册和技术资料,以确保计算公式的准确性和适用性。
另外,定时器的配置和使用也需要结合具体的应用场景和需求进行调整和优化。
通用定时器-定时实验
![通用定时器-定时实验](https://img.taocdn.com/s3/m/b6dd6a2bbb1aa8114431b90d6c85ec3a87c28b61.png)
通用定时器-定时实验二、预备知识STM32中一共有11个定时器,其中2个高级控制定时器,4个通用定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。
编程步骤:1、配置系统时钟;2、配置NVIC;3、配置GPIO;4、配置TIMER;第4项配置TIMER有如下配置:(1)利用TIM_DeInit()函数将Timer设置为默认缺省值;(2)TIM_InternalClockConfig()选择TIMx来设置内部时钟源;(3)TIM_Perscaler来设置预分频系数;(4)TIM_ClockDivision来设置时钟分割;(5)TIM_CounterMode来设置计数器模式;(6)TIM_Period来设置自动装入的值(7)TIM_ARRPerloadConfig()来设置是否使用预装载缓冲器(8)TIM_ITConfig()来开启TIMx的中断其中(3)-(6)步骤中的参数由TIM_TimerBaseInitTypeDef结构体给出。
步骤(3)中的预分频系数用来确定TIMx所使用的时钟频率,具体计算方法为:CK_INT/(TIM_Perscaler+1)。
CK_INT是内部时钟源的频率,是根据2.1中所描述的APB1的倍频器送出的时钟,TIM_Perscaler是用户设定的预分频系数,其值范围是从0–65535。
步骤(4)中的时钟分割定义的是在定时器时钟频率(CK_INT)与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例。
TIM_ClockDivision的参数如下表:数字滤波器(ETR,TIx)是为了将ETR进来的分频后的信号滤波,保证通过信号频率不超过某个限定。
步骤(7)中需要禁止使用预装载缓冲器。
当预装载缓冲器被禁止时,写入自动装入的值(TIMx_ARR)的数值会直接传送到对应的影子寄存器;如果使能预加载寄存器,则写入ARR的数值会在更新事件时,才会从预加载寄存器传送到对应的影子寄存器。
SM通用定时器详细讲解
![SM通用定时器详细讲解](https://img.taocdn.com/s3/m/d6157ebc79563c1ec4da7161.png)
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) 。
STM32F1通用定时器示例详解--TimeBase
![STM32F1通用定时器示例详解--TimeBase](https://img.taocdn.com/s3/m/9007de5ae45c3b3567ec8b7d.png)
STM32F1通用定时器示例详解--TimeBase前言基于学习的目的,详细讲解关于标准外设库中的定时器的17个示例项目函数文件。
本次介绍TimeBase的示例。
一、示例详解基于硬件平台:STM32F100B-EVAL,MCU的型号是STM32F103VET6。
软件则是其标准外设库。
1、Time Base的寄存器配置软件配置,运行程序可以发现,系统时钟设置为24MHz,定时器使用到的是TIM2 ;根据时钟树的图谱及其程序,该示例选择的是内部时钟源作为定时器的时钟源;AHB 时钟 (HCLK)在RCC_CFGR寄存器中的分频系数HPRE的值为0,即SYSCLK not divided,所以HCLK就是24MHz;APB1的prescaler的系数是PPRE1:0x05,即分频4,APB1CLK为24/4 = 6M ;由于APB1的prescaler系数不为1,所以经过倍频器后就是x2,即为TIMxCLK = 6*2=12Mhz,对于上述框图的倍频器,当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。
APB1不但要为TIM2~7提供时钟,而且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时,TIM2~7可以工作在更高频率。
二、示例演练该示例在达到计数值时,中断内翻转任意通用GPIO口,通过示波器观测其翻转的周期频率。
这儿有一个小插曲,软件是直接拷贝的库函数,理论上选择合适的单片机型号后,下载即可出波形结果;但是发现程序执行,示波器上出现不了波形,而且,在IAR中,寄存器调试观测窗口,发现TIM2寄存器的值初始化不了,TIM3(程序未涉及)反而出现了几个寄存器的初始化,但是TIM3的初始化值和自己程序中的还是不一样的,另外全局变量的值,尤其SystemClock还有PrescalerValue的值在检测窗口显示的时Error,是否因为TIM2的地址定义是否错了?查看头文件的定义以及Flash的Memory map,是对的。
STM32F103的11个定时器详解
![STM32F103的11个定时器详解](https://img.taocdn.com/s3/m/566df99f83d049649b665893.png)
STM32F103系列的单片机一共有11个定时器,其中:2个高级定时器4个普通定时器2个基本定时器2个看门狗定时器1个系统嘀嗒定时器出去看门狗定时器和系统滴答定时器的八个定时器列表;8个定时器分成3个组;TIM1和TIM8是高级定时器TIM2-TIM5是通用定时器TIM6和TIM7是基本的定时器这8个定时器都是16位的,它们的计数器的类型除了基本定时器TIM6和TIM7都支持向上,向下,向上/向下这3种计数模式计数器三种计数模式向上计数模式:从0开始,计到arr预设值,产生溢出事件,返回重新计时向下计数模式:从arr预设值开始,计到0,产生溢出事件,返回重新计时中央对齐模式:从0开始向上计数,计到arr产生溢出事件,然后向下计数,计数到1以后,又产生溢出,然后再从0开始向上计数。
(此种技术方法也可叫向上/向下计数)基本定时器(TIM6,TIM7)的主要功能:只有最基本的定时功能,。
基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动通用定时器(TIM2~TIM5)的主要功能:除了基本的定时器的功能外,还具有测量输入信号的脉冲长度( 输入捕获) 或者产生输出波形( 输出比较和PWM)高级定时器(TIM1,TIM8)的主要功能:高级定时器不但具有基本,通用定时器的所有的功能,还具有控制交直流电动机所有的功能,你比如它可以输出6路互补带死区的信号,刹车功能等等通用定时器的时钟来源;a:内部时钟(CK_INT)b:外部时钟模式1:外部输入脚(TIx)c:外部时钟模式2:外部触发输入(ETR)d:内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器通用定时期内部时钟的产生:从截图可以看到通用定时器(TIM2-7)的时钟不是直接来自APB1,而是通过APB1的预分频器以后才到达定时器模块。
当APB1的预分频器系数为1时,这个倍频器就不起作用了,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1时钟频率的两倍。
STM32f407系统定时器时钟配置计算
![STM32f407系统定时器时钟配置计算](https://img.taocdn.com/s3/m/6f7fef84ba4cf7ec4afe04a1b0717fd5360cb2dc.png)
STM32f407系统定时器时钟配置计算首先,我们需要配置系统定时器的时钟源。
STM32F407的系统定时器可以使用内部时钟源(HCLK/8)或外部时钟源。
通过软件配置,我们可以选择其中一种时钟源。
1.配置内部时钟源:要使用内部时钟源,可以通过RCC寄存器来配置。
具体需要做以下几步:a. 使能系统定时器时钟:在 RCC_APBxENR 寄存器中设置位SysTickEN=1,其中 x 为适当的 APBx 总线索引。
b.配置系统定时器时钟源:在STK_CTRL寄存器中设置位CLKSOURCE=12.配置外部时钟源:如果要使用外部时钟源作为系统定时器的时钟源,我们需要将外部时钟源与系统的时钟树相连。
具体的配置方法因时钟源的不同而不同,可参考具体芯片的参考手册。
配置了系统定时器的时钟源后,我们可以计算定时器中断的时间间隔。
系统定时器中断的时间间隔=(计数器周期)*(重载值+1)/(时钟频率)其中,计数器周期为24位,取值范围为0~2^24-1、时钟频率为系统定时器的时钟源频率。
重载值是计数器的初始值,当计数器减到0时,会触发定时中断。
举个例子,假设系统定时器的时钟源频率为8MHz,我们希望计算系统定时器中断每100ms触发一次的重载值。
中断触发周期 = 100ms = 0.1s时钟频率=8MHz=8*10^6Hz由于重载值需要为整数,我们可以将计算结果四舍五入为最接近的整数,即重载值为477以上就是STM32F407系统定时器时钟配置和计算方法的简要介绍。
配置完系统定时器的时钟源,并计算出需要的重载值后,我们可以通过编程设置相关寄存器,来开始使用系统定时器进行定时中断的任务。
stm32f407 定时器触发dma读取引脚电平
![stm32f407 定时器触发dma读取引脚电平](https://img.taocdn.com/s3/m/cfce683ea36925c52cc58bd63186bceb19e8ede4.png)
1. 引言STM32F407是一款功能强大的32位微控制器,具有丰富的外设和强大的性能,适用于各种嵌入式应用。
其中,定时器和DMA是STM32F407外设中的重要组成部分。
本文将深入探讨STM32F407定时器触发DMA读取引脚电平的实现方法和应用。
2. STM32F407定时器在STM32F407微控制器中,定时器是一种非常重要的外设。
定时器可以定时产生中断或触发DMA传输,用于精确控制各种外设的工作时间。
在实际应用中,我们经常需要使用定时器来定时读取引脚的电平状态。
3. DMA传输DMA(Direct Memory Access)是一种数据传输方式,它可以在不经过CPU的情况下实现外设和内存之间的高速数据传输。
对于STM32F407来说,DMA外设可以帮助我们高效地处理大量数据,提高系统性能。
4. 定时器触发DMA读取引脚电平在实际应用中,我们可能需要在特定的时间间隔内,通过DMA方式读取某个引脚的电平状态。
这时,我们可以通过定时器来触发DMA 传输,实现精准的数据读取。
下面是具体的实现步骤:4.1 配置定时器我们需要配置定时器的工作模式、计数器周期和中断触发条件。
定时器可以根据我们的需求定时产生中断或触发DMA传输。
4.2 配置DMA接下来,我们需要配置DMA外设,设置传输方向、数据长度和触发条件。
DMA可以根据定时器的触发信号来发起数据传输。
4.3 读取引脚电平当定时器触发DMA传输时,DMA控制器会启动数据传输,将引脚的电平状态读取到指定的内存位置区域中。
5. 应用实例以一个简单的应用实例来说明上述方法的具体应用场景。
假设我们需要每隔1ms读取一次引脚A的电平状态,我们可以使用定时器的中断触发DMA传输来实现。
6. 总结与展望通过本文的介绍,我相信读者已经对STM32F407定时器触发DMA 读取引脚电平有了深入的了解。
在实际应用中,合理地利用定时器和DMA,可以极大地提高系统的性能和稳定性。
stm32f411定时开发实验原理
![stm32f411定时开发实验原理](https://img.taocdn.com/s3/m/7f9b6825dcccda38376baf1ffc4ffe473368fdac.png)
stm32f411定时开发实验原理STM32F411是意法半导体公司推出的一款高性能微控制器,主要应用于嵌入式系统中。
在实际的嵌入式系统开发中,定时功能非常重要,可以用于周期性地执行某些任务、控制外设、实现精确的时间延时等。
本文将从STM32F411定时功能的基本原理、定时器的使用方法以及实验原理三个方面进行详细介绍。
首先,我们来了解STM32F411定时功能的基本原理。
STM32F411的定时功能是通过内部的定时模块实现的,这个定时模块叫做定时器(TIM)。
STM32F411共有14个定时器,其中包括16位的通用定时器(TIM2-TIM5)、高级定时器(TIM1和TIM8)、基本定时器(TIM6和TIM7)等。
每个定时器都有不同的功能和特点,根据具体的需求选择相应的定时器进行开发。
STM32F411定时器的使用方法如下:首先,需要配置定时器的时钟源和分频系数,根据系统频率和需求选择合适的时钟源和分频系数。
然后,配置定时器的工作模式,包括计数方向、计数模式、自动重载和更新源等。
接下来,设置定时器的计数值和预分频系数,这两个参数决定了定时器的定时周期。
最后,选择定时器的事件触发源和中断触发源,并通过相关的中断函数来处理定时器的中断事件。
实验原理部分,我们以使用STM32F411的通用定时器TIM2为例,进行实验演示。
首先,需要在工程中包含相应的库文件(例如:stm32f4xx_hal_tim.h),并初始化相关的GPIO引脚设置为定时器模式。
然后,根据实际需求进行时钟设置和分频系数的配置。
接着,配置定时器的工作模式和定时周期,在这里我们选择了定时器的计数模式为向上计数、自动重载模式和周期计数模式。
然后,我们设置定时器的计数值和预分频系数,通过修改这两个参数可以控制定时的周期。
最后,选择定时器的中断触发源和中断优先级,并编写相应的中断处理函数。
在此基础上,可以实现定时任务的调度、外设的控制、精确的时间延时等功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32F4系列共有14个定时器,功能很强大。
14个定时器分别为:
2个高级定时器:Timer1和Timer8
10个通用定时器:Timer2~timer5 和 timer9~timer14
2个基本定时器: timer6和timer7
本篇欲以通用定时器timer3为例,详细介绍定时器的各个方面,并对其PWM功能做彻底的探讨。
Timer3是一个16位的定时器,有四个独立通道,分别对应着PA6 PA7 PB0 PB1
主要功能是:1输入捕获——测量脉冲长度。
2 输出波形——PWM输出和单脉冲输出。
Timer3有4个时钟源:
1:内部时钟(CK_INT),来自RCC的TIMxCLK
2:外部时钟模式1:外部输入TI1FP1与TI2FP2
3:外部时钟模式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_ARR
2定时器的计数器递增或递减计数。
3 事件更新。
4 计数器使能
2 TIM
3 控制寄存器 2 (TIM3_CR2)
3 TIM3 从模式控制寄存器 (TIM3_SMCR)
4 TIM3 DMA/中断使能寄存器 (TIM3_DIER)
作用:1:使能事件更新中断
2:使能捕获/比较中断
5 TIM3 状态寄存器 (TIM3_SR)
1:事件更新中断标志
2:捕获/比较中断标志
SYSCLK(最高
AHB_Presca
APBx_Presc
6 TIM3 事件生成寄存器(TIM3_EGR)
7 TIM3 捕获/比较模式寄存器 1 (TIM3_CCMR1)
1:输出比较模式
2:输出比较预装载使能,即使能后可以随时改变TIM3 捕获/比较寄存器 1 (TIM3_CCR1)的值
3:捕获/比较选择
8 TIM3 捕获/比较模式寄存器 2 (TIM3_CCMR2)
9 TIM3 捕获/比较使能寄存器(TIM3_CCER)
1:上升沿触发or下降沿触发
2:捕获/比较输出使能
10 TIM3 计数器(TIM3_CNT)
11 TIM3 预分频器(TIM3_PSC)
计数器时钟频率CK_CNT 等于f CK_PSC / (PSC[15:0] + 1)。
12 TIM3 自动重载寄存器(TIM3_ARR)
当自动重载值为空时,计数器不工作
难道说每次事件都必须装载重载值?
13 TIM3 捕获/比较寄存器 1 (TIM3_CCR1)
输出时:CCR1是捕获/比较寄存器的预装载值,由TIM3_CCMR的OC1PE位使能。
输入时:CCR1为上一个输入捕获事件(IC1)发生时的计数器值。
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)个定时器周期计数一次。
定时器时钟上文已经讲了,由于Timer3挂在APB1总线上
故Timer3进入中断的周期为(CK_PSC+1)* (TIM3_ARR+1)/84000000秒
频率为84000000/[(CK_PSC+1)* (TIM3_ARR+1)] Hz
利用官方库函数实现每500ms进入中断,改变LED灯的电平,程序如下
1 打开时钟,Timer3挂在APB1上,所以命令开启时钟。
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); ///使能TIM3时
钟
2 时钟Timer3的配置。
TIM_TimeBaseInitStructure.TIM_Period = arr; //自动重装载值TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3
3 使能中断
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许定时器3更新中断。
4 打开Timer3。
TIM_Cmd(TIM3,ENABLE); //使能定时器3
5 配置中断。
6 中断服务函数编写。
故可见STM32的初始化函数都离不开以下几步
1 打开设备时钟。
2 配置参数。
3 打开设备。
设备需配置后再打开。
如果需要配置中断,那么则需要编写中断服务函数。
完整程序如下
void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //使能TIM3时钟
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定时器分频TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数
TIM_TimeBaseInitStructure.TIM_Period = arr; //自动装载值
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许定时器3更新中断TIM_Cmd(TIM3,ENABLE); //使能定时器
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //定时器中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/Timer3中断服务函数
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)/ /溢出中断
{
GPIO_ToggleBits(GPIO_LED ,DS1_PIN); //LED灯电平翻转}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
}
然后main()函数中TIM3_Int_Init(5000-1,8400-1);即可
可以计算进入中断的频率为2Hz即LED灯每500ms亮一次,LED周期为1Hz。