STM32配置定时器(库函数版本)

本文章以STM32F407ZGTx为例:
STM32F407一共有14个定时器,其中有两个基本定时器(TIM6和TIM7)、十二个通用定时器(TIM2 ~ TIM5,TIM9 ~ TIM14)、两个高级定时器(TIM1和TIM8)。由于定时器的功能比较繁多和复杂,这里就不介绍这些定时器的功能了。
接着我们开始配置我们的定时器,我这里以TIM2为例。
首先我们要开启TIM2的时钟
在这里插入图片描述
一般通用定时器的时钟都在APB1总线上。
接着我们对TIM2进行初始化
在这里插入图片描述
一般的通用定时器都是这样配置,通用定时器的配置主要是对通用定时器的初始化,这里使用的是stm32f4xx_tim.c文件里的TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)函数对通用定时器初始化,初始化的内容主要是对TIM_TimeBaseInitStruct里面的元素进行赋值,然后传递给该函数。当然我们要知道定时器溢出的时间 = (自动重转载值 + 1) × (分频系数 + 1) ÷ 定时器的时钟频率。
接着就是允许并打开TIM2的中断以及对NVIC的初始化
在这里插入图片描述
NVIC的配置主要是对NVIC的初始化,这里使用的是misc.c文件里的NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)函数对NVIC初始化,初始化的内容主要是对NVIC_InitStruct里面的元素进行赋值,然后传递给该函数。
最后就是编写中断服务函数啦
在这里插入图片描述
我们可以通过获取通用定时器2的中断标志位来判断是否为通用定时器2产生的中断,获取中断标志位的函数在stm32f4xx_tim.c文件中TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)或TTIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT)我主要使用的第二个函数。每次进入中断后要对中断标志位进行软件清零。我这里通过stm32f4xx_tim.c文件中的TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)函数进行清零。我这里主要是通过通用定时器来实现LED的闪烁。
以上就已经将通用定时器配置完毕了,但这样配置的可移植性很差,所有我在其头文件中加了一些宏定义来扩展他的可移植性。
在这里插入图片描述
这样初始化函数就可以改成这样
在这里插入图片描述
定时器中断服务函数可以改成这样
在这里插入图片描述
这样就可以之间通过改变宏定义来更改初始化的通用定时器啦。
PS:其实这种方法也不是很完整,只是我比较懒并且这个方法我修改起来也比较熟练。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值