STM32学习之:定时器简介

发布者:Lianai最新更新时间:2018-10-21 来源: eefocus关键字:STM32  定时器简介 手机看文章 扫描二维码
随时随地手机看文章

本文为STM32定时器设计大体简介。
 一、定时器简介
1、时钟来源


2、定时器结构(以基本定时器为例)


二、基本定时器的编程方法
1、基本定时器的寄存器


2、例程
/**
* @brief 定时器6的初始化,定时周期0.01s
* @param 无
* @retval 无
*/
void TIM6_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
/*AHB = 72MHz,RCC_CFGR的PPRE1 = 2,所以APB1 = 36MHz,TIM2CLK = APB1*2 = 72MHz */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
/* 时基初始化 */
TIM_TimeBaseStructure.TIM_Period = 99; //当定时器从0计数到99,即定时周期为100次
TIM_TimeBaseStructure.TIM_Prescaler = 7199; //设置预分频:10KHz
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);
TIM_ARRPreloadConfig(TIM6, ENABLE); //使能TIM6重载寄存器ARR
/* 设置更新请求源只在计数器上溢或下溢时产生中断 */
TIM_UpdateRequestConfig(TIM6,TIM_UpdateSource_Global);
/* 定时器6的上溢或下溢中断使能 */
TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);
/* 定时器6启动 */
TIM_Cmd(TIM6, ENABLE); //使能定时器6
TIM_ClearITPendingBit(TIM6,TIM_IT_Update);
/* 定时器6的NVIC中断配置 */
NVIC_TIM6_Configuration();
}
三、疑惑与解答
以下问题皆以基本定时器为例进行阐述
1、何谓更新事件
更新事件就是指这个事件发生后,将会将定时器的寄存器进行更新,以使定时器工作在新的配置下,例如当一个定时周期结束(计数器上溢)或者其他事件。
2、何谓自动重装载寄存器(auto-reload register)
自动重装载寄存器决定了定时器的上溢时机,当定时器的计数器中数值达到了自动重装载寄存器规定的值,计数器就要归零。也就是说自动重装载寄存器决定了定时器的周期。假定TIMx_ARR=0x36,而且分频系数为1,则可以看到下边的情况。


