STM32定时器解析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第6讲STM32定时器实验六定时器实验实验目的:掌握定时器的工作原理与编程实现定时的方法。实验内容:1)利用TIM2定时500ms,LED1、LED3同时亮灭一次;TIM3定时2s,LED2、LED4亮灭一次。2)利用SysTick实现定时1秒钟,LED切换一次亮灭状态。主要内容6.1STM32定时器概述6.2通用定时器TIMx相关寄存器6.3库函数6.4程序设计方法6.5系统时钟SysTick简介6.6SysTick应用实例6.1STM32定时器概述名为TIMx的定时器有8个,其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在APB1总线上。APB2可以工作在72MHz下,而APB1最大是36MHz。定时器都是16位的。通用定时器4个:TIM2、TIM3、TIM4和TIM5。它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。高级定时器2个:TIM1和TIM8。比通用定时器功能更强大,适用于更多场合。基本定时器2个:TIM6和TIM7。主要用于产生DAC触发信号,也可当做通用的16位时基计数器。通用TIMX定时器主要功能(1)16位向上、向下、向上/向下自动装载计数器(2)16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值(3)4个独立通道:①输入捕获;②输出比较;③PWM生成(边缘或中间对齐模式);④单脉冲模式输出(4)使用外部信号控制定时器和定时器互连的同步电路。(5)如下事件发生时产生中断/DMA:更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发);触发事件(计数器启动、停止、初始化或者由内部/外部触发计数);输入捕获;输出比较;支持针对定位的增量(正交)编码器和霍尔传感器电路;触发输入作为外部时钟或者按周期的电流管理。6.2通用定时器TIMX相关寄存器CR1:控制寄存器1CR2:控制寄存器2SMCR:从模式控制寄存器DIER:DMA/中断使能寄存器SR:状态寄存器EGR:事件产生寄存器CCMR1:捕获/比较模式寄存器1CCMR2:捕获/比较模式寄存器2CCER:捕获/比较使能寄存器CNT:计数器寄存器PSC:预分频寄存器APR:自动重装载寄存器CCR1:捕获/比较寄存器1CCR2:捕获/比较寄存器2CCR3:捕获/比较寄存器3CCR4:捕获/比较寄存器4DCR:DMA控制寄存器DMAR:连续模式的DMA地址寄存器控制寄存器1(TIMX_CR1)CEN:使能计数器。0:禁止计数器;1:使能计数器。DIR:方向(Direction)。0:计数器向上计数;1:计数器向下计数。CMS[1:0]:选择中央对齐模式(Center-alignedmodeselection)参见“STM32中文参考手册_V10.pdf”从模式控制寄存器(TIMX_SMCR)SMS[2:0]:从模式选择(Slavemodeselection)000:关闭从模式,如果CEN=1,则预分频器直接由内部时钟驱动。DMA/中断使能寄存器(TIMX_DIER)位0(UIE):允许更新中断(Updateinterruptenable)。0:禁止更新中断;1:允许更新中断。状态寄存器(TIMX_SR)位0(UIF):更新中断标记(Updateinterruptflag)当产生更新事件时该位由硬件置’1’。它由软件清’0’。0:无更新事件产生;1:更新中断等待响应。当寄存器被更新时该位由硬件置’1’:−若TIMx_CR1寄存器的UDIS=0、URS=0,当TIMx_EGR寄存器的UG=1时产生更新事件(软件对计数器CNT重新初始化);−若TIMx_CR1寄存器的UDIS=0、URS=0,当计数器CNT被触发事件重初始化时产生更新事件。(参考同步控制寄存器的说明)6.3库函数TIM_DeInit:将外设TIMx寄存器重设为缺省值。TIM_TimeBaseInit:根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位。TIM_TimeBaseStructInit:把TIM_TimeBaseInitStruct中的每一个参数按缺省值填入。TIM_Cmd:使能或者失能TIMx外设。TIM_ITConfig:使能或者失能指定的TIM中断。TIM_PrescalerConfig:设置TIMx预分频TIM_GetFlagStatus:检查指定的TIM标志位设置与否TIM_ClearFlag:清除TIMx的待处理标志位TIM_ClearITPendingBit:清除TIMx的中断待处理位函数TIM_TIMEBASEINIT功能:根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位。函数原形:voidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef*TIM_TimeBaseInitStruct)其中,TIMx:x可以是2,3或者4,来选择TIM外设。TIMTimeBase_InitStruct:指向结构TIM_TimeBaseInitTypeDef的指针,包含了TIMx时间基数单位的配置信息。TIM_TIMEBASEINITTYPEDEFSTRUCTUREtypedefstruct{u16TIM_Period;/*TIM_Period设置了在下一个更新事件装入活动的自动重装载寄存器周期的值,0x0000和0xFFFF之间*/u16TIM_Prescaler;/*TIM_Prescaler设置了用来作为TIMx时钟频率除数的预分频值*/u8TIM_ClockDivision;/*TIM_ClockDivision设置了时钟分割*/u16TIM_CounterMode;/*TIM_CounterMode选择了计数器模式*/}TIM_TimeBaseInitTypeDef;TIM_ClockDivision描述TIM_CKD_DIV1TDTS=Tck_timTIM_CKD_DIV2TDTS=2Tck_timTIM_CKD_DIV4TDTS=4Tck_timTDTS:数字滤波器使用的采样频率Tck_tim:定时器时钟频率暂时不涉及数字滤波器,这项先不考虑TIM_CounterMode描述TIM_CounterMode_UpTIM向上计数模式TIM_CounterMode_DownTIM向下计数模式TIM_CounterMode_CenterAligned1TIM中央对齐模式1计数模式TIM_CounterMode_CenterAligned2TIM中央对齐模式2计数模式TIM_CounterMode_CenterAligned3TIM中央对齐模式3计数模式例:TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Period=0xFFFF;TIM_TimeBaseStructure.TIM_Prescaler=0xF;TIM_TimeBaseStructure.TIM_ClockDivision=0x0;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);定时时间的计算定时时间=(Period+1)*(Prescaler+1)/TIMxCLK当Prescaler≠1时,TIMxCLK=72MHz当Prescaler=1时,TIMxCLK=36MHz函数TIM_CMD功能描述:使能或者失能TIMx外设函数原形:voidTIM_Cmd(TIM_TypeDef*TIMx,FunctionalStateNewState)TIMx:x可以是2,3或者4,来选择TIM外设NewState:外设TIMx的新状态,ENABLE或者DISABLE例:/*EnablestheTIM2counter*/TIM_Cmd(TIM2,ENABLE);函数TIM_ITCONFIG功能描述:使能或者失能指定的TIM中断函数原形:voidTIM_ITConfig(TIM_TypeDef*TIMx,u16TIM_IT,FunctionalStateNewState)TIMx:x可以是2,3或者4,来选择TIM外设TIM_IT:待使能或者失能的TIM中断源NewState:TIMx中断的新状态。ENABLE或者DISABLETIM_IT值:例:/*EnablestheTIM2CaptureComparechannel1Interruptsource*/TIM_ITConfig(TIM2,TIM_IT_CC1,ENABLE);函数TIM_PRESCALERCONFIG功能描述:设置TIMx预分频函数原形:voidTIM_PrescalerConfig(TIM_TypeDef*TIMx,u16Prescaler,u16TIM_PSCReloadMode)TIM_PSCReloadMode:预分频重载模式例:/*ConfigurestheTIM2newPrescalervalue*/u16TIMPrescaler=0xFF00;TIM_PrescalerConfig(TIM2,TIMPrescaler,TIM_PSCReloadMode_Immediate);函数TIM_GETFLAGSTATUS功能描述:检查指定的TIM标志位设置与否函数原形:FlagStatusTIM_GetFlagStatus(TIM_TypeDef*TIMx,u16TIM_FLAG)TIMx:x可以是2,3或者4,来选择TIM外设TIM_FLAG:待检查的TIM标志位返回值:TIM_FLAG的新状态(SET或者RESET)例:/*CheckiftheTIM2CaptureCompare1flagissetorreset*/if(TIM_GetFlagStatus(TIM2,TIM_FLAG_CC1)==SET){}TIM_FLAG值:函数TIM_CLEARFLAG功能描述:清除TIMx的待处理标志位函数原形:voidTIM_ClearFlag(TIM_TypeDef*TIMx,u32TIM_FLAG)TIMx:x可以是2,3或者4,来选择TIM外设TIM_FLAG:待清除的TIM标志位例:/*CleartheTIM2CaptureCompare1flag*/TIM_ClearFlag(TIM2,TIM_FLAG_CC1);函数TIM_CLEARITPENDINGBIT功能描述:清除TIMx的中断待处理位函数原形:voidTIM_ClearITPendingBit(TIM_TypeDef*TIMx,u16TIM_IT)TIMx:x可以是2,3或者4,来选择TIM外设。TIM_IT:待检查的TIM中断待处理位。例:/*CleartheTIM2CaptureCompare1interruptpendingbit*/TIM_ClearITPendingBit(TIM2,TIM_IT_CC1);6.4程序设计方法包含头文件声明函数声明变量主函数函数调用主循环程序段配置系统时钟、使能外设时钟子函数配置GPIO子函数配置NVIC子函数配置定时器子函数延时子函数中断服务子函数声明函数:#includestm32f10x.hvoidDelay(vu32nCount);voidRCC_Configuration(void);voidGPIO_Configuration(void);voidNVIC_Configuration(void);voidTIM2_

1 / 49
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功