stm32f4xx-定时器

一、硬件定时器

1、定义

​ 设置等待时间,到达后则执行指定的操作的硬件

2、STM32F407的定时器有以下特征

在这里插入图片描述

​ 具有基本的定时功能,也有PWM输出(灯光的亮度控制、电机的转速)、脉冲捕获功能(红外捕捉)

2个高级定时器、10个通用定时器和2个基本定时器

高级定时器(TIM1 和 TIM8 ),挂载到APB2

​ 具有16位定时器功能,也具有PWM输出高级控制功能

通用定时器(TIM2 到 TIM5),挂载到APB1

​ 具有16位定时器功能,也具有PWM输出控制功能

通用定时器(TIM9 到 TIM14 ),挂载到APB1和APB2

​ 具有16位定时器功能,也具有PWM输出控制功能

基本定时器:(TIM6 和 TIM7),挂载到APB1

​ 具有16位定时器功能

a.所有的定时器都能实现最基本的定时功能

b.基本定时器是专门提供给音频的输出接口

c.计数器模式:向上,向下,向上下

d.DMA(直接存储器访问)请求:传输数据只需要通过DMA,不用经过CPU,减少CPU的占用

e.PWM是脉冲宽度调制,在工业应用领域用途非常广泛

f.16位可编程分频器,用于对计数器时钟频率进行分频(运行时修改),分频系数1~65536之间

注:

TIM是TIMER单词的缩写

通用定时器与高级定时器(CH表示输出通道)

3、计数模式

在这里插入图片描述

二、定时计算

《STM32F4XX中文参考手册.pdf》108页

STM32F405xx/07xx和STM32F415xx/17xx的定时器时钟频率由硬件自动设置。分为两种情况:

1、如果APB预分频器为1,定时器时钟频率等于APB域(APB1和APB2)的频率(一般预分频器不可能为1)

2、否则,等于APB域(APB1和APB2)的频率的两倍

关于APB1与APB2预分频值得说明在system_stm32f4xx.c文件的头部,详细描述如下
在这里插入图片描述

关于APB1和APB2预分频值设置在system_stm32f4xx.c文件,详细代码如下:

在这里插入图片描述

3、定时器硬件时钟

在这里插入图片描述

4.定时500ms

//计数值 84000000/8400 = 10000hz/2,决定定时时间1/2秒

TIM_TimeBaseStructure.TIM_Period = (10000/2)-1; 

TIM_TimeBaseStructure.TIM_Prescaler = 8400-1;   //预分频值 8400-1 + 1 = 8400 

//向上计数的方法

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;        

8400 

//向上计数的方法

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;        

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

三、库函数

使能定时器硬件时钟

在这里插入图片描述

定时器初始化

在这里插入图片描述

配置定时器

在这里插入图片描述

定时器使能

在这里插入图片描述

1.使能定时器硬件时钟

2.定时器的硬件配置

3.配置定时器分频值、计数值等

4.使能定时器更新定时器的中断触发

5.配置定时器中断nvic优先级

6.定时器中断服务函数

test

void tim3_init(void)
{
	//使能TIM3的硬件时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
 
	//TIM3的硬件配置
	//配置定时器3分频值、技术值等等
	TIM_TimeBaseStructure.TIM_Period = (10000/2)-1;	//计数值 84000000/8400 = 10000hz/2,决定定时时间1/2秒
	TIM_TimeBaseStructure.TIM_Prescaler = 8400-1;	//预分频值 8400-1 + 1 = 8400 
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;		//向上计数的方法	
//	TIM_TimeBaseStructure.TIM_ClockDivision = 0;	//在F407是不支持
	
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
	
	//配置定时器3中断的触发方式:时间更新
	TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
	
	//开启TIM3的NVIC中断
	NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn;				//定时器3的请求通道
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x02;	//抢占优先级
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x02;			//响应优先级
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;				//使能该通道中断
	NVIC_Init(&NVIC_InitStruct);
	
	
	//使能定时器3工作
	TIM_Cmd(TIM3, ENABLE);
}

//定时器3中断服务函数
void TIM3_IRQHandler(void)
{
	//判断TIM3是否有中断请求
	if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)
	{
		PFout(9) ^= 1;
		
		//清空标志位,告诉CPU,已经完成当前中断处理,可以响应新的中断请求
		TIM_ClearITPendingBit(TIM3, TIM_IT_Update);			
	}
}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yengi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值