3、自动重装载寄存器和预加载寄存器的区别与联系
当“TIMx_CR1.ARPE = 1”的时候,STM32中有自动重装载寄存器和预加载寄存器(TIMx_ARR)。
预加载寄存器是自动重装载寄存器的“影子”,也就是预加载寄存器是自动重装载寄存器的缓冲器。自动重装载寄存器的功能在2点已经说明,但是自动重装载寄存器不是用户用程序可以直接进行操作的,用户需要借助于预加载寄存器(缓冲区)才能访问它。
其目的是为了保证自动重装载寄存器在合适的时候被修改,不允许其随便被修改,否则可能导致在过渡的时候发生不期望的结果。
这是什么一个概念呢?
在定时器一个周期结束的时候,产生了一个更新中断,我们在中断服务程序中修改预加载寄存器(TIMx_ARR),但是并没有直接写入到自动重装载寄存器。在中断刚一产生的时候(早于我们的服务程序),原来TIMx_ARR的值被硬件自动装入自动重装载寄存器中。所以下一个定时器周期的长度取决于“原来TIMx_ARR的值”,而非我们在中断服务程序中的修改值。
那么什么时候,我们的修改值才起作用呢?
当下一个定时器周期结束的时候,我们对TIMx_ARR的修改值就被硬件自动写入到自动重装载寄存器中,所以我们的修改值在下下个定时器周期才起作用。
而当“TIMx_CR1.ARPE = 0”的时候,STM32中只有自动重装载寄存器(TIMx_ARR),没有预加载寄存器。自动重装载寄存器没有缓冲区,对TIMx_ARR的修改,也就是直接对自动重装载寄存器的修改。
这种情形又怎样看呢?
在定时器一个周期结束的时候,产生了一个更新中断,我们在中断服务程序中修改自动重装载寄存器(TIMx_ARR)。所以下一个定时器周期的定时长度要取决于我们的这个修改值。
总结:
① TIMx_CR1.ARPE = 0,自动重装载寄存器没有缓冲区,对TIMx_ARR的修改直接影响下一个周期的定时长度。
② TIMx_CR1.ARPE = 1,自动重装载寄存器有缓冲区,对TIMx_ARR的修改影响的是下下一个周期的定时长度。
③ TIMx_CR1.ARPE = 1,自动重装载寄存器有缓冲区预加载寄存器(TIMx_ARR),预加载寄存器更新到自动重装载寄存器的时机是:当定期器一个定时周期结束产生一个更新事件的时候。
④ TIMx_CR1.ARPE = 1,注意我们在写程序的时候,给TIMx_ARR赋值,并没有真正的写入到自动重装载寄存器中,而是写入到了预加载寄存器中。
当我们需要定时器以T1和T2交替工作:
⑤ TIMx_CR1.ARPE = 0,自动重装载寄存器没有缓冲区,我们是在T1定时周期已经开始一会儿的时候,才去设定定时周期T1长度;在T2定时周期已经开始一会儿的时候,才去设定定时周期T2长度。因为当T1结束的时候,中断发生后,我们在中断程序中设定定时周期为T2。其实,此时定时器周期T2已经开始一段时间了。要知道定时器一个周期结束的时候,硬件自动进入下一个周期的计数,而不受软件的控制。
⑥ TIMx_CR1.ARPE = 1,自动重装载寄存器有缓冲区,我们是在T1定时周期一开始,就去设定定时周期T1的长度;在T2定时周期一开始,就去设定定时周期T2的长度。因为当T1结束的时候,更新事件产生(中断也发生),(我们在上一个定时周期的中断程序中已经设定定时周期为T2),TIMx_ARR中的T2值被硬件更新进入到自动重装载寄存器中。
⑦ 当T1、T2两个周期都很大的时候,需要ticks比较多,两种方式都不会出现错误。
但是当T1、T2两个周期都很小的时候,需要ticks比较少,对于“TIMx_CR1.ARPE = 0”的情况,就有可能出现问题。因为有可能在T1定时周期已经超过T1时间长度的时候,才去设定定时周期T1;在T2周期已经超过T2时间长度的时候,才去设定定时周期T2。
总结:
在需要不断切换定时器的周期时,而且周期都比较短,程序员需要通过预加载寄存器配合自动重装载寄存器,来操作定时器,以保证定时器周期的平稳过渡。
自动重装载寄存器是预加载的,每次读写自动重装载寄存器时,实际上是通过读写预加载寄存器实现。根据TIMx_CR1 寄存器中的自动重装载预加载使能位(ARPE) ,写入预加载寄存器的内容能够立即或在每次更新事件时,传送到它的影子寄存器。

关键字:STM32  定时器简介 引用地址:STM32学习之:定时器简介

上一篇:STM32学习之:Context—M3简介
下一篇:STM32学习之:定时器时间计算

推荐阅读最新更新时间:2024-03-16 16:17

