TIMSTM32cubemx教程:定时器TIM的入门指南

STM32cubemx教程及STM32入门(三)定时器 2022.8.23

简介

(hello大家好我又回来了,鸽了这么久十分抱歉,各位看官老爷轻喷。博主又要参加电赛了,刚好准备把去年学过的32资料再翻出来整理成博文,也刚好复习一下。今年前半年因为疫情原因一直在家摆烂,接下来几个月会两日一更,哈哈哈大家监督我。)
话不多说,我们进入正题
本章主要讲解STM32的定时器以及帮助大家使用CubeMX编写定时器中断程序,进行HAL库的学习和使用。

STM32定时器介绍

单片机的定时/计数器,故名思义就是用于精确定时一段时间后,执行特定代码程序的用途。使用定时器会比使用软件延时函数(delay)更加精准,举例应用如,基于STM32的频率计。定时器往往结合中断程序一起使用。
以STM32F103系列产品为例,其拥有:
4个通用定时器(TIM2~TIM5)
2个高级控制定时器(TIM1和TIM8),功能更强大
2个基本定时器(TIM6和TIM7),主要用于产生DAC触发信号
1个实时时钟(RTC)
2个看门狗定时器
1个系统滴答定时器(SysTick时钟),主要用于精确延时(delay函数)

通用定时器结构

时钟源结构图 (定时器时钟源结构图)

(时钟单元结构)

时钟源的选择

除内部时钟外,其他3种时钟源通过TRGI(触发)输入
(1)内部时钟,值得主要的是,定时器的内部时钟源不是直接来着APB1或APB2,而是APB1或APB2的一个倍频器
(2)外部时钟模式1,通过外部输入脚(TIx),包括外部比较捕获引脚TIF_ED,TI1FP1,TI1FP2。计数器可以在选定引脚的上升沿还是下降沿开始计数
(3)外部时钟模式2,计数器在ETR引脚的上升沿或下降沿开始计数
(4)内部触发输入(ITRx,x=0~3)意思是可以配置一个定时器作为另一个定时器的预分频器

定时器计数模式

向上计数模式
向下计数模式
中央对齐计数模式

定时时间计算

参考上面的结构图

我们能看到三个重要的寄存器
预分频器(PSC)
计数器(CNT)
自动重装载寄存器(ARR)

计数器寄存器 (TIMx_CNT)存储的是当前的计数值。预分频器 (TIMx_PSC)为多少个SK_PSC脉冲计数一次,预分频器的值为1(预分频寄存器默认为0,为不分频),则为两个脉冲计数一次。即为二分频。简单来说,如果要10000分频,则预分频器的值为10000-1。
自动重装寄存器 (TIMx_ARR)存储的是计数器的溢出值,例如,计数器递增计数到36计数器溢出,触发一次事件。而实际上为37个脉冲触发一次溢出事件(从0开始计数)。
记住该公式即可,大家一定要熟练掌握定时时间计算!!!!!!!!!

使用STM32Cubemx编写定时器中断程序的步骤

首先和之前一样,我们先选择HSE外部晶振
然后开始配置时钟树,设置如下图所示,使定时器主频为72MHz。而TIM2是挂接在APB1上的,所以也就是要让APB1这儿最终为72MHz

接着回到pinout&configuration界面,选择左边timers中的定时器,以TIM2为例,下图正中即为TIM2配置界面
简单介绍一下各个配置选项
Slave Mode和Trigger Source都是用于上文说到的设置定时器主从配置的选项,暂时用不到
Clock Source:定时器时钟源,选择Internal Clock
下面的Channel全关disable即可
然后看正下方,如下图所示
填入PSC的值为35999
触发模式为上升沿触发(也可以选择down为下降沿)
ARR的值为999
CKD(时钟分频因子)选择no Division不分频
preload这项是定时器使能,选enable
这样填ARR和PSC的值实现的是主频72MHz定时器定时0.5s

不会计算的去前面看公式和那个例题

接下来开定时器中断

最后就是generate,下图为使用clion的配置演示(注意第一个红圈文件名要和clion里面生成的ioc文件名一样,否则不能覆盖),如果是用keil的朋友,IDE那一个红圈那要选MDK-ARM
这是TIM2初始化函数,里面就是我们刚才的配置代码和一些异常接口
这是和定时器相关的一些函数,我们了解一下就行我们只要在中断回调函数HAL_TIM_PeriodElapsedCallback()中编写程序就可
即在main函数中重写中断回调函数

物联沃分享整理
物联沃-IOTWORD物联网 » TIMSTM32cubemx教程:定时器TIM的入门指南

发表评论