STM32F4通用定时器详细讲解.docx

上传人:罗晋 文档编号:8740380 上传时间:2021-01-05 格式:DOCX 页数:5 大小:31.87KB
返回 下载 相关 举报
STM32F4通用定时器详细讲解.docx_第1页
第1页 / 共5页
STM32F4通用定时器详细讲解.docx_第2页
第2页 / 共5页
STM32F4通用定时器详细讲解.docx_第3页
第3页 / 共5页
STM32F4通用定时器详细讲解.docx_第4页
第4页 / 共5页
STM32F4通用定时器详细讲解.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《STM32F4通用定时器详细讲解.docx》由会员分享,可在线阅读,更多相关《STM32F4通用定时器详细讲解.docx(5页珍藏版)》请在三一文库上搜索。

1、最新 料推荐STM32F4 系列共有14 个定时器,功能很强大。14 个定时器分别为:2 个高级定时器:Timer1 和 Timer810 个通用定时器:Timer2timer5和 timer9timer142 个基本定时器:timer6 和 timer7本篇欲以通用定时器 timer3 为例,详细介绍定时器的各个方面, 并对其 PWM 功能做彻底的探讨。Timer3 是一个 16 位的定时器,有四个独立通道,分别对应着PA6PA7PB0PB1主要功能是: 1 输入捕获测量脉冲长度。2 输出波形PWM 输出和单脉冲输出。Timer3 有 4 个时钟源:1:内部时钟( CK_INT),来自 RC

2、C的 TIMxCLK2:外部时钟模式1:外部输入TI1FP1与 TI2FP23:外部时钟模式2:外部触发输入TIMx_ETR,仅适用于TIM2 、 TIM3、 TIM4 ,TIM3,对应着 PD2 引脚4:内部触发输入:一个定时器触发另一个定时器。时钟源可以通过TIMx_SMCR相关位进行设置。这里我们使用内部时钟。SYSCLK(最 高AHB_PrescalerAPBx_Prescaler168MHz)HCLKAPB1orAPB2/1 ,2,.512/1,2,4.APB1orAPB2定时器时钟1 APBx_precaler=12 APBx_precaler!=1定时器挂在高速外设时钟APB1

3、或低速外设时钟APB2 上,时钟不超过内部高速时钟HCLK,故当 APBx_Prescaler不为 1 时,定时器时钟为其 2 倍,当为 1 时,为了不超过 HCLK,定时器时钟等于 HCLK。例如:我们一般配置系统时钟SYSCLK为 168MHz,内部高速时钟AHB=168Mhz, APB1 欲分频为 4,(因为 APB1 最高时钟为42Mhz ),那么挂在APB1 总线上的timer3 时钟为 84Mhz 。 STM32F4xx 中文参考手册的424443 页列出与通用定时器相关的寄存器一共20 个,以下列出与Timer3 相关的寄存器及重要寄存器的简单介绍。1 TIM3 控制寄存器1 (

4、TIM3_CR1)1最新 料推荐作用: 1 使能自动重载TIM3_ARR2 定时器的计数器递增或递减计数。3 事件更新。4 计数器使能2 TIM3 控制寄存器2 (TIM3_CR2)3 TIM3 从模式控制寄存器(TIM3_SMCR)4 TIM3 DMA/ 中断使能寄存器(TIM3_DIER)作用: 1:使能事件更新中断2:使能捕获 / 比较中断5 TIM3 状态寄存器(TIM3_SR)1:事件更新中断标志2:捕获 / 比较中断标志6 TIM3 事件生成寄存器(TIM3_EGR)7 TIM3 捕获 / 比较模式寄存器1 (TIM3_CCMR1)1:输出比较模式2:输出比较预装载使能, 即使能后

5、可以随时改变TIM3 捕获 / 比较寄存器1(TIM3_CCR1)的值3:捕获 / 比较选择8 TIM3 捕获 / 比较模式寄存器2 (TIM3_CCMR2)9 TIM3 捕获 / 比较使能寄存器(TIM3_CCER)1:上升沿触发or 下降沿触发2:捕获 / 比较输出使能10 TIM3 计数器(TIM3_CNT)11 TIM3 预分频器(TIM3_PSC)计数器时钟频率CK_CNT等于f CK_PSC / (PSC15:0 + 1)。12 TIM3 自动重载寄存器(TIM3_ARR)当自动重载值为空时,计数器不工作难道说每次事件都必须装载重载值?13 TIM3 捕获 / 比较寄存器1 (TI

6、M3_CCR1)输出时: CCR1是捕获 / 比较寄存器的预装载值,由TIM3_CCMR 的 OC1PE位使能。输入时: CCR1为上一个输入捕获事件(IC1)发生时的计数器值。14 TIM3 捕获 / 比较寄存器 2(TIM3_CCR2)15 TIM3捕获 / 比较寄存器3(TIM3_CCR3)16 TIM3捕获 / 比较寄存器4(TIM3_CCR4)1 Timer3 用来做定时中断与之相关的时基单元寄存器有10 TIM3 计数器(TIM3_CNT)11 TIM3 预分频器(TIM3_PSC)12 TIM3 自动重载寄存器(TIM3_ARR)原理:2最新 料推荐这里以向上计数为例,即计数器T

7、IM3_CNT 向上计数,当达到TIM3_ARR 所设定的值时,归零重新计数,若使能了更新中断,则在TIM3_CNT归零时,进入中断。进入中断的时间为(TIM3_ARR+1)个计时器周期而计时器单元时钟是由定时器时钟分频得到,每 (CK_PSC+1)个定时器周期计数一次。定时器时钟上文已经讲了,由于Timer3 挂在 APB1总线上故 Timer3 进入中断的周期为 (CK_PSC+1)* (TIM3_ARR+1)/84000000 秒频率为 84000000/(CK_PSC+1)* (TIM3_ARR+1) Hz利用官方库函数实现每500ms 进入中断,改变LED灯的电平,程序如下1 打开时

8、钟, Timer3 挂在 APB1 上,所以命令开启时钟。RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);/ 使能 TIM3 时钟2 时钟 Timer3 的配置。TIM_TimeBaseInitStructure.TIM_Period = arr;/ 自动重装载值TIM_TimeBaseInitStructure.TIM_Prescaler=psc;/ 定时器分频TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; /向上计数模式TIM_TimeBaseInitStruc

9、ture.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);/初始化 TIM33 使能中断TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); / 允许定时器3 更新中断。4 打开 Timer3。TIM_Cmd(TIM3,ENABLE); / 使能定时器35 配置中断。6 中断服务函数编写。故可见 STM32 的初始化函数都离不开以下几步1 打开设备时钟。2 配置参数。3 打开设备。设备需配置后再打开。如果需要配置中断,那么则需要编写中断服务函数。完整程序

10、如下3最新 料推荐void TIM3_Int_Init(u16 arr,u16 psc)TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);/ 使能 TIM3 时钟TIM_TimeBaseInitStructure.TIM_Prescaler=psc;/ 定时器分频TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMod

11、e_Up; /向上计数TIM_TimeBaseInitStructure.TIM_Period = arr;/ 自动装载值TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);/初始化 TIM3TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); / 允许定时器 3 更新中断 TIM_Cmd(TIM3,ENABLE); / 使能定时器NVIC_InitStructure.NVIC_IRQChannel=TIM

12、3_IRQn; / 定时器中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; / 抢占优先级 1 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; / 子优先级 3 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStructure);/Timer3 中断服务函数void TIM3_IRQHandler(void)if(TIM_GetITStatus(TIM3,TIM_IT_Update)=SET)/ / 溢出中断GPIO_ToggleBits(GPIO_LED ,DS1_PIN);/LED 灯电平翻转TIM_ClearITPendingBit(TIM3,TIM_IT_Update);/ 清除中断标志位然后 main() 函数中 TIM3_Int_Init(5000-1,8400-1); 即可可以计算进入中断的频率为2Hz 即 LED灯每 500ms 亮一次, LED周期为 1Hz。4

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1