STM32定时器Page2TIMER模块的位置STM32中一共有8个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器。Page3定时器时钟来源定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器。当APB的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB的频率;当APB的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB的频率两倍。72MHz72MHzPage4基本定时器结构72MHz0~655350~65535Page5工作模式向上计数模式Page6相关库函数恢复初始状态voidTIM_DeInit(TIM_TypeDef*TIMx);TIM1TIM2...TIM8Page7相关库函数基本配置voidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef*TIM_TimeBaseInitStruct)TIM1TIM2...TIM8typedefstruct{uint16_tTIM_Prescaler;uint16_tTIM_CounterMode;uint16_tTIM_Period;uint16_tTIM_ClockDivision;uint8_tTIM_RepetitionCounter;}TIM_TimeBaseInitTypeDef;预分频系数0~65535对应1~65536分频计数周期数0~65535计数模式TIM_CounterMode_UpTIM_CounterMode_DownTIM_CounterMode_CenterAligned1TIM_CounterMode_CenterAligned2TIM_CounterMode_CenterAligned3基本定时器只能是向上计数,不需设置。定义在定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例TIM_CKD_DIV1TIM_CKD_DIV2TIM_CKD_DIV4基本定时器不需设置。重复计数器基本定时器不需设置。Page8相关库函数中断使能voidTIM_ITConfig(TIM_TypeDef*TIMx,uint16_tTIM_IT,FunctionalStateNewState)TIM1TIM2...TIM8Page9常用库函数voidTIM_Cmd(TIM_TypeDef*TIMx,FunctionalStateNewState)Page10常用库函数ITStatusTIM_GetITStatus(TIM_TypeDef*TIMx,uint16_tTIM_IT)Page11常用库函数voidTIM_ClearITPendingBit(TIM_TypeDef*TIMx,uint16_tTIM_IT)Page12程序设计步骤定时器基本配置时钟使能:RCC_APB1PeriphClockCmd初始化:TIM_DeInit基本配置:TIM_TimeBaseInit中断事件设置:TIM_ITConfig定时器使能:TIM_Cmd定时器中断配置NVIC_PriorityGroupConfig,NVIC_Init主程序中断服务程序TIM6_IRQHandlerPage13定时器基本配置voidTIM6_Configuration(void){TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;//使能时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);TIM_DeInit(TIM6);TIM_TimeBaseStructure.TIM_Prescaler=7199;TIM_TimeBaseStructure.TIM_Period=9999;TIM_TimeBaseInit(TIM6,&TIM_TimeBaseStructure);TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);TIM_Cmd(TIM6,ENABLE);}Page14定时器中断配置voidNVIC_Configuration(void)//嵌套向量中断控制器配置{NVIC_InitTypeDefNVIC_InitStructure;//选择优先级组别1位抢占优先级3位子优先级NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//设置TIM1中断//1级抢占式优先级,0级副优先级,使能引脚作为中断源NVIC_InitStructure.NVIC_IRQChannel=TIM6_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);}Page15中断服务程序voidTIM6_IRQHandler(void){if(TIM_GetITStatus(TIM6,TIM_IT_Update)==SET){TIM_ClearITPendingBit(TIM6,TIM_IT_Update);//...}}Page16课堂练习设计程序,实现定时功能。思路:定义全局变量Hour,Min,Sec,设置定时器每1s中断1次,主程序循环显示变量,中断服务程序更改变量。Page17课堂练习设计程序,实现秒表功能。思路:定义全局变量Min,Sec,CentiSec,设置定时器每0.01s中断1次,主程序循环显示变量,中断服务程序更改变量。Page18高级定时器高级控制定时器(TIM1和TIM8)和通用定时器(TIM2,TIM3,TIM4,TIM5)在基本定时器的基础上引入了外部引脚,可以实现输入捕获和输出比较功能。高级控制定时器比通用定时器增加了可编程死区互补输出、重复计数器、带刹车(断路)功能,这些功能都是针对工业电机控制方面。Page19高级和通用定时器通道引脚分布Page20Page21高级定时器时钟源①内部时钟源CK_INT。(72MHz)②内部触发输入ITRx。(x=1,2,3,4)-来自其他定时器,用于定时器级联。③外部触发输入TIMx_ETR。(x=1,2,3,4,8)④外部输入引脚TI1FP1,TI2FP2。触发控制器对片内外设输出触发信号,比如为其它定时器提供时钟和触发DAC/ADC转换。从模式控制器控制计数器复位、启动、递增/递减、计数编码器④定时计数Page22时基单元①预分频器PSC-0~65535对应1至65536分频②计数器CNT③自动重载寄存器ARR④重复计数器RCR高级定时器独有。typedefstruct{uint16_tTIM_Prescaler;uint16_tTIM_CounterMode;uint16_tTIM_Period;uint16_tTIM_ClockDivision;uint8_tTIM_RepetitionCounter;}TIM_TimeBaseInitTypeDef;Page23工作模式向上计数模式Page24工作模式向下计数模式Page25工作模式中央对齐模式(向上/向下计数)Page26输出比较Page27PWM边沿对齐模式有效电平无效电平Page28PWM输出配置函数voidTIM_OCxInit(TIM_TypeDef*TIMx,TIM_OCInitTypeDef*TIM_OCInitStruct);typedefstruct{uint16_tTIM_OCMode;uint16_tTIM_OutputState;uint16_tTIM_OutputNState;uint32_tTIM_Pulse;//捕获脉冲值uint16_tTIM_OCPolarity;uint16_tTIM_OCNPolarity;uint16_tTIM_OCIdleState;uint16_tTIM_OCNIdleState;}TIM_OCInitTypeDef;TIM_OCMode_Timing输出比较时间模式TIM_OCMode_Active输出比较主动模式TIM_OCMode_Inactive输出比较非主动模式TIM_OCMode_Toggle输出比较触发模式TIM_OCMode_PWM1脉冲宽度调制模式1TIM_OCMode_PWM2脉冲宽度调制模式2输出使能TIM_OutputState_DisableTIM_OutputState_Enable输出使能TIM_OutputNState_DisableTIM_OutputNState_Enable有效电平TIM_OCPolarity_HighTIM_OCPolarity_Low有效电平TIM_OCNPolarity_HighTIM_OCNPolarity_Low空闲电平TIM_OCIdleState_SetTIM_OCIdleState_Reset空闲电平TIM_OCNIdleState_SetTIM_OCNIdleState_ResetPage29蜂鸣器电路TIM1_CH1Page30TIM1PWM输出配置GPIO引脚配置使能PA时钟用GPIO_Init()函数配置PA8为复用推挽输出(GPIO_Mode_AF_PP)TIM基本配置使能TIM1时钟TIM_TimeBaseInit();TIM输出配置TIM_OC1Init()注意:不需要中断Page31voidTIM1_Configuration(void){TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;GPIO_InitTypeDefGPIO_InitStructure;TIM_OCInitTypeDefTIM_OCInitStructure;//输出比较通道GPIO初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);Page32RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);//定时1msTIM_TimeBaseStructure.TIM_Period=999;TIM_TimeBaseStructure.TIM_Prescaler=71;//时钟分频因子TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//计数器计数模式,设置为向上计数TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseStructure.TIM_RepetitionCounter=0;TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);Page33//配置为PWM模式1TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//输出使能TIM_OCInitStr