STM32-定时器

上传人:206****923 文档编号:88627286 上传时间:2019-05-05 格式:PPT 页数:36 大小:1.92MB
返回 下载 相关 举报
STM32-定时器_第1页
第1页 / 共36页
STM32-定时器_第2页
第2页 / 共36页
STM32-定时器_第3页
第3页 / 共36页
STM32-定时器_第4页
第4页 / 共36页
STM32-定时器_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《STM32-定时器》由会员分享,可在线阅读,更多相关《STM32-定时器(36页珍藏版)》请在金锄头文库上搜索。

1、STM32 定时器,TIMER模块的位置,STM32中一共有8个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器。,定时器时钟来源,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器。 当APB的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB的频率;当APB的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB的频率两倍。,72MHz,72MHz,基本定时器结构,72MHz,065535,065535,工作模式,向上计数模式,相关库函数,恢复初始状态 void TIM_De

2、Init(TIM_TypeDef* TIMx);,相关库函数,基本配置 void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct),typedef struct uint16_t TIM_Prescaler; uint16_t TIM_CounterMode; uint16_t TIM_Period; uint16_t TIM_ClockDivision; uint8_t TIM_RepetitionCounter; TIM_TimeBaseInitTypeDef;,相关库函

3、数,中断使能 void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState),常用库函数,void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState),常用库函数,ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT),常用库函数,void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT),程序设计步骤,定时器基本配

4、置 时钟使能:RCC_APB1PeriphClockCmd 初始化:TIM_DeInit 基本配置:TIM_TimeBaseInit 中断事件设置:TIM_ITConfig 定时器使能:TIM_Cmd 定时器中断配置 NVIC_PriorityGroupConfig,NVIC_Init 主程序 中断服务程序 TIM6_IRQHandler,定时器基本配置,void TIM6_Configuration(void) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /使能时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_

5、TIM6, ENABLE); TIM_DeInit(TIM6); TIM_TimeBaseStructure.TIM_Prescaler = 7199; TIM_TimeBaseStructure.TIM_Period = 9999; TIM_TimeBaseInit(TIM6, ,定时器中断配置,void NVIC_Configuration(void) /嵌套向量中断控制器配置 NVIC_InitTypeDef NVIC_InitStructure; /选择优先级组别 1位抢占优先级 3位子优先级 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1)

6、; /设置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( ,中断服务程序,void TIM6_IRQHandler(void) if(TIM_Get

7、ITStatus(TIM6,TIM_IT_Update)=SET) TIM_ClearITPendingBit(TIM6,TIM_IT_Update); /. ,课堂练习,设计程序,实现定时功能。 思路:定义全局变量Hour,Min,Sec,设置定时器每1s中断1次,主程序循环显示变量,中断服务程序更改变量。,课堂练习,设计程序,实现秒表功能。 思路:定义全局变量Min,Sec,CentiSec,设置定时器每0.01s中断1次,主程序循环显示变量,中断服务程序更改变量。,高级定时器,高级控制定时器(TIM1 和 TIM8)和通用定时器(TIM2,TIM3,TIM4,TIM5)在基本定时器的基础

8、上引入了外部引脚,可以实现输入捕获和输出比较功能。 高级控制定时器比通用定时器增加了可编程死区互补输出、重复计数器、带刹车(断路)功能,这些功能都是针对工业电机控制方面。,高级和通用定时器通道引脚分布,高级定时器时钟源, 内部时钟源 CK_INT。(72MHz) 内部触发输入ITRx。(x=1,2,3,4) - 来自其他定时器,用于定时器级联。 外部触发输入TIMx_ETR。(x=1,2,3,4,8) 外部输入引脚 TI1FP1,TI2FP2。,触发控制器 对片内外设输出触发信号,比如为其它定时器提供时钟和触发 DAC/ADC 转换。,从模式控制器 控制计数器复位、启动、递增/递减、计数,编码

9、器,定时,计数,时基单元, 预分频器 PSC - 065535 对应 1至65536分频 计数器 CNT 自动重载寄存器 ARR 重复计数器 RCR 高级定时器独有。,typedef struct uint16_t TIM_Prescaler; uint16_t TIM_CounterMode; uint16_t TIM_Period; uint16_t TIM_ClockDivision; uint8_t TIM_RepetitionCounter; TIM_TimeBaseInitTypeDef;,工作模式,向上计数模式,工作模式,向下计数模式,工作模式,中央对齐模式(向上/向下计数),输

10、出比较,PWM 边沿对齐模式,有效电平,无效电平,PWM输出配置函数,void TIM_OCxInit(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);,typedef struct uint16_t TIM_OCMode; uint16_t TIM_OutputState; uint16_t TIM_OutputNState; uint32_t TIM_Pulse;/捕获脉冲值 uint16_t TIM_OCPolarity; uint16_t TIM_OCNPolarity; uint16_t TIM_OCIdleState;

11、 uint16_t TIM_OCNIdleState; TIM_OCInitTypeDef;,TIM_OCMode_Timing 输出比较时间模式 TIM_OCMode_Active 输出比较主动模式 TIM_OCMode_Inactive 输出比较非主动模式 TIM_OCMode_Toggle 输出比较触发模式 TIM_OCMode_PWM1 脉冲宽度调制模式 1 TIM_OCMode_PWM2 脉冲宽度调制模式 2,输出使能 TIM_OutputState_Disable TIM_OutputState_Enable,输出使能 TIM_OutputNState_Disable TIM_Ou

12、tputNState_Enable,有效电平 TIM_OCPolarity_High TIM_OCPolarity_Low,有效电平 TIM_OCNPolarity_High TIM_OCNPolarity_Low,空闲电平 TIM_OCIdleState_Set TIM_OCIdleState_Reset,空闲电平 TIM_OCNIdleState_Set TIM_OCNIdleState_Reset,蜂鸣器电路,TIM1_CH1,TIM1 PWM输出配置,GPIO引脚配置 使能PA时钟 用GPIO_Init()函数配置PA8为复用推挽输出(GPIO_Mode_AF_PP) TIM基本配置

13、使能TIM1时钟 TIM_TimeBaseInit(); TIM输出配置 TIM_OC1Init(),注意:不需要中断,void TIM1_Configuration( void ) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; / 输出比较通道 GPIO 初始化 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA , ENABLE ); GPIO_InitS

14、tructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, ,RCC_APB2PeriphClockCmd( RCC_APB2Periph_TIM1 , ENABLE ); / 定时1ms TIM_TimeBaseStructure.TIM_Period = 999; TIM_TimeBaseStructure.TIM_Prescaler = 71; / 时钟分频

15、因子 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; / 计数器计数模式,设置为向上计数 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit( TIM1 , ,/ 配置为PWM模式1 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; / 输出使能 TIM_OCInitStructure

16、.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; / 设置占空比大小 TIM_OCInitStructure.TIM_Pulse = 499; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;/ 有效电平为高 TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; /空闲输出低电平 TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset; TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号