STM32的定时器使用介绍

前言

代码中想用个延时,有两种方式:一种是用软件延时,即在代码中加一个延时函数,但同时有一个缺点:不精确且占用CPU资源。还有一种就是使用定时器,它使用的是精准的时基,通过硬件的方式,实现定时功能。此次介绍的就是如何使用STM32的定时器功能实现延时。话不多说,加快上车吧。

定时器的分类

在STM32中定时器分三类:

  • 基本定时器(TIM6~TIM7)
  • 通用定时器(TIM2~TIM5)
  • 高级定时器(TIM1和TIM8)
    主要功能分类如下图:
    在这里插入图片描述
    以STM32F103C8T6单片机为例,它的定时器资源包括如下:
    在这里插入图片描述
    通过对照上面分类可以发现:它有1个高级定时器和3个通用定时器。因为接下来将使用通用定时器,所以作一下通用定时器的介绍,加深理论上的理解:
    在这里插入图片描述

定时器的工作原理

定时器核心就是计数器(如下图所示)。
在这里插入图片描述定时器的计数模式
在这里插入图片描述
定时器的时钟源
关于这部分感兴趣可以自己对着图去理解,笔者在此不做解释。剪不断,理还乱的感觉。(附图)
在这里插入图片描述定时器溢出时间计算公式:
对于我们去配定时器的使用,这一步才是关键。因为我们配好相关参数值,其他交给硬件去实现就行了。
在这里插入图片描述
例如,要定时500ms,则:PSC=7199,ARR=4999,Tclk=72M。

工程配置

功能实现:使用定时器TIM2中断方法,每500ms翻转一次LED1灯状态。

  1. RCC配置
    在这里插入图片描述
  2. LED1灯配置
    查看电路原理图,如图:
    在这里插入图片描述
    在STM32CubeMX配置如下:
    在这里插入图片描述
  3. 时钟数配置
    在这里插入图片描述
  4. TIM2配置
    在这里插入图片描述
    在这里插入图片描述
    代码实现
    在STM32CubeMX中完成配置,生成代码后,进入keil5中。在main.c中重写更新中断回调函数。代码如下:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == TIM2)
		HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8); //调用翻转函数
}

在主函数中启动定时器:
在main.c中,定时器初始化命令之后加入下列代码:

HAL_TIM_Base_Start_IT(&htim2);

编译、下载进入开发板。观察现象。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值