发新帖

[原创] 【STM32F723E-DISCO开发板试用体验】+基本定时器

[复制链接]
发表于 2017-7-5 15:32:06
| 1136 查看 | 6 回复

这一讲,笔者主要跟大家一起学习一下基本定时器的使用,笔者这几天在“微雪课堂”学习STM32CubeMX的一些例程,现学现卖,就拿到这来给大家分享了,当然,大部分内容,还是沿用了“微雪课堂”里面的资料,笔者只是在他们的教程基础上,根据自己实际的实际操作,跟大家一步一步学习如何使用STM32CubeMX来玩转STM32F723E-DISCO。

我们首先用STM32CubeMX新建一个工程,详细的步骤之前有介绍过,在此就不再赘述了,这里我们主要是来看一下定时器的配置,以定时器TIM3为例,首先,我们需要开启定时器TIM3,选择内部时钟。



定时器就相当于单片机的闹钟,下面我们以基本定时器为例简单介绍一下定时器。



上面是基本定时器框图,从上图中我们可以看到,基本定时器主要由下面三个寄存器组成。


-->计数器寄存器 (TIMx_CNT)

-->预分频器寄存器(TIMx_PSC)

-->自动重载寄存器(TIMx_ARR)


计数器寄存器 (TIMx_CNT)存储的是当前的计数值。预分频器寄存器(TIMx_PSC)为多少个SK_PSC脉冲计数一次,如下图所示预分频器的值为1(预分频器寄存器默认为0,为不分频),则为两个脉冲计数一次,即二分频。如果要10000分频,则预分频器的值为10000-1。



自动重载寄存器(TIMx_ARR)存储的是计数器的溢出值,例如下图中的计数器递增计数到36时,计数器溢出,触发一次事件。而实际上为37个脉冲触发一次溢出事件(从0开始计数)。



要确定定时的时间,我们必须先确定CK_PSC的频率,TIM3配置中选择内部时钟作为时钟源,查看数据手册或者查看代码可以知道,TIM3是挂接到APB1时钟线上的。





内部时钟设置为不分频(CKD),则CK_PSC的时钟频率等于APB1的时钟频率108MHz。若要定时时间为1S,即可设置10800分频(预分频器寄存器(TIMx_PSC)的值为10800-1),定时器的时钟CK_CNT的频率为10000HZ,则自动重载寄存器(TIMx_ARR)设置为10000-1,即定时器定时为1s。TRGO为触发输出,可触发内部ADC/DAC,这里我们没有用到这个功能,参数为默认设置。



定时器有如下三种计数模式:


-->递增计数模式:计数器从0计数到自动重载值,然后重新从0开始计数并生成计数器上溢事件。

-->递减计数模式:计数器从自动重载值开始递减到0,然后重新开始从自动重载值开始计数并生成计数器下溢事件。

-->中心对齐模式:计数器从0开始计数到自动重载值-1,生成计数器上溢事件;然后从自动重载值开始向下计数到1并生成计数器下溢事件,之后从0开始重新计数。


在NVIC Settings框勾选开启定时器中断,优先级为默认。



或者在NVIC配置中使能定时器TIM3中断。



配置完毕后,我们就可以自动生成代码了,前面有介绍过,在此就不再赘述了。


打开生成的工程文件,打开main.c文件。在 USER CODE BEGIN 4和USER CODE END 4中间添加中断回调函数。定时器中断处理函数中翻转一次LED。



在main.c文件中while(1)循环前面的USER CODE BEGIN 2和USER CODE END 2之间添加如下代码启动基本定时器中断模式计数。



重新编译程序,编译通过后下载到STM32F723E-DISC开发板,按复位可以看到LED5和LED6间隔1秒闪烁一次:



现在我们再次分析一下程序。工程中配置TIM3定时器选择内部时钟不分频作为时钟源,挂载到APB1时钟总线上(108MHz),设置为递增计数模式,预分频器设置为10800-1,即10800分频,最后定时器的频率为10000HZ。一个脉冲的时间为1/10000s。则若要定时1s,则自动重载寄存器设置为10000-1(如要定时0.2s,则自动重装寄存器设置为0.2/(1/10000)-1.即2000-1)。

-

在main()函数中调用HAL_TIM_Base_Start_IT(&htim3)开启定时器,定时器从0开始计数,当计数到10000-1,即9999时,产出上溢出事件,计数器又从0开始继续计数。由于我们开启了定时器中断,所以发生上溢出事件时会触发定时器中断。程序会转跳到中断服务函数中运行。我们在中断服务函数中翻转LED的电平。下次定时器再次溢出触发中断继续翻转LED的电平。所以我们会看到LED不断闪烁。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 9 +9 收起 理由
donatello + 1
LiuYang + 1
new world + 1
15918457947 + 1
lygo + 1 赞一个!
chen0000009 + 1
汉云 + 1
黄莨元 + 1
Sourcelink + 1

查看全部评分

我要点赞 10

举报

发表于 2017-7-7 08:23:16
66666666666666
我要点赞 0

举报

发表于 2017-7-14 10:41:02
666,我还没用过Cube
我要点赞 0

举报

发表于 2017-7-20 07:26:56
继续加油,期待你的大作。
我要点赞 0

举报

发表于 2017-8-9 15:36:18

666,我还没用过Cube
我要点赞 0

举报

发表于 2017-8-18 08:39:06
用Cube的确是对这些硬件初始化之类的很方便,不过我嫌麻烦
我要点赞 0

举报

发表于 2017-8-23 12:44:50
哇,好高级
我要点赞 0

举报

您需要登录后才可以回帖 登录 | 立即注册