新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > STM32学习笔记——利用通用定时器TIM2进行精确延时

STM32学习笔记——利用通用定时器TIM2进行精确延时

作者: 时间:2016-11-28 来源:网络 收藏

1.3.4自动重装载寄存器(TIMx_ARR)

1.3.5状态寄存器(TIMx_SR)

本篇中主要关心该寄存器第0位

当产生溢出时,该标记位被置1,执行更新事件后由软件清0。

其他众多关于TIM寄存器可查阅《STM32F10x参考手册》

1.4基本计数中断过程

按照自己的理解,使能中断及定时器后,根据时钟来源以及预分频器(TIMx_PSC)所设置的分频数开始计数,当计数达到自动重装载寄存器(TIMx_ARR)中所存储的值时,状态寄存器(TIMx_SR)中对应的标志位(第0位)置1,通过软件检查该位则可以更新事件。

例如:系统中APB1(TIM2被挂在APB下)时钟频率为36MHz,设置TIMx_PSC分频为36000,则作为定时器TIM2的时钟频率为36000000/36000=1000Hz,即1秒内内部开关计数1000次,每次1ms,设置TIMx_ARR重装值为1000,则计数达1000次时,TIMx_SR中第0位标志位被置1,此时为延迟1秒。

2TIM固件库函数

2.1函数TIM_DeInit

函数名

TIM_DeInit

函数原型

voidTIM_DeInit(TIM_TypeDef*TIMx)

功能描述

将外设TIMx寄存器重设为缺省值

输入参数

TIMx:x可以是2、3或4,来选择TIM外设

被调用函数

RCC_APB1PeriphClockCmd().

例:重设TIM2

[cpp]view plaincopy
  1. TIM_DeInit(TIM2);

2.2函数TIM_TimeBaseInit

函数名

TIM_TimeBaseInit

函数原型

voidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef*TIM_TimeBaseInitStruct)

功能描述

根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

输入参数1

TIMx:x可以是2、3或4,来选择TIM外设

输入参数2

TIMTimeBase_InitStruct:指向结构TIM_TimeBaseInitTypeDef的指针,包含了TIMx时间基数单位的配置信息

参阅Section:TIM_TimeBaseInitTypeDef查阅更多该参数允许取值范围.

TIM_TimeBaseInitTypeDefstructure

TIM_TimeBaseInitTypeDef定义于文件“stm32f10x_tim.h”:

[cpp]view plaincopy
  1. typedefstruct
  2. {
  3. u16TIM_Period;
  4. u16TIM_Prescaler;
  5. u8TIM_ClockDivision;
  6. u16TIM_CounterMode;
  7. }TIM_TimeBaseInitTypeDef;

TIM_Period

TIM_Period设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在0x0000和0xFFFF之间。

TIM_Prescaler

TIM_Prescaler设置了用来作为TIMx时钟频率除数的预分频值。它的取值必须在0x0000和0xFFFF之间。

TIM_ClockDivision

TIM_ClockDivision设置了时钟分割。该参数取值见下表。

TIM_ClockDivision

描述

TIM_CKD_DIV1

TDTS=Tck_tim

TIM_CKD_DIV2

TDTS=2Tck_tim

TIM_CKD_DIV4

TDTS=4Tck_tim

TIM_CounterMode

TIM_CounterMode选择了计数器模式。该参数取值见下表。

TIM_CounterMode

描述

TIM_CounterMode_Up

TIM向上计数模式

TIM_CounterMode_Down

TIM向下计数模式

TIM_CounterMode_CenterAligned1

TIM中央对齐模式1计数模式

TIM_CounterMode_CenterAligned2

TIM中央对齐模式2计数模式

TIM_CounterMode_CenterAligned3

TIM中央对齐模式3计数模式

例:

[cpp]view plaincopy
  1. TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
  2. TIM_TimeBaseStructure.TIM_Period=0xFFFF;
  3. TIM_TimeBaseStructure.TIM_Prescaler=0xF;
  4. TIM_TimeBaseStructure.TIM_ClockDivision=0x0;
  5. TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  6. TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

2.3函数TIM_ClearFlag

函数名

TIM_ClearFlag

函数原型

voidTIM_ClearFlag(TIM_TypeDef*TIMx,u32TIM_FLAG)

功能描述

清除TIMx的待处理标志位

输入参数1

TIMx:x可以是2,3或者4,来选择TIM外设

输入参数2

TIM_FLAG:待清除的TIM标志位

参阅Section:TIM_FLAG查阅更多该参数允许取值范围

TIM_FLAG值

TIM_FLAG

描述

TIME_FLAG_Update

TIM更新标志位

……

……

例:

[cpp]view plaincopy
  1. TIM_ClearFlag(TIM2,TIME_FLAG_Update);

2.4函数TIM_ITConfig

函数名

TIM_ITConfig

函数原型

voidTIM_ITConfig(TIM_TypeDef*TIMx,u16TIM_IT,FunctionalState

NewState)

功能描述

使能或者失能指定的TIM中断

输入参数1

TIMx:x可以是2,3或者4,来选择TIM外设

输入参数2

TIM_IT:待使能或者失能的TIM中断源

参阅Section:TIM_IT查阅更多该参数允许取值范围

输入参数3

NewState:TIMx中断的新状态

这个参数可以取:ENABLE或者DISABLE



评论


技术专区

关闭