STM32——MCU结构简述(中英文对照)
首先STM32 MCU是什么? 其实他就是一个微控制单元(MicroController Unit) NVIC 嵌套向量中断控制器(Nested Vectored Interrupt Controller)(优先级) 作用 用于为中断分组,从而分配抢占优先级和响应优先级 SysTick 系统节拍定时器(system TIck ) 作用 具有自动重载和溢出中断功能,所有基于Cortex_M3处理器的微控制器都可以由这个定时器获得一定的时间间隔 Flash 存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM的优
[单片机]
<font color='red'>STM32</font>——MCU结构简述(中英文对照)
STM32基于固件库学习笔记(1)GPIO基本使用
GPIO初始化函数: void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); /* 第一个参数是用来指定 GPIO,取值范围为 GPIOA~GPIOG 第二个参数为初始化参数结构体指针,结构体类型为 GPIO_InitTypeDef */ GPIO_InitTypeDef结构体 typedef struct { uint16_t GPIO_Pin;//配置端口管脚 GPIOSpeed_TypeDef GPIO_Speed;// IO 口速度设置 输出速度(只有输出模式才配置速度) GPIOMode_TypeDef GPIO_Mode;// IO
[单片机]
STM32 I2C配置
首先配置 I2C 1. 通过 APB 复位 I2C, 使能 I2C 时钟 2. 使能 GPIO 时钟, 配置 GPIO 在 AF OD 模式 3. 使能 I2C ( PE= 1 ) 4. 设置速度参数 FREQ CCR F/S DUTY TRISE A : CR2.FREQR = 期望的I2C时钟, 一般设置为最大的时钟 36 MHz 确定了 Tck = 1 / FREQ -- 类似于 CANBus 的时间片 Tq B : PE= 0 , 设置适当的 CCR F/S DUTY 以及 TRISE, PE= 1 标准模式 Tlow : Thigh = 1 : 1 快速模式 Tlow : Thigh = 2 : 1 ( D
[单片机]
STM32HAL库学习(二)CubeMx按键
首先是找到电路图,按键是高电平按下还是低电平按下 GPIO八种模式 https://blog.csdn.net/hailin0716/article/details/24333951 上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平。而在信号输入为低电平是输入端的电平应该也为低电平。 按键是按下时是高电平时,那无信号输入时要保持低电平,下拉输入 枚举KEYState_TypeDef 定义按键的两种状态 typedef enum{ KEY0_UP, KEY0_DOWN, KEY1_UP, KEY1_DOWN }KEYState_typedef; 函数有个 KEYState_TypeDef 类型的返回值
[单片机]
STM32HAL库学习(二)CubeMx按键
STM32 CAN 通讯 标示符过滤器设置
简介:最近看了下STM32 CAN 通讯其中标示符过滤器设置大有讲究。特别是你要使用ST库函数时,当过滤器工作在屏蔽模式下,并且你把屏蔽位设了1也就是标示符对应位必须全部匹配才能通过,这是由其要小心。 举个例子吧,过滤器长度为32位,模式为屏蔽模式,假如我要发送的标示符为0x1314;那过滤器设置如下 一、过滤器完全无效 接收到的标示符全部通过 0x1314 二进制码: 0000 0000 0000 0000 0001 0011 0001 0100 CAN_Filter xxxx xxxx xxxxxxxx xxxx xxxx xxxx xxxx CAN_FilterMask 0000 0000 0000 00
[单片机]
中断之外部中断
ARM Cortex M3共有256个中断。 STM32F103CB共有43个外部中断和16个内部中断。 具有相同数值编号的IO口被分配为同一组,共用一条中断请求线,如下图: 所以共有15条中断线,另外 ●EXTI线16连接到PVD输出 ●EXTI线17连接到RTC闹钟事件 ●EXTI线18连接到USB唤醒事件 寄存器:1、外部中断配置寄存器 AFIO_EXTxCR1------- 用于选择输入中断源 Pin 0..3     AFIO_EXTxCR2------- 用于选择输入中断源 Pin 0..7     AFIO_EXTxCR2-------
[单片机]
中断之外部中断
STM32-(14):端口复用与重映射
复用功能(AF)(Alternative Function) 使用默认复用功能前必须对端口位配置寄存器编程。 对于复用的输入功能,端口可以配置成: ①:输入模式(浮空、上拉或下拉)(模拟输入不走复用这条线前面内部结构篇幅中提到过) ②:复用功能输出模式:输入驱动器被配置成浮空输入模式 对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。 对于双向复用功能,端口位必须配置复用功能输出模式(推挽或开漏)。这时,输入驱 动器被配置成浮空输入模式。 如果把一端口配置成复用输出功能,将使引脚和输出寄存器断开,并和片上外设的输出信号 连接。 如果软件把一个 GPIO 脚配置成复用输出功能,但是外设没有被激活,它的输出将不确
[单片机]
STM32-(14):端口复用与重映射
143条 超详细整理STM32单片机学习笔记(必看)
1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2 1,意思是APB2接高速设备 2、Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf.h专门控制外围器件的配置,也就是开关头文件的作用 3、HSE Osc(High Speed External Oscillator)高速外部晶振,一般为8MHz,HSI RC(High Speed InternalRC)高速内部RC,8MHz 4、LSE Osc(Low Speed External Oscillator)低速外部晶振,一般为32.768KHz,LSI RC(Low Speed InternalRC
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved