【STM32F4】HAL库 CubeMX(七)--------定时器中断实验


前言

接下来我们将学习定时器的三大基本功能,定时器中断,输出PWM,输入捕获。

一、定时器是什么?

STM32F4 的通用定时器包含一个 16 位或 32 位自动重载计数器(CNT),该计数器由可编程预分频器(PSC)驱动。STM32F4 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。 使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32F4 的每个通用定时器都是完全独立的,没有互相共享的任何资源。
STM3 的通用 TIMx (TIM2~TIM5 和 TIM9~TIM14)定时器功能包括:
1)16 位/32 位(仅 TIM2 和 TIM5)向上、向下、向上/向下自动装载计数器(TIMx_CNT),注意:TIM9~TIM14 只支持向上(递增)计数方式。
2)16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~65535 之间的任意数值。
3)4 个独立通道(TIMx_CH1-CH4,TIM9~TIM14 最多 2 个通道),这些通道可以来作为:
A.输入捕获
B.输出比较
C.PWM 生成(边缘或中间对齐模式) ,注意:TIM9~TIM14 不支持中间对齐模式
D.单脉冲模式输出

4)可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)的同步电路。
5)如下事件发生时产生中断/DMA(TIM9~TIM14 不支持 DMA):
A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
C.输入捕获
D.输出比较
E.支持针对定位的增量(正交)编码器和霍尔传感器电路(TIM9~TIM14 不支持)
F.触发输入作为外部时钟或者按周期的电流管理(TIM9~TIM14 不支持)

由于 STM32F4 通用定时器比较复杂,这里我们不再多介绍,请大家直接参考《STM32F4xx中文参考手册》第 392 页,通用定时器一章。

二、定时器中断实验

1.功能配置

1、根据库函数本实验是以定时器3为例,在功能选择区选择TIM3。
2、根据库函数配置,选择对应的参数
在这里插入图片描述
在这里插入图片描述
TIM3 的时钟为 84M,再根据我们设计的 arr 和 psc 的值,就可以计算中断时间了。计算公式如下:
Tout= ((arr+1)*(psc+1))/Tclk;
其中:
Tclk:TIM3 的输入时钟频率(单位为 Mhz)。
Tout:TIM3 溢出时间(单位为 us)
在这里插入图片描述
在这里插入图片描述
3、为了测试实验,同样用两个LED来检测
在这里插入图片描述
4、对于中断--------我有话要说
大家可以看到上面,对于中断配置了两个参数,抢占优先级和响应优先级。如果中断仅有一个的时候,在CubeMX不设置也没关系,有默认参数。但是在大型程序里面中断优先级会有很大影响,可以在NVIC中设置两个变量。
在这里插入图片描述

2.时钟配置

RCC时钟配置如前文一样(此处一般情况是不变的)。
【STM32F4】HAL库 CubeMX(一)--------创建工程(点亮LED)

3.生成代码

1、加入宏定义和函数定义
在这里插入图片描述

#define LED0_Reversal()	HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_9)
#define LED1_Reversal()	HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_10)
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);

2、加入下列代码即可验证实验
在这里插入图片描述

	  LED0_Reversal();
	  HAL_Delay(200);
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim == &htim3)//确定是定时器三中断
	{
		 LED1_Reversal();
	}//不需要清除标志位
}

总结

因为定时器较重要,所以在这里说一点关于中断细节。
在stm32f4xx_hal_tim.h中
在这里插入图片描述
在这里插入图片描述
根据上述,所以我们在编写中断服务函数的时候,仅需要判断是哪个定时器的中断,而不需要判断中断产生的原因(分为不同的中断服务函数)以及清除标志位。
在这里插入图片描述

  • 21
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值