【STM32学习笔记】第二章:STM32的定时器中断配置

  第一章我给大家讲解了关于STM32最基本的GPIO知识,这一章我给大家讲接一下定时器的知识。
  什么是定时器?,它是类似于秒表样的东西,它是一个单片机用来计时的工具。
  什么是中断?,中断好比你在做一件事情突然被另外一件事情打断,然后去做另外一件事情。等另外一件事情做完了以后,又回来做之前做的事情。比如我在炒菜突然开水壶开了,那么我就去先把火关了以后再回来炒菜。
  我们可以通过定时器中断去做一些什么操作呢?,我们可以通过定时器去做一些规律性或者周期性活动。比如定时采集电压值、获取温湿度等一些需要实时监测的值。
下面我给大家来介绍一下定时器的内部配置。

一、准备工作

这里我们要想配置定时器并验证需要的准备工作如下:

1、MDK for ARM(KEIL5)或者IAR FOR ARM(这个是软件必备开发平台)

2、一块STM32最小系统开发板(这个是验证软件的平台)

3、这里最好有一本关于STM32学习的书籍(这里就不推荐了,网上有一大把)

4、万用表(测试硬件是否正常工具)

二、具体的操作

1、工程建立

  这里我们需要一个根据自己的开发板配套的基础工程。工程建立就不多说了可以参考我的STM32CUBUMX工程建立博客,或者用其它的Demo例程。定时器配置参考例程

2、定时器初始化配置

  下面我给大家分享一部分代码。

  htim1.Instance = TIM1;
  htim1.Init.Prescaler = 7200-1;
  htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim1.Init.Period = 10000-1;
  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim1.Init.RepetitionCounter = 0;
  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;

从上面代码我们可以看到HAL库里面的定时器1(TIM1)配置,首先
1)htim1.Instance = TIM1;
这句话是外设设备选择定时器1。
2)htim1.Init.Prescaler = 7200-1;
这里是设置定时器的分频系数,这里取决於单片机的时钟线给定时器分配的时钟。我们单片机配置的是72M主频,这里我们要把定时器分频为10K的时钟频率,这样方便我们计算定时器的具体定时时间。
3)htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
这里设定的是定时器的计数模式,TIM_COUNTERMODE_UP这个是指向上计数。
4)htim1.Init.Period = 10000-1;
这里是设置的定时器向上计数的最大值。这里设置的10K,意思是计数10k才触发一次中断,而定时器时钟也是10K,所以这里定时的时间是1秒钟。
5)htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
这里也是设置时钟分频系数,我们这里填写TIM_CLOCKDIVISION_DIV1是代表不分频。
6)htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
这里设置的是定时器自动重装他的上限值,因为每定时完成一次中断他的htim1.Init.Period会清零,如果想要不停地产生1S的定时器中断,这里必须设置成TIM_AUTORELOAD_PRELOAD_ENABLE使能定时器自动重装。

3、定时器使用

定时器是以中断的方式去使用的代码如下:

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if (htim->Instance == htim1.Instance)
	{
		LED ^= 1;
	}
}

这里是给大家粘贴了HAL库里面的定时器中断。
我这里中断处理是将LED这个变量异或去反,这里大家可以去自己设定想要的功能哦。

4、总结

总的来说,定时器配置在STM32里面比较的简单易懂。希望大家认真读懂我写的文章,玩转STM32还是没问题的!~

有问题欢迎加 QQ:380390633,乐意给大家答疑~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章