通用定时器概述
STM32F4 的定时器有14个,其中TIM2-TIM5,TIM9~TIM14属于通用定时器,TIM1 和TIM8 则属于高级控制定时器,TIM6和TIM7是基本定时器。
TIM2 到 TIM5 主要特性
16 位(TIM3 和 TIM4)或 32 位(TIM2 和 TIM5) 递增、递减和递增/递减自动重载计数器。
16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改) ,分频系数介于 1 到 65536 之间。
多达 4 个独立通道,可用于:
— 输入捕获
— 输出比较
— PWM 生成(边沿和中心对齐模式)
— 单脉冲模式输出
使用外部信号控制定时器且可实现多个定时器互连的同步电路。
发生如下事件时生成中断/DMA 请求(6个独立的IRQ/DMA请求生成器):
— 更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)
— 触发事件(计数器启动、停止、初始化或通过内部/外部触发计数)
— 输入捕获
— 输出比较
支持定位用增量(正交)编码器和霍尔传感器电路
外部时钟触发输入或逐周期电流管理
TIM9 到 TIM14 主要特性
16 位自动重载递增计数器(属于中等容量器件)
16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数
介于 1 和 65536 之间
多达 2 个独立通道,可用于:
— 输入捕获
— 输出比较
— PWM 生成(边沿对齐模式)
— 单脉冲模式输出
使用外部信号控制定时器且可实现多个定时器互连的同步电路
发生如下事件时生成中断:
— 更新:计数器上溢、计数器初始化(通过软件或内部触发)
— 触发事件(计数器启动、停止、初始化或者由内部触发计数)
— 输入捕获
— 输出比较
定时器的时钟来源有 4 个:
1)内部时钟(CK_INT)
2)外部时钟模式 1:外部输入脚(TIx)
3)外部时钟模式 2:外部触发输入(ETR) ,仅适用于 TIM2、TIM3、TIM4
4)内部触发输入(ITRx) :使用 A 定时器作为 B 定时器的预分频器(A 为 B 提供时钟) 。
这些时钟,具体选择哪个可以通过 TIMx_SMCR 寄存器的相关位来设置。这里的 CK_INT时钟是从 APB1 倍频的来的,除非 APB1 的时钟分频数设置为 1(一般都不会是 1) ,否则通用定时器 TIMx 的时钟是 APB1 时钟的 2 倍,当 APB1 的时钟不分频的时候,通用定时器 TIMx的时钟就等于 APB1 的时钟。这里还要注意的就是高级定时器以及 TIM9~TIM11 的时钟不是来自 APB1,而是来自 APB2 的。
定时器配置中断的步骤
使能定时器时钟。
RCC_APB1PeriphClockCmd();
初始化定时器,配置ARR,PSC。
TIM_TimeBaseInit();
启定时器中断,配置NVIC。
NVIC_Init();
设置 TIM3_DIER 允许更新中断
TIM_ITConfig();
使能定时器。
TIM_Cmd();
编写中断服务函数。
TIMx_IRQHandler();
以TIM3为例,延时1秒点亮led灯
tim.c
#include "tim.h"
/*
定时器说明:
TIM3 -- APB1
定时器TIM3:84MHZ
16位定时器:值范围:0~65535
*/
void Tim3_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
//1、使能定时器时钟。
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
//8400分频 84000 000/8400 = 10000HZ 1S数10000个数
TIM_TimeBaseInitStruct.TIM_Prescaler = 8400-1;
TIM_TimeBaseInitStruct.TIM_Period = 10000-1; //计10000个数 在10000HZ下,用时1s
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseInitStruct.TIM_ClockDivision= TIM_CKD_DIV1; //分频因子
//2、初始化定时器,配置ARR,PSC。
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);
//NVIC通道,在stm32f4xx.h可查看通道 (可变)
NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x01; //抢占优先级
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x01; //响应优先级
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //使能
//3、启定时器中断,配置NVIC。
NVIC_Init(&NVIC_InitStruct);
//4、设置 TIM3_DIER 允许更新中断
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
//5、使能定时器。
TIM_Cmd(TIM3, ENABLE);
}
//编写中断服务函数。这个函数不需要程序员在主函数调用,满足条件CPU自行调用的函数
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
{
/*处理的程序段*/
GPIO_ToggleBits(GPIOE, GPIO_Pin_14);
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
}
上一篇:初学stm32-Systick滴答时钟定时
下一篇:初学stm32-PWM的应用-呼吸灯
推荐阅读最新更新时间:2024-11-13 10:33
推荐帖子
- TI AM5728 开发板 USB接口测试
- AM5728开发板JN-mini5728的USB为叠层接口,上边为USB2.0接口,下边为USB3.0接口。下面我们开始进行USB接口测试:1USB热插拔测试将2.0U盘连接到USB2.0接口,热插拔信息如下图1所示:图1将3.0U盘连接到USB3.0接口,热插拔信息如下图2所示:图2从图1可知USB3-1成功挂载了一个3.91GB的2.0U盘,挂载名是sda,该U盘只有一个分区sda4
- 匠牛社区 工控电子
- MSP430G2553的程序怎么改到F149上使用
- 求助:MSP430G2553的程序怎么改到F149上使用,我有G2553的MLX90614测温程序,现在想移植到F149上实验,可以怎么修改?MSP430G2553的程序怎么改到F149上使用2553的程序应该不是你写的,否则应该很清楚该怎么改吧。 对啊。。那您知道这些寄存器怎么转换吗或者在网上怎么搜这种?
- zzyy0929 微控制器 MCU
- 去上海华为搞手机终端驱动开发怎么样?
- 本人工作四年,前面三年多时间一直从事家电领域变频空调的产品开发,但受困于行业发展实在内耗太大,利润太薄,且开发周期过长,成就感不足.于是开始找工作,得到华为口头offer.但一等就是2月,才发正式offer.但这时已经在另外一家比较大的公司从事消费电子产品开发,因刚成立,产品方案基本都由方案公司做,核心算法一类基本接触不到.但主管从国外过来,能带来一些比较新的开发理念.公司有一些ARM9开发板,也可以自己研究捣鼓一些linux,图形界面,驱动之类.但个人搞感觉进展较慢.如果去华为,可能会在驱
- popcoffee 嵌入式系统
- 谁有E金币 25个 可以通过支付宝转账
- 想买个U盘,差25枚金币,谁有可以通过支付宝转账25元谁有E金币25个可以通过支付宝转账我有,请管理帮忙处理下哥们,留个QQ吧,我的121732421,联系我,然后我请管理帮忙转E金币给你已经帮忙处理!maylove发表于2015-9-2514:49已经帮忙处理! 谢了
- 908508455a 淘e淘
- 自制小台钻
- 又是废物利用自制小台钻原帖由ZYXWVU于2010-2-2111:09发表又是废物利用37313 想知道钻头和电机轴之间用什么固定的?...................................
- ZYXWVU 创意市集
- 低功耗控制
- 各位兄弟们,我有个问题想问一下,我用的是STM32F103芯片,用了一个系统中断函数SysTick_ITConfig(ENABLE);在中断函数中voidSysTick_Handler(void){__WFI();}用了__WFI();这句话,编译后下到板子里面,但是当我第二次烧录的时候,提示JTAG不能使用了,好像JTAG不能下程序了,连续两块板子都是这样,请问__WFI();这个函数跟JTAG有什么关系,为什么我在系统中断里面加了这句话后,重新烧录程序时不
- pl89721 stm32/stm8
设计资源 培训 开发板 精华推荐
- 用于电信稳压器的 LT8705EFE 同步降压-升压型 DC/DC 控制器的典型应用电路
- TAR5S45 点稳压器(低压差稳压器)的典型应用
- STEVAL-ILL056V1,基于 LED5000 的 3A 降压 LED 驱动器评估板
- C3010200_XL6013E1芯片方案验证板
- 鸢尾立方->IIC实时时钟模块 DS3231+EEPROM Ver1.1
- #第八届立创电赛#桌面时钟摆件
- LTM8052AEY ±5A、2.5V、2 象限稳压器的典型应用
- AM1/4S-0515SH30Z 15V 0.25 瓦 DC/DC 转换器的典型应用
- 使用 NXP Semiconductors 的 MC13892VK 的参考设计
- L78L15AC输出升压电路正电压稳压器的典型应用